机器学习算法优缺点及适用场景总结

机器学习算法优缺点及适用场景总结

1.线性回归

线性回归的目的是要得到输出向量Y和输入特征X之间的线性关系,求出线性回归系数θ,也就是 Y = X ∗ θ + ξ Y=X*θ+ξ Y=Xθ+ξ。其中Y的维度为 m ∗ 1 m*1 m1,X的维度为 m ∗ n m*n mn,而θ的维度为 n ∗ 1 n*1 n1。m代表样本个数,n代表样本特征的维度。

为了得到线性回归系数θ,我们需要定义一个损失函数,一个极小化损失函数的优化方法,以及一个验证算法的方法。损失函数的不同,损失函数的优化方法的不同,验证方法的不同,就形成了不同的线性回归算法。
在这里插入图片描述

scikit-learn中的线性回归算法库可以从这这三点找出各自的不同点。理解了这些不同点,对不同的算法使用场景也就好理解了。

1. LinearRegression

损失函数:
LinearRegression类就是我们平时说的最常见普通的线性回归,它的损失函数也是最简单的,如下:
J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) J(θ)=21(XθY)T(XθY)

损失函数的优化方法:

对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit中的LinearRegression类用的是最小二乘法。通过最小二乘法,可以解出线性回归系数θ为:
θ = ( X T X ) − 1 X T Y \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} θ=(XTX)1XTY
验证方法:

LinearRegression类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,然后训练优化。

使用场景:

一般来说,只要我们觉得数据有线性关系,LinearRegression类是我们的首先。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。如果是学习线性回归,推荐先从这个类开始第一步的研究。

2. Ridge

损失函数:

由于第一节的LinearRegression没有考虑过拟合的问题,有可能泛化能力较差,这时损失函数可以加入正则化项,如果加入的是L2范数的正则化项,这就是Ridge回归。损失函数如下:

J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) + 1 2 α ∣ ∣ θ ∣ ∣ 2 2 J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \frac{1}{2}\alpha||\theta||_2^2 J(θ)=21(XθY)T(XθY)+21α∣∣θ22

其中α为常数系数,需要进行调优。||θ||2为L2范数。

Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,不至于过拟合。

损失函数的优化方法:

对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit中的Ridge类用的是最小二乘法。通过最小二乘法,可以解出线性回归系数θ为:

θ = ( X T X + α E ) − 1 X T Y \mathbf{\theta = (X^TX + \alpha E)^{-1}X^TY} θ=(XTX+αE)1XTY
其中E为单位矩阵。

验证方法:

Ridge类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数α。然后训练优化。

使用场景:

一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合的不是特别好,需要正则化,可以考虑用Ridge类。但是这个类最大的缺点是每次我们要自己指定一个超参数α。如果输入特征的维度很高,而且是稀疏线性关系的话,Ridge类就不合适了。这时应该主要考虑Lasso回归类。

3. Lasso

损失函数:

线性回归的L1正则化通常称为Lasso回归,它和Ridge回归的区别是在损失函数上增加了的是L1正则化的项,而不是L2正则化项。L1正则化的项也有一个常数系数α来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:

J ( θ ) = 1 2 m ( X θ − Y ) T ( X θ − Y ) + α ∣ ∣ θ ∣ ∣ 1 J(\mathbf\theta) = \frac{1}{2m}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha||\theta||_1 J(θ)=2m1(XθY)T(XθY)+α∣∣θ1

其中n为样本个数,α为常数系数,需要进行调优。||θ||1为L1范数。

Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。

损失函数的优化方法:

Lasso回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法。Lasso类采用的是坐标轴下降法

验证方法:

Lasso类并没有用到交叉验证之类的验证方法,和Ridge类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数α。然后训练优化。

使用场景:

一般来说,对于高维的特征数据,尤其线性关系是稀疏的,我们会采用Lasso回归。或者是要在一堆特征里面找出主要的特征,那么Lasso回归更是首选了。但是Lasso类需要自己对α调优。

2.LR:逻辑回归

在这里插入图片描述

二元逻辑回归模型的一般形式:

h θ ( X ) = 1 1 + e − X θ h_{\theta}(X) = \frac{1}{1+e^{-X\theta}} hθ(X)=1+e1

X为样本特征矩阵,为mxn的维度,hθ(x)为模型输出,为 mx1的维度,可以理解为某一分类的概率大小。而θ为分类模型的要求出的模型参数,为nx1的向量。

损失函数:
用最大似然法来推导出我们的损失函数:
J ( θ ) = − Y T l o g h θ ( X ) − ( E − Y ) T l o g ( E − h θ ( X ) ) J(\theta) = -Y^Tlogh_{\theta}(X) - (E-Y)^T log(E-h_{\theta}(X)) J(θ)=YTloghθ(X)(EY)Tlog(Ehθ(X))

损失函数的优化方法:
对于二元逻辑回归的损失函数极小化,有比较多的方法,最常见的有梯度下降法,坐标轴下降法,等牛顿法等。这里推导出梯度下降法中θ每次迭代的公式。

θ = θ − α X T ( h θ ( X ) − Y ) \theta = \theta - \alpha X^T(h_{\theta}(X) - Y ) θ=θαXT(hθ(X)Y)

其中,α为梯度下降法的步长。

正则化

逻辑回归也会面临过拟合问题,所以我们也要考虑正则化。常见的有L1正则化和L2正则化。

逻辑回归的L1正则化的损失函数表达式如下,相比普通的逻辑回归损失函数,增加了L1的范数做作为惩罚,超参数α作为惩罚系数,调节惩罚项的大小。
J ( θ ) = − Y T ∙ l o g h θ ( X ) − ( E − Y ) T ∙ l o g ( E − h θ ( X ) ) + α ∣ ∣ θ ∣ ∣ 1 J(\theta) = -Y^T\bullet logh_{\theta}(X) - (E-Y)^T\bullet log(E-h_{\theta}(X)) +\alpha ||\theta||_1 J(θ)=YTloghθ(X)(EY)Tlog(Ehθ(X))+α∣∣θ1

二元逻辑回归的L2正则化损失函数表达式如下:
J ( θ ) = − Y T ∙ l o g h θ ( X ) − ( E − Y ) T ∙ l o g ( E − h θ ( X ) ) + 1 2 α ∣ ∣ θ ∣ ∣ 2 2 J(\theta) = -Y^T\bullet logh_{\theta}(X) - (E-Y)^T\bullet log(E-h_{\theta}(X)) + \frac{1}{2}\alpha||\theta||_2^2 J(θ)=YTloghθ(X)(EY)Tlog(Ehθ(X))+21α∣∣θ22

适用场景
逻辑回归尤其是二元逻辑回归是非常常见的模型,训练速度很快,虽然使用起来没有支持向量机(SVM)那么占主流,但是解决普通的分类问题是足够了,训练速度也比起SVM要快不少。如果你要理解机器学习分类算法,那么第一个应该学习的分类算法个人觉得应该是逻辑回归。

优缺点:

  1. 实现简单,计算量小,速度快,存储资源低。便利的查看样本概率分数。可以使用L2正则化来消除多重共线性问题。
  2. 当特征空间很大时,欠拟合,准确率不高。只能处理线性可分问题,对于非线性问题需要进行特征转换。不能很好的处理大量多分类特征。

3.KNN:最近邻算法

核心思想
KNN算法的核心思想是,如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
在这里插入图片描述
算法流程
总体来说,KNN分类算法包括以下4个步骤:
①准备数据,对数据进行预处理
②计算测试样本点(也就是待分类点)到其他每个样本点的距离
③对每个距离进行排序,然后选择出距离最小的K个点
④对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类

优缺点:

  1. 理论成熟,思想简单,既可以用来做分类也可以用来做回归。可用于非线性分类。训练时间复杂度比支持向量机之类的算法低,仅为O(n)。和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
  2. 计算量大,尤其是特征数非常多的时候。样本不平衡的时候,对稀有类别的预测准确率低。KD树,球树之类的模型建立需要大量的内存。使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢。相比决策树模型,KNN模型可解释性不强

4.朴素贝叶斯

在这里插入图片描述

算法原理

朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。
P ( Y k ∣ X ) = P ( X ∣ Y k ) P ( Y k ) ∑ k P ( X ∣ Y = Y k ) P ( Y k ) P(Y_k|X) = \frac{P(X|Y_k)P(Y_k)}{\sum\limits_{k}P(X|Y =Y_k)P(Y_k)} P(YkX)=kP(XY=Yk)P(Yk)P(XYk)P(Yk)

算法过程

  1. 计算先验概率:求出样本类别的个数 K 。对于每一个样本 Y=Ck ,计算出 P(Y=Ck) 。其为类别 Ck 在总样本集中的频率;
  2. 计算条件概率:将样本集划分成 K 个子样本集,分别对属于 Ck 的子样本集进行计算,计算出其中特征 X j = a j l X_j = a_{jl} Xj=ajl 的概率: P ( X j = a j l ∣ Y = C k ) P(X_j=a_{jl}|Y=C_k) P(Xj=ajlY=Ck)。其为该子集中特征取值为 ajl 的样本数与该子集样本数的比值;
  3. 针对待预测样本 xtest ,计算其对于每个类别 Ck 的后验概率: P ( Y = C k ∣ X = x t e s t ) = P ( Y = C k ) ∏ j = 1 n P ( X j = x j t e s t ∣ Y = C k ) P(Y=C_k|X=x^{test}) = P(Y=C_k)\prod_{j=1}^n P(X_j=x_j^{test}|Y=C_k) P(Y=CkX=xtest)=P(Y=Ck)j=1nP(Xj=xjtestY=Ck),概率值最大的类别即为待预测样本的预测类别。

优缺点:

  1. 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。对缺失数据不太敏感,算法也比较简单,常用于文本分类。
  2. 假设属性之间相互独立,这个假设在实际应用中往往是不成立的。需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。对输入数据的表达形式很敏感。

5.SVM:支持向量机

支持向量机,就是通过找出边际最大的决策边界,来对数据进行分类的分类器。也因此,支持向量分类器又叫做最大边际分类器。目标是"找出边际最大的决策边界",听起来是一个十分熟悉的表达,这是一个最优化问题,而最优化问题往往和损失函数联系在一起。和逻辑回归中的过程一样,SVM也是通过最小化损失函数来求解一个用于后续模型使用的重要信息:决策边界。
在这里插入图片描述
表达式
如果我们有新的测试数据 ,则的 x t x_{t} xt标签就可以根据以下表达式来确定。
y = { 1 w ⋅ x t + b > 0 − 1 w ⋅ x t + b ≤ 0 y= \begin{cases} 1 & {w·x_{t}+b >0}\\ -1& {w·x_{t}+b\leq 0} \end{cases} y={11wxt+b>0wxt+b0
在这里插入图片描述
目标函数

m i n      1 2 ∣ ∣ w ∣ ∣ 2 2      s . t      y i ( w T x i + b ) ≥ 1 ( i = 1 , 2 , . . . m ) min \;\; \frac{1}{2}||w||_2^2 \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 (i =1,2,...m) min21∣∣w22s.tyi(wTxi+b)1(i=1,2,...m)

目标函数与优化

由于目标函数 1 2 ∣ ∣ w ∣ ∣ 2 2 \frac{1}{2}||w||_2^2 21∣∣w22是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,我们可以通过拉格朗日函数将我们的优化目标转化为无约束的优化函数,这和最大熵模型原理小结中讲到了目标函数的优化方法一样。具体的,优化函数转化为:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 2 − ∑ i = 1 m α i [ y i ( w T x i + b ) − 1 ]    满足 α i ≥ 0 L(w,b,\alpha) = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \; 满足\alpha_i \geq 0 L(w,b,α)=21∣∣w22i=1mαi[yi(wTxi+b)1]满足αi0

损失函数
在这里插入图片描述
优缺点

  1. 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。样本量不是海量数据的时候,分类准确率高,泛化能力强。
  2. 如果特征维度远远大于样本数,则SVM表现一般。SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
    SVM对缺失数据敏感。

6.决策树

在这里插入图片描述
决策树是一种基本的分类与回归方法(此处以分类为例),它可以认为是定义在特征空间与类空间的条件概率分布,决策树思想,实际上就是寻找最纯净的划分方法。决策树模型不同于线性模型,线性模型是所有特征赋予不同的权值相加得到结果,而决策树则是单个特征进行处理,每一步寻找一个最优特征进行划分。决策树与逻辑回归的不同之处也在于此,逻辑回归是根据所有特征求出概率,然后与某一阈值进行比较从而分类,而决策树每一步是通过最优特征进行划分,直到叶节点。决策树的学习过程主要包括3个步骤:特征选择、决策树的生成和决策树的剪枝。常用的算法有ID3算法、C4.5算法以及CART算法。

在ID3算法中我们使用了信息增益来选择特征,信息增益大的优先选择。在C4.5算法中,采用了信息增益比来选择特征,以减少信息增益容易选择特征值多的特征的问题。CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。

算法支持模型树结构特征选择连续值处理缺失值处理剪枝
ID3分类多叉树信息增益不支持不支持不支持
C4.5分类多叉树信息增益比支持支持支持
CART分类,回归二叉树基尼系数,均方差支持支持支持(后剪枝)

基尼系数表达式

G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D) = 1-\sum\limits_{k=1}^{K}(\frac{|C_k|}{|D|})^2 Gini(D)=1k=1K(DCk)2

决策树的基本流程
在这里插入图片描述
优化(后剪枝)
CART采用的办法是后剪枝法,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。也就是说,CART树的剪枝算法可以概括为两步,第一步是从原始决策树生成各种剪枝效果的决策树,第二部是用交叉验证来检验剪枝后的预测能力,选择泛化预测能力最好的剪枝后的数作为最终的CART树。

在剪枝的过程中,对于任意的一刻子树T,其损失函数为:
C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_{\alpha}(T_t) = C(T_t) + \alpha |T_t| Cα(Tt)=C(Tt)+αTt

优缺点:

  1. 简单直观,生成的决策树很直观。基本不需要预处理,不需要提前归一化,处理缺失值。使用决策树预测的代价是O(log2m)。 m为样本数。既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。可以处理多维度输出的分类问题。相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释。可以交叉验证的剪枝来选择模型,从而提高泛化能力。对于异常点的容错能力好,健壮性高。
  2. 决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

7.RF:随机森林

在这里插入图片描述随机森林具体如何构建呢?有两个方面:数据的随机性选取,以及待选特征的随机选取。

数据的随机性选取

从原始的数据集中采取有放回的抽样,构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复,并利用子数据集来构建子决策树。

特征的随机选取

与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。这样能够使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

优缺点:

  1. 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。在训练后,可以给出各个特征对于输出的重要性。由于采用了随机采样,训练出的模型的方差小,泛化能力强。相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。对部分特征缺失不敏感。
  2. 在某些噪音比较大的样本集上,RF模型容易陷入过拟合。取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

8.AdaBoost

在这里插入图片描述
AdaBoost算法可以简化为3个步骤:

  1. 首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都会被赋予相同的权值:w1 = 1/N。

  2. 训练弱分类器Ci。具体训练过程:如果某个训练样本点,被弱分类器Ci准确地分类,那么再构造下一个训练集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值的更新过的样本被用于训练下一个弱分类器,整个过程如此迭代下去。

  3. 最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换而言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
    请添加图片描述

损失函数
Adaboost是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。

前向分步学习算法是通过一轮轮的弱学习器学习,利用前一个强学习器的结果和当前弱学习器来更新当前的强学习器的模型。
f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) fk(x)=fk1(x)+αkGk(x)

Adaboost损失函数为指数函数,即定义损失函数为:
a r g    m i n    ⏟ α , G ∑ i = 1 m e x p ( − y i f k ( x ) ) \underbrace{arg\;min\;}_{\alpha, G} \sum\limits_{i=1}^{m}exp(-y_if_{k}(x)) α,G argmini=1mexp(yifk(x))

优缺点:

  1. Adaboost作为分类器时,分类精度很高;在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活;作为简单的二元分类器时,构造简单,结果可理解;不容易发生过拟合。
  2. 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

9.GBDT

GBDT也是集成学习Boosting家族的成员,但是却和传统的Adaboost有很大的不同。回顾下Adaboost是利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同。
GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

优缺点

  1. 可以灵活处理各种类型的数据,包括连续值和离散值;在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的;使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。

  2. 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

10.XGBoost

在这里插入图片描述

损失函数:

L t = ∑ j = 1 J [ G t j w t j + 1 2 ( H t j + λ ) w t j 2 ] + γ J L_t = \sum\limits_{j=1}^J [G_{tj}w_{tj} + \frac{1}{2}(H_{tj}+\lambda)w_{tj}^2] + \gamma J Lt=j=1J[Gtjwtj+21(Htj+λ)wtj2]+γJ

XGBoost算法主流程

输入是训练集样本 I = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } I=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\} I={(x,y1),(x2,y2),...(xm,ym)}最大迭代次数T, 损失函数L, 正则化系数 λ , γ \lambda,\gamma λ,γ

输出是强学习器f(x)

对迭代轮数t=1,2,…T有:

  1. 计算第i个样本(i-1,2,…m)在当前轮损失函数L基于 f t − 1 ( x i ) f_{t-1}(x_i) ft1(xi)的一阶导数 g t i g_{ti} gti,二阶导数 h t i h_{ti} hti,计算所有样本的一阶导数和 G t = ∑ i = 1 m g t i G_t = \sum\limits_{i=1}^mg_{ti} Gt=i=1mgti,二阶导数和 H t = ∑ i = 1 m h t i H_t = \sum\limits_{i=1}^mh_{ti} Ht=i=1mhti

  2. 基于当前节点尝试分裂决策树,默认分数score=0,G和H为当前需要分裂的节点的一阶二阶导数之和。
    对特征序号 k=1,2…K:

    a) G L = 0 , H L = 0 G_L=0, H_L=0 GL=0,HL=0

    b.1) 将样本按特征k从小到大排列,依次取出第i个样本,依次计算当前样本放入左子树后,左右子树一阶和二阶导数和:
    G L = G L + g t i , G R = G − G L G_L = G_L+ g_{ti}, G_R=G-G_L GL=GL+gti,GR=GGL
    H L = H L + h t i , H R = H − H L H_L = H_L+ h_{ti}, H_R=H-H_L HL=HL+hti,HR=HHL

    b.2) 尝试更新最大的分数:

    s c o r e = m a x ( s c o r e , 1 2 G L 2 H L + λ + 1 2 G R 2 H R + λ − 1 2 ( G L + G R ) 2 H L + H R + λ − γ ) score = max(score, \frac{1}{2}\frac{G_L^2}{H_L + \lambda} + \frac{1}{2}\frac{G_R^2}{H_R+\lambda} - \frac{1}{2}\frac{(G_L+G_R)^2}{H_L+H_R+ \lambda} -\gamma ) score=max(score,21HL+λGL2+21HR+λGR221HL+HR+λ(GL+GR)2γ)

  1. 基于最大score对应的划分特征和特征值分裂子树。

  2. 如果最大score为0,则当前决策树建立完毕,计算所有叶子区域的 w t j w_{tj} wtj, 得到弱学习器 h t ( x ) h_t(x) ht(x),更新强学习器 f t ( x ) f_t(x) ft(x),进入下一轮弱学习器迭代.如果最大score不是0,则转到第2)步继续尝试分裂决策树。

请添加图片描述

对比原算法GBDT,XGBoost主要从下面几个方面做了优化:

  1. 求解预测值Y的方式不同。GBDT中预测值是由所有弱分类器上的预测结果的加权求和,其中每个样本上的预测结果就是样本所在的叶子节点的均值。而XGBT中的预测值是所有弱分类器上的叶子权重直接求和得到,计算叶子权重是一个复杂的过程。

  2. 是算法本身的优化:在算法的弱学习器模型选择上,对比GBDT只支持决策树,还可以直接很多其他的弱学习器。在算法的损失函数上,除了本身的损失,还加上了正则化部分(加入了L1和L2正则化项)。在算法的优化方式上,GBDT的损失函数只对误差部分做负梯度(一阶泰勒)展开,而XGBoost损失函数对误差部分做二阶泰勒展开,更加准确。

  3. 是算法运行效率的优化:对每个弱学习器,比如决策树建立的过程做并行选择,找到合适的子树分裂特征和特征值。在并行选择之前,先对所有的特征的值进行排序分组,方便前面说的并行选择。对分组的特征,选择合适的分组大小,使用CPU缓存进行读取加速。将各个分组保存到多个硬盘以提高IO速度。

  4. 是算法健壮性的优化:对于缺失值的特征,通过枚举所有缺失值在当前节点是进入左子树还是右子树来决定缺失值的处理方式。算法本身加入了L1和L2正则化项,可以防止过拟合,泛化能力更强。

11.K-Means

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大,目标是最小化平方误差。
在这里插入图片描述
上图a表达了初始的数据集,假设k=2。在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,然后分别求样本中所有点到这两个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别,如图c所示,经过计算样本和红色质心和蓝色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红色和蓝色的点分别求其新的质心,如图4所示,新的红色质心和蓝色质心的位置已经发生了变动。图e和图f重复了我们在图c和图d的过程,即将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的两个类别如图f。当然在实际K-Mean算法中,我们一般会多次运行图c和图d,才能达到最终的比较优的类别。

12.层次聚类(Hierarchical clustering)

在这里插入图片描述

13.BIRCH

在这里插入图片描述

14.DBSCAN

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值