把握机器学习算法关键点有两个
1、loss function的理解(包括:特征X/标签Y配对的建模,X/Y配对建模的loss function的设计)。
2、loss function的求解过程。这两点串接在一起构成了算法实现的主框架。
—— superzzx0920
尝试用一句话说出本质区别:线性分类模型和非线性回归模型的区别,类似草食性小鸟和肉食性恐龙的区别。
从机器学习三要素的角度:
模型
本质上来说,他们都是监督学习,判别模型,直接对数据的分布建模,不尝试挖据隐含变量,这些方面是大体相同的。
但是又因为一个是线性模型,一个是非线性模型,因此其具体模型的结构导致了VC维的不同:
其中,Logistic Regression作为线性分类器,它的VC维是d+1,而XGBoost作为boosting模型,可以无限分裂,具有无限逼近样本VC维的特点,因此其VC维远远大于d+1,这都是由于其线性分类器的特征决定的,归结起来,是Logistic Regression对数据线性可分的假设导致的
策略
从Loss+正则的框架开始说起:
从Loss的角度:
因为Logistic Regression的输出是y=1的概率,所以在极大似然下,Logistic Regression的Loss是交叉熵,此时,Logistic Regression的准则是最大熵原理,也就是“为了追求最小分类误差,追求最大熵Loss”,
本质上是分类器算法,而且对数据的噪声具有高斯假设;
而XGBoost是回归树的残差的绝对值(GBDT是残差MSE)的二阶导数
,也就是“为了追求最小残差,追求残差最小Loss”,本质上是回归算法。
PS:而残差不能使用SGD等梯度优化算
法,也带来了算法上的不同
PSS:XGBoost也可以选择平方差损失,log损失等,但是默认的是残差二阶导
这种误差的差别,从几何的角度讲:
就是因为Logistic Regression是特征的线性组合求交叉熵的最小化,也就是把特征做logistic变换后进行的线性组合(是吗),使得Logistic Regression会在特征空间中做线性分界面并使得分界面到点的函数距离最小,会用一个斜线进行分界面的划分,适用于分类任务;而XGBoost的分界面都平行于特征空间的坐标轴,多个分界面分别最小化的,实际上是分界面到坐标点的曼哈顿距离,于是会利用一个类似于我的世界的像素边界进行划分,所以能带来更好的的特征选择和分界面,适用于连续值的回归。
说到最佳判据,就可以从三大判别准则的角度说说区别:
其中,LR属于感知机准则
从正则的角度:
Logistic Regression的正则是XtX矩阵变成满秩,比如L2 Loss相当于在XtX后面乘以一个单位对角矩阵使得数组变成满秩,而L1 loss是...
XGBoost的正则是一棵树里面节点的个数,以及每个树叶子节点上面输出分数的L2模平方,也就是L1+L2
区别在于一个直接用对角矩阵对解进行整体的限定,一个用迭代的误差控制本轮参数的增长
算法 :
因为可导性不同,所以优化器不同,但是其中很多的原理是相同的。
其中,Logistic Regression采用的牛顿等优化器跟而XGBoost采用二阶泰勒展开都利用了二阶导数信息的思想
Logistic Regression采用的SAG/SAGA等优化器会在使用上一次一阶导数信息的1/n以进行本次的迭代,跟XGB的Shrinkage都一样地采用了梯度衰减的思想
PS:虽然,这些都不是目前常用的优化器,这也是跟
Logistic Regression本身的低计算量有关的。SAG/SAGA等优化器在scikit-learn上可用,但是业界用得比较多的还是
BGFS,L-BGFS等,个人认为是计算量的原因,Logistic Regression模型很快就可以收敛,在线性可分的空间中也不容易出现鞍点,而且一般用Logistic Regression模型的数据量都比较大,大到不能上更复杂的模型,所以优化方法一般都是往计算量小的方向做
从特征的角度:
特征组合:
如前所说,XGBoost寻求残差最小的分裂点,所以自动会在当前根据特征A分裂的子树下寻求其他能使残差最小的其他特征B,这样就自动具备寻求好的特征组合的性能,因此也能给出哪些特征比较重要(根据残差的下降量)
而LR只是一次性地寻求最大化熵的过程,对每一维的特征都假设独立,因此只具备对已有特征空间进行分割的能力,更不会对特征空间进行升维(特征组合)
特征的稀疏性:
如前所述,Logistic Regression不具有特征组合的能力,并假设特征各个维度独立,因此只具有线性分界面,实际应用中,多数特征之间有相关性,只有维度特别大的稀疏数据中特征才会近似独立,所以应应用在特征稀疏的数据上
对于XGBoost,
使用的角度:
XGBoost的Loss比较复杂,参数比较多,但是可以支持自定义Loss,会自动求一阶和二阶导数,也就是说其实是一个残差学习框架,应用于适用感知器准则的任何框架。
PS:腾讯招聘岗位要求跟别的公司不一样,它写“熟悉Tensorflow,XGBoost等框架”,其他公司一般把XGBoost看成是一种算法,差距从中可见一斑
隐含假设的不同
Logistic Regression的假设:
1.噪声是高斯分布的
2.在$P=0$或$P=1$附近,$P$对$X$的变化并不敏感。
3.特征独立
4.P=0或P=1时,特征保持同方差假设
抛砖引玉,基于这个框架还可以写出:K-NN跟K-means的区别,DNN跟GBDT的区别等,我还需要多多思考
参考文献:
XGBoost
– 陈天奇
XGBoost 与 Boosted Tree http://www.52cs.org/?p=429
SAG – Mark Schmidt, Nicolas Le Roux, and Francis Bach
Minimizing Finite Sums with the Stochastic Average Gradient
https://hal.inria.fr/hal-00860051/document
SAGA – Defazio, A., Bach F. & Lacoste-Julien S. (2014).
SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives https://arxiv.org/abs/1407.0202