逻辑回归与线性回归的联系与区别
线性回归(linear regression)和逻辑回归(logistic regression)是两种常用的最基本的回归形式。这两者之间的本质区别在于,当因变量本质上是二元时,使用逻辑回归。当因变量是连续的并且回归线的性质是线性的时,使用线性回归。
逻辑回归的名字中虽然带有回归两个字,不过这是一个并不是一个回归算法,而是一个分类算法,它是在线性回归的基础上加入了sigmoid函数,将线性回归的结果输入至sigmoid函数中,并且设定一个阈值,如果大于阈值为1,小于阈值则为0。
逻辑回归的原理
logistic函数的表达式如下,其中w是需要训练的权值:
θ ( ω T x ) = 1 1 + e − w T x \theta (\omega^Tx)=\frac{1}{1+e^{-w^Tx}} θ(ωTx)=1+e−wTx1
逻辑回归的损失函数叫做交叉熵损失函数(cross-entropy loss),下面给出推导过程。
假设数据集符合泊松分布,即
P ( y ∣ x ) = { p , y = 1 1 − p , y = 0 = p y ( 1 − p ) 1 − y P(y|x)=\begin{cases} p, &y=1 \\ 1-p, &y=0 \end{cases}=p^y(1-p)^{1-y} P(y∣x)={p,1−p,y=1y=0=py(1−p)1−y
其中概率p是根据logistic函数计算出来的:
p = 1 1 + e − w T x p=\frac{1}{1+e^{-w^Tx}} p=1+e−wTx1
假设有N个数据点 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。假设各个数据点之间相互独立,则根据最大似然估计有:
P ( Y ∣ X ) = P ( y 1 , y 2 , . . . , y N ∣ x 1 , x 2 , . . . , x N ) = ∏ i = 1 N P ( y i ∣ x i ) = ∏ i = 1 N p i y i ( 1 − p i ) 1 − y i P(Y|X)=P(y_1,y_2,...,y_N|x_1,x_2,...,x_N) =\textstyle\prod_{i=1}^NP(y_i|x_i)=\textstyle\prod_{i=1}^Np_i^{y_i}(1-p_i)^{1-y_i} P(Y∣X)=P(y1,y2,...,yN∣x1,x2,...,xN)=∏i=1NP(yi∣xi)=∏i=1Npiyi(1−pi)1−yi
对等式两边取负对数,得到负对数函数为:
L ( Y ∣ X ) = − ∑ i = 1 N y i l n ( p i ) + ( 1 − y i ) l n ( 1 − p i ) L(Y|X)=-\textstyle\sum_{i=1}^Ny_iln(p_i)+(1-y_i)ln(1-p_i) L(Y∣X)=−∑i=1Nyiln(pi)+(1−yi)ln(1−pi)
其中 y i y_i yi代表数据真实的标签,取值为0或1, p i p_i pi为数据为类别1的概率,取值范围是0到1。负对数函数对N个样本取平均,便得到交叉熵损失函数如下:
l o s s ( ω ) = − 1 N ∑ i = 1 N y i l n ( p i ) + ( 1 − y i ) l n ( 1 − p i ) loss(\omega)=-\frac{1}{N}\textstyle\sum_{i=1}{N}y_iln(p_i)+(1-y_i)ln(1-p_i) loss(ω)=−N1∑i=1Nyiln(pi)+(1−yi)ln(1−pi)
可以看到,当 y i y_i yi=1时, p i p_i pi越接近1,损失函数越小;当 y i y_i yi=0时, p i p_i pi越接近0,损失函数越小。因此,通过训练,可以迫使 p i p_i pi趋近于 y i y_i yi,从而正确分类。说逻辑回归是线性分类器,这里的线性怎么理解呢?通过Logistic函数可以看到,决定概率值的是 ω T x \omega^Tx ωTx的值。当 ω T x \omega^Tx ωTx>0时,概率值大于0.5,类别为1;当 ω T x \omega^Tx ωTx<0时,概率值小于0.5,类别为0。也就是说, ω T x \omega^Tx ωTx=0是两类数据的分界面(分类超平面,如下图)。这种用一个超平面将数据进行分类的,就是线性分类器。对应的,如果用一个曲面将数据进行分类,则是非线性分类器了。
逻辑回归损失函数推导及优化
逻辑回归模型预估的是样本属于某个分类的概率,其损失函数(Cost Function)可以像线型回归那样,以均方差来表示;也可以用对数、概率等方法。损失函数本质上是衡量”模型预估值“到“实际值”的距离,选取好的“距离”单位,可以让模型更加准确。下面是常见的几个损失函数
1.均方差距离
J s q r t ( ω ) = ∑ i = 1 m y i ( 1 − p ( x i , ω ) ) 2 + ( 1 − y i ) ( 0 − p ( x i , ω ) ) 2 J_{sqrt}(\omega )=\displaystyle\sum_{i=1}^my_i(1-p(x_i,\omega ))^2+(1-y_i)(0-p(x_i,\omega))^2 Jsqrt(ω)=i=1∑myi(1−p(xi,ω))2+(1−yi)(0−p(xi,ω))2
用均方差作为损失函数,当模型完全预估错误时(y=1,p=0;或y=0,p=1),损失是1。预估正确时,损失是0。错误值离正确值的“距离”相对较小,区分度不大。
另外,上面的损失函数相对 θ \theta θ并非是凸函数,而是有很多极小值(local minimum)的函数。因此,很多凸优化的算法(如梯度下降)无法收敛到全局最优点。
log距离
J l o g ( ω ) = ∑ i = 1 m [ − y i L o g ( p ( x i , ω ) ) − ( 1 − y i L o g ( 1 − p ( x i , ω ) ) ] J_{log}(\omega)=\displaystyle\sum_{i=1}^m[-y_iLog(p(x_i,\omega))-(1-y_iLog(1-p(x_i,\omega))] Jlog(ω)=i=1∑m[−yiLog(p(xi,ω))−(1−yiLog(1−p(xi,ω))]
3.概率距离 J l o g ( ω ) = − ∏ i = 1 m ( p ( x i , ω ) ) y i ( 1 − p ( x i , ω ) ) 1 − y i J_{log}(\omega)=-\displaystyle\prod_{i=1}^m(p(x_i,\omega))^{y_i}(1-p(x_i,\omega))^{1-y_i} Jlog(ω)=−i=1∏m(p(xi,ω))yi(1−p(xi,ω))1−yi
正则化与模型评估指标
正则化的思想是, θ \theta θ前面的参数会使得函数变得很大,如果想要最小化整个函数的话,那么正则化部分的 θ \theta θ必须要小才能满足要求(可以将 θ \theta θ压缩到接近0)。一般正则化不对 θ \theta θ增加惩罚项,只对1到n,只是约定俗成的,就算对0惩罚也没有什么影响。一般我们不知道是哪个参数导致过拟合,所以我们惩罚所有的参数。那么,加了惩罚项的损失函数为(一逻辑回归为例):
J ( θ ) = 1 m [ − y ( i ) × l o g ( h θ ( x ( i ) ) ) + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac1m[-y^{(i)}\times log(h_{\theta}(x^{(i)}))+\lambda \displaystyle \sum_{j=1}^n\theta_j^2] J(θ)=m1[−y(i)×log(hθ(x(i)))+λj=1∑nθj2]
经过正则化之后,线性回归的代价函数变为:
J ( θ ) = 1 2 m ∑ i = 1 m [ h θ ( x ( i ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac1{2m}\displaystyle\sum_{i=1}^m[h_\theta(x^{(i)}-y^{(i)})^2+\lambda\displaystyle\sum_{j=1}^n\theta_j^2] J(θ)=2m1i=1∑m[hθ(x(i)−y(i))2+λj=1∑nθj2]
逻辑回归的代价函数变为:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) × l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) × l o g ( 1 − h θ ( x ( i ) ) ) + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac1{m} \displaystyle\sum_{i=1}^m[-y^{(i)}\times log(h_\theta (x^{(i)}))-(1-y^{(i)})\times log(1-h_\theta(x^{(i)}))+\lambda\displaystyle\sum_{j=1}n\theta_j^2] J(θ)=m1i=1∑m[−y(i)×log(hθ(x(i)))−(1−y(i))×log(1−hθ(x(i)))+λj=1∑nθj2]
评估指标
1.ROC曲线、AUC
ROC曲线的横坐标为false positive rate(FPR),纵坐标为 true positive rate(TPR)
当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。根据每个测试样本属于正样本的概率值从大到小排序,依次将 “Score”值作为阈值threshold,当测试样本属于正样本的概率 大于或等于这个threshold时,认为它为正样本,否则为负样本。一个典型的ROC曲线如下图:
计算出ROC曲线下面的面积,就是AUC的值。 介于0.5和1.0之间,越大越好。
Kappa statics
2.Kappa值,即内部一致性系数(inter-rater,coefficient of internal consistency),是作为评价判断的一致性程度的重要指标。取值在0~1之间。Kappa≥0.75两者一致性较好;0.75>Kappa≥0.4两者一致性一般;Kappa<0.4两者一致性较差。
第一个图上,所显示的Kappa值有0.9356,那就算很好了。
3.Mean absolute error 和 Root mean squared error
平均绝对误差和均方根误差,用来衡量分类器预测值和实际结果的差异,越小越好。
4.Relative absolute error 和 Root relative squared error
相对绝对误差和相对均方根误差,有时绝对误差不能体现误差的真实大小,而相对误差通过体现误差占真值的比重来反映误差大小。
逻辑回归的优缺点
优点:1)适合需要得到一个分类概率的场景。2)计算代价不高,容易理解实现。LR在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。3)LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征。)
缺点:1)容易欠拟合,分类精度不高。2)数据特征有缺失或者特征空间很大时表现效果并不好。
样本不均衡问题解决办法
样本不均衡的问题有很多,主要有:
1.样本的过采样和欠采样
1)过采样:将稀有类别的样本进行复制,通过增加稀有类样本的数量来平衡数据集。该方法适用于数据量比较小的情况。
2)欠采样:从丰富类别的样本中随机选取和稀有类别相同数目的样本,通过减少丰富类的样本量啦平衡数据集。该方法适用于数据量较大的情况。
3)也可以将过采样和欠采样结合在一起使用。
4)还可以使用SMOTE方法来构造样本。
2.使用多个分类器进行分类
1)模型融合(bagging的思想):从丰富类样本中随机的选取(有放回的选取)和稀有类等量样本的数据。和稀有类样本组合成新的训练集。这样我们就产生了多个训练集,并且是互相独立的,然后训练得到多个分类器。
2)增量模型 (boosting的思想)使用全部的样本作为训练集,得到分类器L1从L1正确分类的样本中和错误分类的样本中各抽取50%的数据,即循环的一边采样一个。此时训练样本是平衡的。训练得到的分类器作为L2.从L1和L2分类结果中,选取结果不一致的样本作为训练集得到分类器L3。最后投票L1,L2,L3结果得到最后的分类结果。
3.将二分类问题转换为其他问题
可以将不平衡的二分类问题转换成异常点检测,或者一分类问题(可使用one-class svm建模)
4.改变正负类别样本在模型中的权重
使用代价函数学习得到每个类的权值,大类的权值小,小类的权值大。刚开始,可以设置每个类别的权值与样本个数比例的倒数,然后可以使用过采样进行调优。
sklearn参数
逻辑回归是在线性回归的基础上,加了一个sigmod函数,两个模型在都需要学习线性模型中的参数,sklearn库中LogisticRegression分类器的coef_变量对应模型参数 ω \omega ω,intercept 对应参数b 。