逻辑回归可以用来做分类任务,通俗理解,就是讲输入映射到到概率区间0-1,从而实现分类功能,逻辑回归的公式推导如下:
假设函数为:
\[\hat{y} = h_\theta(x,g(\theta^Tx))=\frac{1}{1+e^{-\theta^Tx}} \]其中,\(g(z) = \frac{1}{1+e^{-z}}\)
在这种情况下,损失函数可以通过最大似然估计推导出来,首先:
\[\begin{equation} \begin{aligned} p(y=1|x,\theta)&=h_\theta(x) \\ p(y=1|x,\theta) &=1-h_\theta(x) \end{aligned} \end{equation} \]拼到一起可以表示为:
\(P(y|x,\theta) = (h_\theta(x))^y(1-h_\theta(x))^{1-y}\)
通过最大似然估计可以得到:
\[L(\theta)=\prod^m_{i=1}P(y_i|x_i,\theta)=\prod^m_{i=1}(h_\theta(x_i))^{y_i}(1-h_\theta(x_i))^{1-y_i} \]取log之后加上负号和平均使得求最大值变成求最小值, 这样就得到了逻辑回归的损失函数。
\[\begin{equation} \begin{aligned} J(\theta) & =-\frac{1}{m}*logL(\theta) \\ &= -\frac{1}{m}\sum_{i=1}^m((y_i*log(h_\theta(x_i))+(1-y_i)log(1-h_\theta(x_i))) \end{aligned} \end{equation} \]sklearn中的逻辑回归函数
class sklearn.linear_model.LogisticRegression
(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True,
intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs',
max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None,
l1_ratio=None)
常用参数说明
penalty是正则选项
逻辑回归参数,其中 penalty {‘l1’, ‘l2’, ‘elasticnet’, ‘none’}
当使用 elasticnet的时候, l1_ratio 表示l1 和 l2的比例
C是正则项的1/λ,由于sklearn中,C是在损失函数这一项里面,除过去就等价于放到了正则项前面。C越小,损失函数会越小,模型对损失函数的惩罚越重,正则化的效力越强,参数会逐渐被压缩得越来越小
multi_class
新版本中默认是 'auto',一般情况下使用默认就好
输入"ovr", "multinomial", "auto"来告知模型,我们要处理的分类问题的类型。默认是"ovr"。
'ovr':表示分类问题是二分类,或让模型使用"一对多"的形式来处理多分类问题。
'multinomial':表示处理多分类问题,这种输入在参数solver是'liblinear'时不可用。
"auto":表示会根据数据的分类情况和其他参数来确定模型要处理的分类问题的类型。比如说,如果数据是二分 类,或者solver的取值为"liblinear","auto"会默认选择"ovr"。反之,则会选择"nultinomial"。
sklarn中使用例子:
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(C=0.8,random_state=0).fit(X, y)
clf.predict(X[:2, :])
clf.predict_proba(X[:2, :])
clf.score(X, y)