线性回归模型产生的预测值z = ω T x + b =\omega^Tx+b =ωTx+b为实值,将实值z转换为0/1,完成2分类。
单位阶跃函数符合理想情况:
单位阶跃函数不连续,不能直接用作上述联系函数,对数几率函数logistic function是一定程度上近似单位阶跃函数的“替代函数”。
logistic function:
z ∈ ( − ∞ , + ∞ ) \in({- \infty,+\infty}) ∈(−∞,+∞), 如下图,将z映射到了(0,1)
由图可知,logistic function是一种Sigmoid函数,单调可微,将z值转化为一个接近0或1的y值,输出值在z=0附近变化很陡。
Sigmoid函数即形似S的函数,logistic function是Sigmoid函数的最重要代表。
替换z为线性回归模型的预测值:
变化后:
y = P ( y = 1 ∣ x ) y=P(y=1|x) y=P(y=1∣x),反应了给定输入 x x x预测为正样本的可能性,1- y y y为其预测为负样本的可能性,比值 y 1 − y y\over{1-y} 1−yy称为“几率”,所以逻辑回归可以看做是对于“y=1|x”这一事件的对数几率的线性回归。
总结:
P ( y = 1 ∣ x ) = y P(y=1|x)=y P(y=1∣x)=y= 1 1 + e − ( W T x + b ) 1\over {1 +e^{-(W^Tx+b)}} 1+e−(WTx+b)1= e ( W ∗ T x + b ∗ ) 1 + e ( W ∗ T x + b ∗ ) e^{(W^{*T}x+b^*)} \over {1 +e^{(W^{*T}x+b^*)}} 1+e(W∗Tx+b∗)e(W∗Tx+b∗) 正样本的可能性
P ( y = 0 ∣ x ) = 1 − P ( y = 1 ∣ x ) P(y=0|x)=1-P(y=1|x) P(y=0∣x)=1−P(y=1∣x)= 1 1 + e ( W ∗ T x + b ∗ ) 1\over {1 +e^{(W^{*T}x+b^*)}} 1+e(W∗Tx+b∗)1负样本的可能性
目的:学习得到参数 w ∗ , b ∗ w^*,b^* w∗,b∗,能使得正例的特征( w T x + b w^{T}x+b wTx+b)远远大于0,这样才可以判别为1.使得负例的特征( w T x + b w^{T}x+b wTx+b)远远小于0,这样才可以判别为0。
我们可通过最大似然法maximum likelihood method估计 w w w和 b b b的值:
具体参考这位大佬极大似然估计
整理如下:
给定输入 ( x 1 , x 2 , . . . . x n ) (x_1,x_2,....x_n) (x1,x2,....xn),并给定目标输出 ( y 1 , y 2 , . . . . . , y n ) (y_1,y_2,.....,y_n) (y1,y2,.....,yn);求W最应该的值应该是多少,这就是极大似然估计。
也就是说给定X,经过模型W得到Y的概率,求将概率 P ( Y ∣ X ; W ) P(Y|X;W) P(Y∣X;W)概率最大化的W。
对于 P ( Y ∣ X ; W ) P(Y|X;W) P(Y∣X;W) , 有定义如下:有多个样本 x 1 , x 2 , . . . . {x_1,x_2,....} x1,x2,....,每个样本都可以得到 p ( y ∣ x ; w ) p(y|x;w) p(y∣x;w), p ( y ∣ x ; w ) p(y|x;w) p(y∣x;w)表示样本为x,估计参数为 w w w时,发生 y y y的的概率. 概率相乘就可以得到总的概率。
那么样本值为: x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn时,
其中 L ( w ) L(w) L(w)成为样本的似然函数。
有 w ∗ w^{*} w∗使得 L ( w ) L(w) L(w) 的取值最大,那么 w ∗ w^{*} w∗就叫做参数 w w w的极大似然估计值。
由上述可得:
P ( y = 1 ∣ x ) = y P(y=1|x)=y P(y=1∣x)=y= 1 1 + e − ( W T x + b ) 1\over {1 +e^{-(W^Tx+b)}} 1+e−(WTx+b)1= e ( W T x + b ) 1 + e ( W T x + b ) e^{(W^{T}x+b)} \over {1 +e^{(W^{T}x+b)}} 1+e(WTx+b)e(WTx+b) 正样本的可能性
P ( y = 0 ∣ x ) = 1 − P ( y = 1 ∣ x ) P(y=0|x)=1-P(y=1|x) P(y=0∣x)=1−P(y=1∣x)= 1 1 + e ( W T x + b ) 1\over {1 +e^{(W^{T}x+b)}} 1+e(WTx+b)1负样本的可能性
用最大似然法估计w,b.
按照原步骤应为:
直接对上式取对数,即可得式3.25,跳过连乘步骤。
根据前面你的似然函数公式,是一堆的数字相乘,这种算法求导会非常麻烦,而取对数是一种很方便的手段:
由于ln对数属于单调递增函数,因此不会改变极值点,由于对数的计算法则: l n a b = b l n a , l n a b = b l n a 、 l n a b = l n a + l n b , lna^b=blna,lna^b=blna、lnab=lna+lnb, lnab=blna,lnab=blna、lnab=lna+lnb,,求导就很方便了。
接着式子3.26:
a r g m a x β L ( w , b ) = a r g m i n β ( − L ( w , b ) ) argmax_{\beta}L(w,b)=argmin_{\beta}(-L(w,b)) argmaxβL(w,b)=argminβ(−L(w,b))
样本类别不平衡点击此处
附官方英文文档详解:
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression
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=’liblinear’, max_iter=100, multi_class=’ovr’,
verbose=0, warm_start=False, n_jobs=1)[source]¶
参数 | 意义 | 备注 |
---|---|---|
penalty | 惩罚项,str类型,可选参数为l1和l2,默认为l2 | 用于指定惩罚项中使用的规范 。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),加约束的情况下,理论上应该可以获得泛化能力更强的结果。另newton-cg、sag和lbfgs求解算法只支持L2规范。 |
dual | 对偶或原始方法,bool类型,默认为False。 | 对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。 |
tol | 停止求解的标准,float类型,默认为1e-4 | 即求解到多少的时候停止,认为已经求出最优解。 |
c | 正则化系数λ的倒数,float类型,默认为1.0,必须是正浮点型数。 | 像SVM一样,越小的数值表示越强的正则化。 |
fit_intercept | 是否存在截距或偏差,bool类型,默认为True。 | 指定是否应将常量(a.k.a. bias或intercept)添加到决策函数中。 |
intercept_scaling | float类型,默认为1。 | 仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。【注意】合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。 |
class_weight | 用于标示分类模型中各种类型的权重,可以是一个字典dict或 ’balanced’ 字符串,默认为None,即不输入,不考虑权重 | 如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者自己输入各个类型的权重 。 举个例子,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9,1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]。 |
random_state | 随机数种子,int类型,可选参数,默认为无 | 仅在正则化优化算法为sag,liblinear时有用。 |
solver | 优化算法选择参数,有五个可选参数,即newtoncg, lbfgs, liblinear, sag,saga。 默认为liblinear。 | solver参数决定了我们对逻辑回归损失函数的优化方法,有五种算法可以选择,分别是: liblinear: 使用开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。saga:线性收敛的随机优化算法的的变种。 对于小型数据集,‘liblinear’是一个不错的选择,而 'sag’和’saga’对于大型的更快。对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失; 'liblinear’仅限于one-vs-rest方案。‘newton-cg’, 'lbfgs’和’sag’只处理L2惩罚,而’liblinear’和’saga’处理L1惩罚。请注意,“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证。 您可以使用sklearn.preprocessing中的缩放器预处理数据。版本0.17中的新功能:随机平均梯度下降求解器。版本0.19中的新功能:SAGA slover。 |
max_iter | 算法收敛最大迭代次数,int类型,默认为100 | 仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数 |
multi_class | 分类方式选择参数,str类型,可选参数为’ovr’和’multinomial’,默认为’ovr’。 | ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。多类选项可以是’ovr’或’multinomial’。 如果选择的选项是’ovr’,那么二进制问题适合每个标签。 另外,最小化损失是整个概率分布中的多项式损失拟合。 不适用于liblinear解算器。版本0.18中的新功能:“多项式”案例的随机平均梯度下降求解器。 |
verbose | 日志冗长度,int类型。默认为0 | 0就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出 |
warm_start | 热启动参数,bool类型。默认为False。 | 如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化),否则,只需擦除以前的解决方案。 对于liblinear解算器没用。 |
n_jobs | 并行数,int类型,默认为1。 | 1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。 |
在分类模型中,我们经常会遇到两类问题:
OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。
而MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。
可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。
优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低。
缺点:容易欠拟合,分类精度可能不高。
其他: