机器学习八股

https://cloud.tencent.com/developer/article/1486764

  1. 递归神经网络
  2. 长短期记忆网络
    https://www.zhihu.com/tardis/zm/art/86006495?source_id=1003
    https://zhuanlan.zhihu.com/p/76772734
    https://zhuanlan.zhihu.com/p/123211148

https://zhuanlan.zhihu.com/p/32085405

决策树的剪枝

决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往容易出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度。对已生成的决策树进行简化。
在决策树学习中将已生成的树进行简化的过程称为剪枝。

  • 预剪枝(pre-pruning):在决策树生成过程中提前停止树的增长的一种剪枝算法。主要思路是在决策树结点分裂之前,计算当前节点划分能否提升模型泛化能力,如果不能,则决策树在该节点停止生长。
    预剪枝方法直接,算法简单高效,适用于大规模求解问题。但预剪枝提前停止树生长的方法,在一定程度上也存在欠拟合的风险,导致决策树生长不够完全。
  • 后剪枝(post-pruning):主要通过极小化决策树整体损失函数来实现。损失函数为模型的经验误差项,|T|表示决策树复杂度,α≥0为正则化参数,用于控制经验误差项和正则化项之间的影响。决策树后剪枝就是在复杂度α确定的情况下,选择损失函数最小的决策树模型。
    在实际应用中还是以后剪枝方法为主。CART算法的剪枝就是后剪枝方法,首先通过计算子树的损失函数来实现剪枝并得到一个子树序列,然后通过交叉验证的方法从子树序列中选取最优子树。
    在这里插入图片描述

Bagging

Bagging(Bootstrap aggregating)是一种集成学习方法,通过对训练数据进行有放回的随机抽样,构建多个独立的分类器或回归器,并通过投票或平均的方式来进行最终的预测。 Bagging的基本步骤如下:

  1. 从原始训练集中使用有放回抽样的方式,随机选择一部分样本,构建一个新的训练集。
  2. 使用这个新的训练集训练一个基分类器或回归器。
  3. 重复步骤1和步骤2,构建多个独立的分类器或回归器。
  4. 对于分类问题,通过投票的方式来确定最终的预测结果;对于回归问题,通过平均的方式来确定最终的预测结果。
    Bagging算法的优点包括:
  5. 通过随机抽样和多个独立的分类器或回归器的组合,可以减少模型的方差,提高模型的稳定性和泛化能力。
  6. 可以并行化处理,加快模型的训练速度。
  7. 对于高维数据和复杂模型,效果更为显著。
    然而,Bagging算法也有一些限制:
  8. 对于低偏差高方差的模型,Bagging算法的效果可能不如其他集成学习方法,如Boosting。
  9. Bagging算法的结果可能不易解释,因为最终的预测结果是通过多个分类器或回归器的投票或平均得到的。
    总的来说,Bagging算法是一种有效的集成学习方法,可以用于分类和回归问题,通过组合多个独立的分类器或回归器来提高模型的性能。

随机森林

随机森林是基于Bagging框架设计的一种集成学习算法。随机森林以决策树为基分类器进行集成,进一步在决策树训练过程中引入了随机选择数据特征的方法。因为构建模型过程中的这种随机性而得名。

算法步骤:
  1. 收集数据集:首先,需要收集包含特征和标签的数据集。特征是用于预测的属性,而标签是我们要预测的目标变量。
  2. 随机选择样本:从数据集中随机选择一部分样本,这个过程称为自助采样(bootstrap sampling)。这样可以创建多个不同的训练集。
  3. 构建决策树:对于每个训练集,使用决策树算法构建一个决策树模型。决策树是一种基于特征的条件划分的树状模型。
  4. 随机选择特征:对于每个决策树的节点,在特征集中随机选择一部分特征。这样可以增加模型的多样性。
  5. 构建决策树:使用选定的特征构建决策树,直到达到停止条件,例如达到最大深度或节点中的样本数小于某个阈值。
  6. 重复步骤3-5:重复步骤3到5,直到构建了指定数量的决策树。
  7. 预测:对于新的样本,通过让每个决策树进行预测,并根据投票或平均值来确定最终的预测结果。
  8. 输出结果:根据预测结果评估模型的性能,并根据需要进行调整和改进。
特点和优势:
  1. 随机性:通过自助采样和随机特征选择,随机森林引入了随机性,减少了过拟合的风险。
  2. 高准确性:随机森林能够处理高维数据和大规模数据集,并且在许多情况下具有较高的预测准确性。
  3. 可解释性:随机森林可以提供特征重要性评估,帮助我们理解数据中哪些特征对预测结果的贡献更大。
  4. 抗噪声能力:随机森林对于数据中的噪声和异常值具有一定的鲁棒性。
  5. 并行化处理:由于每个决策树可以独立构建,随机森林可以很好地利用多核处理器和分布式计算资源。

Boosting算法

Boosting算法是一种集成学习方法。
Boosting算法的基本思想是,通过迭代地训练多个弱分类器,每次训练都会调整样本的权重,使得前一个弱分类器分类错误的样本在后续的训练中得到更多的关注,从而提高整个模型的准确率。
Boosting算法的主要步骤如下:

  1. 初始化样本权重,使得每个样本的权重相等。
  2. 迭代训练多个弱分类器,每个弱分类器都是在前一个弱分类器的基础上训练得到的。
  3. 在每次训练中,根据前一个弱分类器的分类结果,调整样本的权重,使得前一个弱分类器分类错误的样本在后续的训练中得到更多的关注。
  4. 将多个弱分类器组合成一个强分类器,通过加权投票的方式进行分类。
    Boosting算法的优点是能够提高分类准确率,尤其是在处理复杂数据集时表现优异。但是,Boosting算法也有一些缺点,例如容易过拟合、对噪声敏感等

AdaBoost

AdaBoost是一种通过改变训练样本权重来学习多个弱分类器并将其线性组合成强分类器的Boosting算法。以加法模型为模型、以指数函数为损失函数、前向分步算法为算法
前向分步算法:针对加性模型的特点,从前往后每次只优化一个基模型的参数,每一步优化叠加之后便可逐步逼近目标函数(最小化损失函数)。

提升方法–AdaBoost算法

  • AdaBoost在每一轮如何改变训练数据的权值或概率分布?
    提高被前一轮弱分类器错误分类样本的权值,降低被正确分类样本的权值。
    不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这是AdaBoost的一个特点。
  • 如何将弱分类器组合成一个强分类器?
    在这里插入图片描述
算法步骤
  1. 初始化训练数据的权重分布,通常将每个样本的权重初始化为相等值。
  2. 对于每个弱分类器: a. 使用当前权重分布训练弱分类器。 b. 计算弱分类器的错误率,即被错误分类的样本的权重之和。
    c. 根据错误率计算弱分类器的权重。
    d. 更新样本的权重分布,增加被错误分类的样本的权重,减少被正确分类的样本的权重。 3. 组合所有弱分类器,通过加权投票的方式得到最终的分类结果。
    AdaBoost的关键思想是通过调整样本的权重分布,使得在每一轮训练中,模型更加关注被错误分类的样本,从而提高整体分类性能。弱分类器的选择可以是任意的,常见的弱分类器包括决策树、神经网络等。 AdaBoost算法在实际应用中表现出色,尤其在处理复杂问题和大规模数据集时具有优势。然而,它对噪声和异常值比较敏感,可能导致过拟合。因此,在使用AdaBoost时需要注意数据的质量和特征的选择。
梯度提升

提升树利用加法模型与前向分步算法实现学习的优化过程。当损失函数是平方损失(回归情形,第m轮决策树是对第m-1轮模型的残差拟合)和指数损失函数(AdaBoost)时,每一步优化是很简单的。
但对于一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法。这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树。

GBDT:梯度提升决策树

基模型:CART决策树 GBDT/GBRT
基本超参数:树的棵树、学习率、节点最小分裂样本数、节点最小基尼不纯度、树最大深度、损失函数
梯度提升树以梯度下降的方法,使用损失函数的负梯度在当前模型的值作为回归提升树中残差的近似值。
GBDT的核心思想是通过迭代的方式,每次训练一个新的决策树模型来纠正前面所有模型的预测误差。具体来说,GBDT的训练过程如下:

  1. 初始化模型:将初始模型设为一个常数值,通常是目标变量的平均值。
  2. 迭代训练:对于每一轮迭代,GBDT都会训练一个新的决策树模型,并将其加入到模型集合中。训练新模型的目标是最小化前面所有模型的预测误差。 (计算负梯度拟合的残差,将残差作为新的样本数据进行训练)
  3. 更新模型:将新训练的模型加权融合到模型集合中,通常使用梯度下降的方式进行加权。
  4. 终止条件:当达到预定的迭代次数或模型的性能满足一定的要求(残差小于某个阈值)时,停止迭代训练。

GBDT的优点包括:

  1. 高准确性:GBDT能够通过迭代训练多个决策树模型来提高预测准确性。
  2. 鲁棒性:GBDT对于数据中的噪声和异常值具有一定的鲁棒性。 (Huber损失函数)
  3. 特征选择:GBDT能够自动选择重要的特征,减少特征工程的工作量。
  4. 可解释性:GBDT的决策树模型具有很好的可解释性,可以帮助我们理解模型的预测过程。
    然而,GBDT也有一些限制:
  5. 训练时间较长:由于GBDT是通过迭代训练多个模型,所以训练时间较长。
  6. 内存消耗较大:GBDT需要保存每个模型的信息,因此对内存的消耗较大。
  7. 对异常值敏感:GBDT对于异常值比较敏感,可能会导致模型的性能下降。

XGBoost

XGBoost是一种基于GBDT的顶级提升模型。相较于GBDT,XGBoost的最大特性在于对损失函数展开到二阶导数,使得梯度提升树对模型更能逼近其真实损失。
全称:eXtreme Gradient Boosting
超参数:树的棵树、学习率、节点分裂最小样本数、结点最小基尼不纯度和树最大深度等
从算法精度上来看,XGBoost通过将损失函数展开到二阶导数,使得其更能逼近真实损失;从算法速度上来看,XGBoost使用了加权分位数sketch和稀疏感知算法这两个技巧,通过缓存优化和模型并行来提高算法速度;从算法泛化能力上来看,通过对损失函数加入正则化项、加法模型种设置缩减率和列抽样等方法,来防止模型过拟合。

加权分位数sketch是一种用于近似计算特征的分位数的技术。在XGBoost中,每个特征的分位数被计算并存储在内存中,以便在训练过程中快速访问。然而,对于具有大量特征的数据集,存储所有特征的分位数可能会占用大量内存。为了解决这个问题,XGBoost使用加权分位数sketch来近似计算特征的分位数,从而减少内存占用。 稀疏感知是一种用于处理稀疏数据的技术。在XGBoost中,稀疏感知可以帮助模型处理具有大量零值的特征。传统的梯度提升树算法在处理稀疏数据时可能会遇到性能问题,因为它需要遍历所有非零特征。稀疏感知技术可以识别出稀疏特征,并使用一种特殊的数据结构来加速计算,从而提高模型的训练速度和效果。

XGBoost是一种基于决策树的集成学习算法,它的预排序指的是在构建决策树时,对特征进行预排序,以提高训练速度和准确性。 具体来说,预排序是指在训练之前,对每个特征的取值进行排序,然后根据排序结果建立一个索引,使得在训练过程中可以快速地找到每个特征的最佳分割点。这样可以减少搜索空间,提高训练速度,并且可以更准确地找到最佳分割点,从而提高模型的准确性。 XGBoost的预排序是通过对特征值进行直方图统计来实现的,具体来说,它将每个特征的取值分成若干个桶,然后对每个桶中的样本进行统计,得到一个直方图。在训练过程中,可以根据直方图快速地计算每个特征的最佳分割点,从而提高训练速度和准确性。

损失函数基本形式由经验损失项和正则化项构成,经验损失项表示训练数据和真实值之间的损失,正则化项表示全部t棵树的复杂度之和,这也是XGB控制模型过拟合的方法。
对经验损失项变形,并使用二阶泰勒展开式。(要求损失函数二阶可导)代会原损失函数,去掉常数项进行简化。
只需要求出损失函数每一步的一阶导数和二阶导数值,并对目标函数进行优化求解,就可以得到前向分步中每一步的模型,最后根据加法模型得到XGB模型。

在XGBoost中,结点分裂是指在决策树的训练过程中,将一个结点划分为两个子结点的过程。结点分裂是通过选择一个最佳的分裂点来实现的,这个分裂点将样本分为两个子集,使得子集内的样本相对纯净,同时使得两个子集的加权平均不纯度最小化。
具体来说,XGBoost使用了一种基于梯度提升的算法来进行结点分裂。在每个结点分裂时,XGBoost会计算每个特征的增益,即通过分裂该特征能够带来的模型性能提升。增益的计算通常使用基尼系数或信息增益来衡量。 XGBoost通过遍历所有可能的分裂点,计算每个分裂点的增益,并选择增益最大的分裂点作为最佳分裂点。然后,根据最佳分裂点将结点划分为两个子结点,并将相应的样本分配给子结点。 结点分裂的目标是通过不断地划分结点,使得每个叶子结点内的样本更加纯净,从而提高模型的准确性。同时,XGBoost还使用了正则化项来控制模型的复杂度,防止过拟合。 总之,结点分裂是XGBoost中决策树训练过程中的关键步骤,通过选择最佳的分裂点来划分结点,提高模型的性能和泛化能力。(CART)

算法步骤
  1. 初始化模型:将所有样本的权重初始化为相等值,构建一个初始的决策树模型。
  2. 计算损失函数:使用损失函数来评估模型的预测效果,常用的损失函数有平方误差损失函数、对数损失函数等。
  3. 计算分裂点:对每个叶子节点,计算其分裂点,选择最优的分裂点来分裂该节点,使得损失函数最小化。
  4. 更新权重:根据分裂后的子节点的样本权重,更新模型的权重。 (为每个基学习器分配一个权重,类似于Adaboost)
  5. 重复步骤2-4,直到达到预设的迭代次数或者损失函数达到一定的阈值。
  6. 输出最终的模型:将所有的决策树模型进行加权平均,得到最终的模型。
XGBoost的主要特点
  1. 高效性:XGBoost使用了一些优化技术,如并行化处理、近似直方图算法等,使得训练速度更快,效率更高。
  2. 正则化:XGBoost支持正则化技术,如L1和L2正则化,可以有效地防止过拟合问题。
  3. 树剪枝:XGBoost在构建决策树时,采用了一种基于损失函数的剪枝策略,可以减少决策树的复杂度,提高模型的泛化能力。
  4. 缺失值处理:XGBoost能够自动处理缺失值,无需对缺失值进行额外的处理。
    对于存在某一维特征缺失的样本,XGB会尝试将其放到左子树计算一次增益,再放到右子树计算一次增益,对比放在左右子树增益的大小来决定放在哪个子树。
  5. 特征重要性评估:XGBoost可以通过计算特征在模型中的重要性得分,帮助我们了解哪些特征对模型的预测能力贡献最大。
    XGBoost可以给特征重要性排序的原因是因为它使用了一种基于树的集成学习方法,其中每个决策树都是基于特征的重要性进行构建的。在XGBoost中,特征重要性是通过计算每个特征在所有决策树中被用作分裂点的次数来确定的。这个计算过程可以告诉我们哪些特征对于模型的性能最为重要,因此可以用来进行特征选择和特征工程。
为了防止过拟合,XGBoost采用了以下几种原理和方法:
  1. 正则化(Regularization):XGBoost通过正则化项来控制模型的复杂度,防止过拟合。正则化项包括L1正则化(L1 regularization)和L2正则化(L2 regularization)。L1正则化通过增加模型的稀疏性来减少特征的数量,L2正则化通过限制特征的权重大小来减小特征的影响力。
  2. 最大深度(Max Depth):XGBoost限制每棵树的最大深度,防止树过于复杂,从而减少过拟合的风险。限制树的深度可以控制模型的复杂度,避免过多地拟合训练数据。
  3. 学习率(Learning Rate):XGBoost使用学习率来控制每棵树的贡献程度。较小的学习率可以使模型更加稳定,减少过拟合的风险。然而,较小的学习率可能需要更多的迭代次数才能达到较好的性能。
  4. 提前停止(Early Stopping):XGBoost可以通过提前停止来防止过拟合。提前停止是指在训练过程中,当验证集上的性能不再提升时,停止训练,避免继续拟合训练数据。这样可以防止模型过度拟合训练数据,提高模型的泛化能力。
  5. 特征采样(Feature Sampling):XGBoost可以对特征进行随机采样,只使用部分特征来构建每棵树。这样可以减少特征之间的相关性,提高模型的多样性,减少过拟合的风险。 通过以上这些原理和方法,XGBoost可以有效地防止过拟合,提高模型的泛化能力,从而在实际应用中取得更好的性能。
求目标函数的二阶导数有以下几个好处:
  1. 提供更准确的梯度信息:一阶导数只提供了目标函数在当前点的梯度方向,而二阶导数可以提供更详细的信息,包括梯度的大小和方向。这样可以更准确地指导模型的更新方向和步长,提高模型的训练效果。
  2. 加速模型收敛:二阶导数可以提供更准确的信息,使得模型在训练过程中更快地收敛到最优解。通过使用二阶导数,XGBoost可以更快地找到最优的分裂点,从而减少了树的深度和节点数,提高了模型的训练速度。
  3. 提高模型的泛化能力:二阶导数可以帮助模型更好地理解数据的几何结构和分布情况,从而提高模型的泛化能力。通过使用二阶导数,XGBoost可以更好地处理数据中的非线性关系和复杂的交互效应,提高了模型的预测能力。
    总之,求目标函数的二阶导数可以提供更准确的梯度信息,加速模型收敛,提高模型的泛化能力,从而提高XGBoost算法的性能和效果。

LightGBM

LightGBM: light gradient boosting machine 轻量的梯度提升机,与XGB一样,也是GBDT算法框架的一种工程实现,不过更快速、更高效。

  1. 直方图算法
    为了减少特征分裂点数量和更高效地寻找最优特征分裂点,LightGBM不同于XGBoost的预排序算法,采用直方图算法寻找最优特征分裂点。其主要思路是将连续的浮点特征值离散化为k个整数并构造一个宽度为k的直方图。对某个特征数据进行遍历的时候,将离散化后的值用于索引作为直方图的累积统计量。遍历完一次,直方图便可累积对应的统计量,然后根据该直方图寻找最优分裂点。
    本质上是一种数据离散化和分箱操作。
  2. 单边梯度抽样
    从减少样本的角度进行优化:将训练过程中大部分权重较小的样本剔除,仅对剩余样本数据计算信息增益。
  3. 互斥特征捆绑算法
    针对特征的优化:将两个互斥的特征捆绑为一个特征,在不丢失特征信息的前提下,减少特征数,从而加速模型训。
  4. leaf-wise生长策略
    区别于XGB的按层生长的叶子节点生长方法,LightGBM带有深度限制的按叶子节点(leaf-wise)生长的决策树生长方法。能够节约一些不必要的计算开销,同时为防止某一结点过分生长而加上一个深度限制机制,能够在保证精度的同时在一定程度上防止过拟合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值