版权声明:本文为CSDN博主「tianbwin2995」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tianbwin2995/article/details/51853869
看了许多文献,以及最近的项目经验,终于真正地搞懂了LR。
以前总听大家说,看你对机器学习搞得透彻不透彻,就看你逻辑回归理解得怎么样;自己是统计出身的我,一直很有自信,以为无非就是个极大似然估计,求那个似然函数的极大值而已。然而实际上,这个之中也有很多的说法在里面,比如,求参数的方法。
在逻辑回归中,我们极大似然估计的参数是可以通过“极大化该参数值”得到的,然而得到参数之后,并不代表我们就完成了,因为成千上万的样本,我们的参数要“收敛”才是一个稳定的model。
那么问题来了,怎样更新我的参数,让其收敛呢?
有两种方式:在sklearn的LogisticRegression里,是通过每次增加负样本权重【】的方式,让样本“重新排列”,之后得到了一个新的theta,直到两次样本基本上都不怎么变。
在sklearn里,还有一个分类器,之前一直没搞懂,感觉跟logistic回归的结果啊,目的啊都是一样的啊,那么它出现的意义是什么?
后来我重新读了一遍,发现LR那里面的参数没有学习率,衰减率,等等。
让我突然意识到这个LR的参数好像不是通过梯度下降求的。
后面这个SGDClassification,里面有learning rate,有decay等等,后来发现,是通过真正的梯度下降来求参的。【名称也就是“随机梯度下降”】
然后,看见许多人都说,在大规模数据下,基本上都要用到梯度下降的方法。
【以下转自“机器学习算法一览,应用建议与解决思路 ”】
3.3 关于大数据样本集和高维特征空间
我们在小样本的toy dataset上,怎么捣鼓都有好的方法。但是当数据量和特征样本空间膨胀非常厉害时,很多东西就没有那么好使了,至少是一个很耗时的过程。举个例子说,我们现在重新生成一份数据集,但是这次,我们生成更多的数据,更高的特征维度,而分类的类别也提高到5。
3.3.1 大数据情形下的模型选择与学习曲线
在上面提到的那样一份数据上,我们用LinearSVC可能就会有点慢了,我们注意到机器学习算法使用图谱推荐我们使用SGDClassifier。其实本质上说,这个模型也是一个线性核函数的模型,不同的地方是,它使用了随机梯度下降做训练,所以每次并没有使用全部的样本,收敛速度会快很多。再多提一点,SGDClassifier对于特征的幅度非常敏感,也就是说,我们在把数据灌给它之前,应该先对特征做幅度调整,当然,用sklearn的StandardScaler可以很方便地完成这一点。
SGDClassifier每次只使用一部分(mini-batch)做训练,在这种情况下,我们使用交叉验证(cross-validation)并不是很合适,我们会使用相对应的progressive validation:简单解释一下,estimator每次只会拿下一个待训练batch在本次做评估,然后训练完之后,再在这个batch上做一次评估,看看是否有优化。
【转载结束】
然后,在VW中,实际上也就是优化了一个SGD,因为VW里的参数基本上都是各种学习率。
所以说,我理解,VW实际上就是一个优化了的,通过梯度下降的方法来解决各种求解loss function的分类器。
如果loss function是hinge loss 那么就是SVM
如果是log 那就是LR
如果是square 平方误差,那么就是线性回归
如果是quantile,那么就是求解中位数的线性回归
如果是0-1损失 就是说“计数缺失了多少”,那么【在vw后面加binary】
【以下转自知乎】
1.数据集很大还是优先考虑 SGD regressor。
尤其特别大数据集,SGD外,几乎别无他法。跑不动。
2.不是特别特别大的,
先试试岭回归或linear kernal的SVR。
3.不管用,换RBF kernal或者Ensemble regressor。
4.如果有important features要先feature selection,则适用Lasso,ElasticNet。同样是指非特大数据集。
作者:Fu Tiffany
链接:https://www.zhihu.com/question/21704547/answer/74404131
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结
用自己语言总结一下,可能不全面,有机会再补充:
1. LR有两种求参数的方法,一种是梯度下降,一种是改变正负样本权重。梯度下降的时候,把特征归一化会有利于梯度的下降【参见知乎:为什么 feature scaling 会使 gradient descent 的收敛更好?https://www.zhihu.com/question/37129350】扁平的梯度下降的方向不是真正速率最快的方向。
2. FTRL用的就是随机梯度下降SGD(OGD)的方法,它不同点在于每个特征都是独立随机下降的。而且会根据某个特征出现的比例来加载权重的。因此会导致某几个特征出现的值很大,影响评分。【因为负样本的存在】
3. LR输出的是样本的概率
4. BFGS用的是拟牛顿的办法,模仿了逆hessian矩阵。避免了存储逆hessian矩阵。
5. LR和SVM的区别:SVM寻求的是一个超平面,因此并不是每个样本都对其平面有影响;LR是每个样本点对超平面都有影响。SVM是无法输出概率的,得到的也是距离超平面的一个距离的函数。【libsvm也是一个距离的测度,求解的时候也是转换成lr再求解的】
6. SVM必须中心化,因为这是跟“距离”有关的,不正规化之后会出问题
7. LR的损失函数是log loss SVM的损失函数是hinge LOSS
————————————————