机器学习2-逻辑回归

前言

逻辑回归是一个分类算法(二元/多分类),并不是回归算法。Y是连续的才是回归模型。这里打算把公式推一遍。

算法思想

假设数据服从伯努利分布,在训练数据集中基于对数似然函数,利用梯度下降,找出最佳拟合曲线(最佳分类线 θ T X \theta^TX θTX),通过sigmoid输出的概率值将现有样本进行分类。

二元逻辑回归模型

对线性回归的结果再做一次函数转换,可变为分类模型,在逻辑回归中我们一般取sigmoid函数。 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1,其中 z > 0 z>0 z>0,则 g ( z ) > 0.5 g(z)>0.5 g(z)>0.5,预测值 y = 1 y=1 y=1 z < 0 z<0 z<0,则 g ( z ) < 0.5 g(z)<0.5 g(z)<0.5,预测值 y = 0 y=0 y=0 z = 0 z=0 z=0,无法确定分类。
令g(z)中的z为:z=xθ,这样就得到了二元逻辑回归模型的一般形式:
h θ ( x ) = 1 1 + e − x θ h_{\theta}(x)=\frac{1}{1+e^{-x\theta}} hθ(x)=1+exθ1
矩阵模式:
h θ ( X ) = 1 1 + e − X θ h_{\theta}(X)=\frac{1}{1+e^{-X\theta}} hθ(X)=1+eXθ1
逻辑回归不是连续的,用最大似然法来推导出我们的损失函数。
P ( y = 1 ∣ x , θ ) = h θ ( x ) P(y=1|x,\theta)=h_\theta(x) P(y=1x,θ)=hθ(x)
P ( y = 0 ∣ x , θ ) = 1 − h θ ( x ) P(y=0|x,\theta)=1-h_\theta(x) P(y=0x,θ)=1hθ(x)
合并
P ( y ∣ x , θ ) = h θ ( x ) y ( 1 − h θ ( x ) ) 1 − y P(y|x,\theta)=h_\theta(x)^y(1-h_\theta(x))^{1-y} P(yx,θ)=hθ(x)y(1hθ(x))1y
得到了y的概率分布函数表达式,我们就可以用似然函数最大化来求解我们需要的模型系数θ。

对数似然函数取反即为我们的损失函数J(θ)
在这里插入图片描述
m为样本个数

二元逻辑回归梯度推导

损失函数用矩阵法表达为:
J ( θ ) = − Y T l o g h θ ( X ) − ( I − Y ) T l o g ( I − h θ ( X ) ) J(\theta)=-Y^Tlogh_\theta(X)-(I-Y)^Tlog(I-h_\theta(X)) J(θ)=YTloghθ(X)(IY)Tlog(Ihθ(X))
用链式法则求导:
∂ l o g h ∂ h = 1 h \frac{\partial logh}{\partial h}=\frac{1}{h} hlogh=h1

∂ h θ ( x ) ∂ − x θ = h θ ( x ) ( 1 − h θ ( x ) ) \frac{\partial h_{\theta}(x)}{\partial -x\theta}=h_{\theta}(x)(1-h_{\theta}(x)) xθhθ(x)=hθ(x)(1hθ(x))

∂ − x θ ∂ θ = − x \frac{\partial -x\theta}{\partial \theta}=-x θxθ=x
可得,损失函数求导为:
∂ J ( θ ) ∂ θ = X T [ 1 h θ ( X ) ⊙ h θ ⊙ ( I − h θ ( X ) ) ⊙ ( − Y ) ] + X T [ 1 I − h θ ( X ) ⊙ h θ ⊙ ( I − h θ ( X ) ) ⊙ ( i − Y ) ] \frac{\partial J(\theta)}{\partial \theta}=X^T[\frac{1}{h_{\theta}(X)}\odot h_{\theta}\odot(I-h_{\theta}(X))\odot(-Y)]+X^T[\frac{1}{I-h_{\theta}(X)}\odot h_{\theta}\odot(I-h_{\theta}(X))\odot(i-Y)] θJ(θ)=XT[hθ(X)1hθ(Ihθ(X))(Y)]+XT[Ihθ(X)1hθ(Ihθ(X))(iY)]
∂ J ( θ ) ∂ θ = X T ( h θ ( X ) − Y ) \frac{\partial J(\theta)}{\partial \theta}=X^T(h_{\theta}(X)-Y) θJ(θ)=XT(hθ(X)Y)

多元逻辑回归模型

这里只介绍多元逻辑回归的softmax回归的一种特例推导:
我们假设是K元分类模型,即样本输出y的取值为1,2,。。。,K。
K元逻辑回归的概率分布如下:
在这里插入图片描述
损失函数(交叉熵):
![在这里插入图片描述](https://img-blog.csdnimg.cn/202005

逻辑回归&朴素贝叶斯

联系:

  1. Logistic regression和Naive bayes都是对特征的线性表达。不过并不是所有的朴素贝叶斯分类器都是线性分类器,只有某些具有特定属性的朴素贝叶斯分类器才是线性分类器,如连续特征的朴素贝叶斯分类器中方差不相同。
  2. Logistic regression和Naive bayes建模的都是条件概率 ,对所最终求得的不同类的结果有很好的解释性。而不像SVM,神经网络这样解释性不高。

区别

  1. Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P(y|x),实际上优化的是联合likelihood 。Logistic Regression是一个判别模型,它通过在训练数据集上最大化判别函数P(y|x)学习得到,不需要知道P(x|y)和P(y),优化的后验likelihood 。
  2. Naive Bayes是建立在条件独立假设基础之上的,设特征X含有n个特征属性,那么在给定Y的情况下,是条件独立的。Logistic Regression的限制则要宽松很多,如果数据满足条件独立假设,Logistic Regression能够取得非常好的效果;当数据不满足条件独立假设时,Logistic Regression仍然能够通过调整参数让模型最大化的符合数据的分布,从而训练得到在现有数据集下的一个最优模型。
  3. 当数据集比较小的时候,应该选用Naive Bayes,为了能够取得很好的效果,数据的需求量为O(log n)。当数据集比较大的时候,应该选用Logistic Regression,为了能够取得很好的效果,数据的需求量为O(n)。Naive Bayes运用了比较严格的条件独立假设,为了计算P(y|x),我们可以利用统计的方法统计数据集中P(x|y)和P(y)出现的次数,从而求得P(x|y)和P(y),因而其所需的数据量要小一些,为O(log n)。Logistic Regression在计算时,是在整个参数空间进行线性搜索的,需要的数据集就更大,为O(n)。数据量小的时候使用LR无法得到充足的训练因而效果不如朴素贝叶斯,当数据量大的时候LR可以得到充分的训练因而会比相对更为简单的NB性能更优。这也是因为Naive bayes是生成模型,在有prior的情况下模型能够把数据fit的更好,而Logistic regression属于判别模型,目标驱动化,不去建模联合概率,通过训练数据直接预测输出,因此在数据足够多的情况下能够得到更好一些的效果。
    Logistic regression在有相关性feature上面学习得到的模型在测试数据的performance更好。也就是说,logistic regression在训练时,不管特征之间有没有相关性,它都能找到最优的参数。而在Naive bayes中,由于我们给定特征直接相互独立的严格设定,在有相关性的feature上面学习到的权重同时变大或变小,它们之间的权重不会相互影响。从这方面来说,如果能够在对参数较好地控制,在损失项方面处理的很好的话,Logistic regression相对Naive bayes在应用时更不会限制在特征工程(feature engineering)上面。Naive bayes的好处是我没有优化参数这一步,通过训练数据我直接得到一个counting table,这些有助于并行化。不过现在LR也已经发展出了较多的并行化技术。

逻辑回归优缺点

优点:

1.简单高效,计算量小
2.以概率形式输出,也因此可做ranking model
3.可解释性强,可控度高(因每个特征的theta权重都是可知的,即可知哪些特征对结果影响最大)
4.添加(个性化)特征很简单
5.训练快,特征工程后效果更好
6.方便添加组合特征

缺点

1.本身无法筛选特征,可用GBDT筛选特征(后面详讲)
2.处理非线性数据,需进行转换(特征离散化,特征组合)
3.对样本分布敏感,即很难处理数据不平衡问题
4.准确度并不是很高,因为形式简单(非常类似线性模型),很难去拟合数据的真实分别

应用

垃圾邮件分类
天气预测、疾病判断和广告投放
CTR预估
电商购物搭配推荐

面试问题收集

  1. 线性回归和LR的区别:
    (1)线性回归要求变量服从正态分布;LR无要求
    (2)线性回归针对连续性变量;LR针对类别类变量
    (3)线性回归输出的是因变量和自变量的关系,主要做回归分析;LR输出是概率值,可做分类/回归
    (4)线性回归要求因变量和自变量呈线性关系;LR无此要求

  2. 为什么不能用线性回归而用LR做分类?
    因为线性回归对噪声敏感,鲁棒性不够,不能找到一个很好的阈值进行划分。由此,引出用LR,通过概率来进行分类,将线性回归映射为一个概率值,从而引出了sigmoid函数。

  3. 为什么要用sigmoid函数?
    (1) 输出为[0,1],可看作概率值,从而可根据这个概率值和伯努利分布进行分类(>0.5为正,反之为负);
    (2) sigmoid求导方便:f’(x) = f(x)(1-f(x)),方便进行梯度下降求最优参数

  4. 为什么不用均方误差函数来做loss?
    将Sigmoid函数代入均方差函数后是个非凸函数,即存在很多局部最优解,但不一定是全局最优解;

  5. 为什么要用似然估计做loss?
    sigmoid对数似然函数是关于(w,b)的凸函数,方便使用梯度下降进行凸优化找到最小loss。

  6. 逻辑回归的loss function?
    对数(互熵)损失函数(凸函数),当y=1,log(h(θ)); 当y=0,log(1-h(θ)).

  7. 多项式组合特征对哪个模型中效果提升最大?
    LR(非线性特组合),常结合GBDT进行特征组合

  8. 样本量太大怎么办?
    (1)离散后用one-hot编码处理为0,1值;
    (2)如果用连续值,做scaling(规约);
    (3)spark Mlib
    (4)采样,分层抽样(按照日期,用户…)

  9. 样本不平衡如何处理?
    (1) 下采样(样本量充足+detele),上采样(少+copy);
    (2) 修改损失函数,把负样本前面权重加大(如果负样本量少),比如分类y[-1.1]改为[-50.1],使得负样本权重增大;

  10. LR如何处理连续值变量?
    离散化

  11. LR特征处理-离散化的好处?
    (1)稀疏化,0,1向量内积相乘运算速度快;
    (2)给线性模型带来一定的非线性,提升模型表达能力;
    (3)模型更稳定,收敛度高,鲁棒性强;
    (4)一定程度上降低过拟合;
    (5)离散化后的特征对于异常数据有很强的鲁棒性;
    (6)离散化后可以进行特征交叉,进一步引入非线性,提升表达能力;
    (7)离散特征的增加和减少都很容易,易于模型的快速迭代

  12. LR在训练过程中,如果有很多特征高度相关或者一个特征重复了100遍,会造成怎样的影响?
    (1) 如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。
    (2) 但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。
    (3) 如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

  13. 为什么还是会在训练过程中将最相关的特征去掉?
    提高可解释性;提升训练速度

  14. 那LR如何处理线性相关特征/LR如何做特征选择?
    嵌入型特征选择(L1正则)

  15. LR处理缺失值?
    LR不能处理缺失值,应提前对缺失值做相应处理(均值,0/1,众数…)

  16. 为什么将极大似然取对数?
    (1) 统计学上,利用极大似然来估计sigmoid参数;
    (2) 为求解方便,防止多个P相乘造成的浮点数下溢,再取对数,从而得到对数损失函数

  17. sigmoid为什么可以做出概率?
    sigmoid输入[-无穷,+无穷]输出在[0,1]之间。

  18. 如何判定该分类曲线好坏?
    通过寻找最小损失函数(互熵损失函数)找到最佳判定分界

  19. LR如何解决多分类问题?
    softmax

  20. LR如何解决非线性分类问题?
    可利用GBDT进行特征组合x1x2,同时加入正则化项防止过拟合

参考链接:
https://blog.csdn.net/UniqueenCT/article/details/88912678

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值