机器学习算法补充
梯度提升树-GBDT
梯度提升树(GBDT)是一种基于Boosting思想的集成学习算法,通过迭代训练多棵决策树(通常为CART回归树)来逐步优化模型预测性能。
CART(分类与回归树)是一种基于二叉树的决策树算法,分类问题:基尼指数(Gini Index)衡量数据不纯度的指标,算法选择使基尼指数最小的特征和切分点进行划分,通过遍历所有特征及其可能的分割点,递归构建二叉树,直到满足停止条件(如节点纯度达标或样本数过少)。回归问题:平方误差最小化:选择分割点使左右子集的均方误差(MSE)之和最小
GBDT通过加法模型(将多个弱学习器的预测结果累加)和一种基于梯度提升的迭代优化方法,通过逐步拟合残差来构建强学习器。
每棵新树的目标是拟合当前模型的负梯度(替换残差,只有MSE直接用残差,若使用其他损失函数(如Huber损失、对数损失),残差被替换为损失函数对当前预测值的负梯度)。
新树的构建遵循以下规则:
- 节点分裂:遍历所有特征和切分点,选择使分裂后左右子节点的残差平方和(SE)最小的划分方式。
- 叶节点输出值:每个叶节点的预测值通过最小化局部损失函数确定。
损失函数包含:均方损失,绝对值损失用于回归问题,对数损失用于分类。
AdaBoost
Adaboost采用迭代的思想,每次迭代只训练一个弱分类器,训练好的弱分类器将参与下一次迭代的使用。也就是说,在第N次迭代中,一共就有N个弱分类器,其中N-1个是以前训练好的,其各种参数都不再改变,本次训练第N个分类器。最终强分类器是所有弱分类器的加权和。每一轮迭代中,增加被前一轮分类器错误分类样本的权重,使后续分类器更关注难样本。
与GBDT对比:AdaBoost通过调整样本权重聚焦错误样本,GBDT通过拟合负梯度(残差)优化损失函数。AdaBoost常用于分类,GBDT更适用于回归。
XGBoost
传统GBDT以CART作为基分类器,xgboost支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑回归(分类问题)或者线性回归(回归问题)。
传统GBDT在优化时只用到一阶导数信息,xgboost则对损失函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义损失函数,只要函数可一阶和二阶求导。
xgboost在损失函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)
列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。
xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
K-NN
kNN(K-Nearest Neighbors)算法的核心思想是基于邻近样本的多数投票或平均值进行预测,距离度量:算法依赖距离函数(如欧氏距离、曼哈顿距离)衡量样本间的相似性。
K-Means
K-Means(K均值)是一种经典的无监督聚类算法,其核心目标是将数据划分为K个簇,使得同一簇内的数据点尽可能相似,不同簇间的数据点差异尽可能大。
Bagging
Bagging是一种集成学习方法,其核心思想是通过构建多个相互独立的基学习器并结合它们的预测结果。
Bagging的核心步骤是从原始数据集中通过有放回随机抽样生成多个子数据集(称为Bootstrap样本)。理论上,每个子数据集大约包含原始数据集的63.2%的样本。在每个子数据集上独立训练一个基学习器(如决策树、神经网络等)。这些基学习器通常是同质的(即使用相同的算法),但通过不同的子数据集训练,使得模型之间具有一定的差异性。
分类任务:通过多数投票法整合基学习器的预测结果。回归任务:通过平均法整合基学习器的预测结果。显著降低了模型的方差,从而减少过拟合风险,提高泛化能力。
Bagging + 决策树 = 随机森林。
随机森林通过双重随机性构建多棵决策树,并通过投票(分类)或平均(回归)机制整合结果:数据随机性:采用Bootstrap抽样;特征随机性:每棵树的节点分裂时,从全部特征中随机选取m个特征,再从中选择最佳分裂方式。局限性:计算开销:树的数量多时,训练和预测时间较长,内存占用较高。模型解释性有限:相较于单棵决策树,多树集成结果更复杂。
决策树
决策树通过选择最优特征来分割数据,常用的分割准则包括:信息增益(ID3算法):基于信息熵的减少量,选择信息增益最大的特征。信息增益率(C4.5算法):对信息增益进行归一化,避免偏好取值较多的特征。基尼指数(CART算法):衡量数据的不纯度,选择基尼指数最小的特征。构建过程:从根节点开始,选择最优特征对数据进行分割。对每个子树递归地重复分割过程,直到满足停止条件(如节点中的样本属于同一类、达到最大深度等)。
信息增益(Information Gain),即父节点熵与子节点加权熵的差值。信息增益率:引入分裂信息(Split Information)惩罚多值特征,解决ID3的偏好问题,ID3算法的偏好问题源于其核心特征选择标准——信息增益的内在缺陷。
决策树剪枝是为了防止过拟合,通过简化树结构来提高泛化能力。剪枝方法主要分为预剪枝(Pre-pruning)和后剪枝(Post-pruning)两种策略。
预剪枝(Pre-pruning)在决策树构建过程中,通过设定条件提前停止树的生长,防止过度分裂,可能过早停止分裂,导致欠拟合。常见策略包括:最大深度(max_depth):限制树的最大层数。最小样本数(min_samples_split):节点分裂所需的最小样本数。最小信息增益(min_impurity_decrease):若分裂带来的信息增益小于阈值,则停止分裂。
后剪枝(Post-pruning)在决策树完全生成后,自底向上剪去冗余分支,计算开销大,需先生成完整树再剪枝。常见方法包括:错误率降低剪枝(REP):用验证集评估剪枝前后的错误率,保留能提升泛化能力的子树。
指标
TP(true positive,真正): 预测为正,实际为正
FP(false positive,假正): 预测为正,实际为负
TN(true negative,真负):预测为负,实际为负
FN(false negative,假负): 预测为负,实际为正
ACC(accuracy,准确率):ACC = (TP+TN)/(TP+TN+FN+FP)
P(precision精确率、精准率、查准率P = TP/ (TP+FP)
R(recall,召回率、查全率): R = TP/ (TP+FN)
TPR(true positive rate,,真正类率同召回率、查全率):TPR = TP/ (TP+FN) 注:Recall = TPR
FPR(false positive rate,假正类率):FPR =FP/ (FP+TN)
F-Score: F-Score = (1+β^2) x (PxR) / (β^2x(P+R)) = 2xTP/(2xTP + FP + FN) 是精确率Precision和召回率Recall的加权平均值。
当β=1是,F1-score = 2xPxR/(P+R)
P-R曲线(precision-recall,查准率-查全率曲线)
ROC曲线(receiver operating characteristic,接收者操作特征曲线)
AUC(area under curve)值

浙公网安备 33010602011771号