理论推荐观看
https://zhuanlan.zhihu.com/p/74874291 (非常详细,公式偏多)
https://cuijiahua.com/blog/2017/11/ml_6_logistic_1.html(简单入门理论部分)
http://www.360doc.com/content/18/0123/11/49770339_724393519.shtml (LR部分)
1. LR的原理?
线性模型外面加个sigmoid激活函数,二分类分类器
通过上述推导我们可以看到 Logistic 回归实际上是使用线性回归模型的预测值逼近分类任务真实标记的对数几率,其优点有:
- 直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题(区别于生成式模型);
- 不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
- 对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。
2. LR的损失函数怎么来的?
3. LR为什么是线性模型?
LR本质上是一个线性模型再套上一个sigmod函数,这样把数据映射到【0,1】区间,方便对数损失函数计算损失值。
以下推导也可以说明,线性判别结果本来是根据是否大于0来判断是哪一类,经过sigmod之后变成概率值,就通过比值是否大于1(看哪个概率大)来判断是哪一类,这两个本质上是一回事。
4. LR为什么要采用对数损失函数?
(1)对数似然函数和交叉熵函数在二分类的情况下形式是几乎一样的,可以说最小化交叉熵的本质就是对数似然函数的最大化。对数似然函数的本质就是衡量在某个参数下,整体的估计和真实情况一样的概率,越大代表越相近。所以采用对数似然损失是基于LR的理论支撑(极大似然估计)所推导出来的。
(2)对数似然函数是凸函数,易于优化,能收敛到全局最优,而采取其他的损失如平方损失,它不是一个凸函数,不易优化且容易陷入局部最优解。
5. 为什么LR一般比线性回归要好?
这主要是由于线性回归在整个实数域内敏感度一致,它根据线性回归方程wx+b计算的结果是否大于0来确定分类,计算结果是包含整个实数域的。而分类范围,需要在[0,1]之内。逻辑回归减少了预测范围,且逻辑回归在0附近敏感,在远离0的位置不敏感,好处是模型更加关注分类边界,增加模型的鲁棒性。
6. LR如何解决低维不可分?
特征映射:通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。具体方法:核函数,如:高斯核,多项式核等等。
实际上LR很少用到核方法映射。
7. LR与SVM的区别在于哪些?
共同点:
- LR和SVM都是分类算法
- 如果不考虑核函数,LR和SVM都是线性分类算法,即分类决策面都是线性的
- LR和SVM都是有监督学习算法
- LR和SVM都是判别模型
不同点:
- 损失函数的不同,逻辑回归采用的是log loss(对数损失函数),svm采用的是hinge loss(合页损失函数)
- 分类原理的不同,LR基于概率理论,通过极大似然估计的方法估计出参数的值,而SVM基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面,从最大间隔出发,转化为求对变量w和b的凸二次规划问题
- 由于分类原理的不同,也导致了LR是所有样本都有影响,而SVM只是少量样本有影响的(支持向量),在支持向量外添加样本点是没有影响的
- 正因为LR受数据影响较大,所以在数据不同类别时,要先对数据做balancing;同样的,由于SVM依赖数据表达的距离测度,所以要先对数据做normalization标准化
- 对于线性不可分的情况,SVM的核函数可以帮助将低维不可分的数据转换到高维,变成线性可分的,而LR很少用到核函数(并不是没有。。)假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。
- SVM的损失函数就自带正则(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因,而LR必须另外在损失函数上添加正则化
8. 如何选择LR和SVM
如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
9. logistic用于多分类以及Softmax回归
softmax回归是logistic回归的推广,当也有所不同,logistic本质上还是线性回归套上一个sigmod函数,它线性回归输出的是一个值,进入sigmod函数后还是一个概率值(被压缩到0~1之间)。而softmax回归的输出值是一个向量,向量里元素个数等于标签里的类别数,损失函数用的是交叉熵。