关于树的机器学习方法及其比较
————随机森林、梯度提升树、XGBoost、LightGBM 和 CatBoost
机器学习方法 | 支持分类任务 | 支持回归任务 | 支持排序任务 |
随机森林 | Yes | Yes | No |
GBDT | Yes | Yes | No |
XGBoost | Yes | Yes | Yes |
LightGBM | Yes | Yes | Yes |
CatBoost | Yes | Yes | Yes |
一、随机森林(Random Forest):
随机森林是一种集成学习方法,主要用于分类和回归任务。它通过构建多个决策树,并在每个节点随机选择特征来训练每个树,最后通过所有树的投票或平均结果来进行预测。
特点:
易用性:不需要过多的参数调节,适用于各种数据类型。
抗过拟合:通过集成多个树,减少单个树的过拟合风险。
高维数据处理:在处理高维数据时表现良好,因为每个节点只选择一部分特征。
缺点:
计算成本高:由于构建多个决策树,计算资源需求较高。
解释性较差:由于模型的复杂性,难以解释每个特征对预测结果的影响。
{
max_features 决定了每棵树在每个分裂节点上能够使用的特征数量,是一个重要的参数,通常,我们从变量个数(特征)的平方根开始,然后在该数字上下尝试,最后选择一个最优值。在库中,一般默认值为使用特征总数的平方根个特征。
}
二、梯度提升树(Gradient Boosting Decision Tree, GBDT)
梯度提升树是一种提升方法,通过逐步添加新的树来纠正前一棵树的错误,从而提高模型的精度。每棵树都是基于前一棵树的残差训练的。
特点:
高精度:通过逐步优化,能够获得高精度的预测结果。
灵活性:可以用于分类、回归等多种任务。
缺点:
训练时间长:逐步训练每棵树,需要较长的训练时间。
易过拟合:如果树的数量过多,容易出现过拟合。
{
梯度提升方法一般使用具有8-32个叶子结构的树来进行训练和预测
}
三、XGBoost(Extreme Gradient Boosting)
XGBoost(Extreme Gradient Boosting)是GBDT的一种高效实现,使用二次泰勒展开来近似损失函数,并在计算过程中进行优化。
特点:
适用于大型复杂的数据集。
高效性:利用并行计算和增量学习等技术,提高了训练速度和效率。
鲁棒性(鲁棒性(Robustness)在机器学习和统计学中,是指模型或算法在面对不完美、异常、或不完整的数据时,仍然能够保持稳定和较好性能的能力。鲁棒性是衡量模型适应性和稳定性的重要指标。):对缺失值有较好的处理能力,并且可以自动进行特征选择。
正则化(正则化(Regularization)是一种防止机器学习模型过拟合的方法。):通过L1和L2正则化减少过拟合。
{
//正则化详细内容:
正则化通过在损失函数中加入额外的项,惩罚模型的复杂度,从而限制模型的自由度,防止其在训练数据上过度拟合。
L1正则化(Lasso Regression):L1正则化通过在损失函数中加入参数的绝对值之和作为惩罚项。
公式:损失函数 = 原损失函数 + λ * ∑|w|
效果:L1正则化可以产生稀疏模型,即许多参数会被缩减为零,这对于特征选择有帮助。
L2正则化(Ridge Regression):L2正则化通过在损失函数中加入参数的平方和作为惩罚项。
公式:损失函数 = 原损失函数 + λ * ∑w²
效果:L2正则化会使参数趋向于较小的值,但不会使其完全为零,这可以防止模型过度复杂化,但仍保留所有特征。
在实际应用中,正则化通过调整λ(正则化强度)参数来控制正则化项的影响力。较大的λ会增加正则化项的影响,减少模型复杂度;较小的λ则会减少正则化项的影响,允许模型更复杂。
}
缺点:
参数调节复杂:需要较多的参数调节,调参过程较为复杂。
例如:
learning_rate(eta):
默认值:0.3
推荐范围:0.01到0.3
调节建议:较小的学习率(如0.01或0.1)通常与较大的树数量(n_estimators)配合使用。
n_estimators:总的树数量,迭代次数。
默认值:100
推荐范围:100到1000,具体视情况而定。
调节建议:结合学习率调节。如果学习率较小,树数量应增加。
max_depth:树的最大深度。
默认值:6
推荐范围:3到10
调节建议:较小的深度可以防止过拟合,但可能降低模型表现;较大的深度能捕捉更复杂的模式,但也容易过拟合。
min_child_weight:决定一个子节点中所需的最小样本权重和。这个参数可以用来避免过拟合。
默认值:1
推荐范围:1到10
调节建议:较大的值可以避免模型学习到局部的噪声。
subsample:控制每棵树随机采样的比例,防止过拟合。
默认值:1
推荐范围:0.5到1
调节建议:通常设置为0.8左右。
gamma: gain-gamma如果为正数,则保留这个树枝,如果为负数,则去除这个树枝。
默认值:0,若为1,可以防止模型过拟合。
作用:指定节点分裂所需的最小损失减少量。越大越保守。
reg_alpha(L1正则化):L1正则化项系数。
默认值:0
推荐范围:0到1
调节建议:增加此参数可以减少模型复杂度,防止过拟合。
reg_lambda(L2正则化):L2正则化项系数。
默认值:1
推荐范围:0到1
调节建议:增加此参数可以减少模型复杂度,防止过拟合。
四、LightGBM(Light Gradient Boosting Machine)
LightGBM(Light Gradient Boosting Machine)是微软开发的一种基于直方图的梯度提升框架,旨在提高训练效率和速度以及提高了准确率。
主要特别的有三点:
- 优化分割树,基于直方图的梯度提升框架。
- 进行特征工程,简化数据维度。
- 基于梯度一侧采样。
特点:
高效性:通过基于直方图和智能捆绑(合并)的方法,实现了将部分数据降维度,显著提高了训练速度和内存效率。
处理大规模数据:可以处理大规模数据和高维数据。
支持并行和GPU:支持并行计算和GPU加速,进一步提高训练速度。
缺点:
处理类别特征较弱:在处理类别特征时表现较差,需要进行特征工程。
五、CatBoost(Categorical Boosting)
CatBoost(Categorical Boosting)是Yandex开发的一种梯度提升框架,专门针对类别特征进行了优化。
特点:
处理类别特征:无需进行复杂的特征工程,能够自动处理类别特征。
高效性:通过高效的算法设计,提供快速的训练速度。
鲁棒性:对缺失值、噪声数据有较好的鲁棒性。
缺点:
新兴算法:相对于XGBoost和LightGBM,应用和社区支持还不够广泛。
六、训练结果
对于数据集使用以上不同方法,获得的ACC和AUC以及训练时间如下。
算法 | 训练ACC | 训练AUC | 测试ACC | 测试AUC | 耗时(s) |
Random Forest | 0.9797 | 0.9714 | 0.9797 | 0.9711 | 12.26 |
GBDT | 0.9786 | 0.9770 | 0.9791 | 0.9751 | 22.95 |
XGBoost | 0.9787 | 0.9786 | 0.9786 | 0.9736 | 1.09 |
LightGBM | 0.9800 | 0.9810 | 0.9803 | 0.9753 | 2.03 |
CatBoost | 0.9800 | 0.9790 | 0.9808 | 0.9740 | 1.86 |
对于避免训练过拟合,除了在各树的算法中提到的一些参数调整的方法外,我们还可以设置最少数据量为n时(一般为20),便不再进行下一步分枝。
损失函数
一般情况,做分类任务时,我们常用对数损失函数,做回归任务时,我们常使用用均方误差。
原因如下:
对数损失函数(Log Loss)
对数损失函数,它的主要特点包括:
衡量概率预测的准确性:对数损失函数不仅仅考虑预测的类别是否正确,还考虑了预测的概率大小。正确的预测概率越接近1,损失越小;错误的预测概率越接近0,损失越大。
梯度的性质:对数损失函数的梯度在接近正确类别时变化更平缓,而在远离正确类别时变化更剧烈,这有助于模型在优化过程中更快地收敛。
均方误差(Mean Squared Error, MSE)
均方误差常用于回归任务,其主要特点包括:
衡量预测值与真实值的距离:均方误差是预测值与实际值之间差异的平方和的平均值。预测值越接近实际值,误差越小。
凸函数:均方误差是一个凸函数,这意味着它只有一个全局最小值,有助于梯度下降法找到最优解。