☁️主页 Nowl
🔥专栏《机器学习实战》 《机器学习》
📑君子坐而论道,少年起而行之
文章目录
GBDT模型介绍
Boosting
残差
GBDT的缺点
python代码实现
代码
模型参数解释
结语
GBDT模型介绍
GBDT(Gradient Boosting Decision Tree)也叫做梯度提升决策树,它的主要思想也是集成学习(由名字可以看出GBDT的弱分类器是决策树 ),即训练多个子模型,结合子模型来得到最终结果,但他们也有一些区别
Boosting
Boosting是GBDT与传统集成学习的一个主要区别
传统的集成学习训练过程中,分类器之间不会有任何联系,模型各自独立训练最后结合得出结果
而Boosting训练过程中,分类器会根据上一个分类器的结果来调整,重点关注上一个分类器的误差点,从而更好地提高模型性能
残差
我们接下来来看看分类器之间是怎么联系的,残差代表分类器预测结果与真实值的差距
假设我们有一个预测数字的任务,目标值是40,则会有这样一个过程
- 第一个分类器预测结果为30,则残差为10
- 第二个分类器去拟合残差,这时第二个分类器的目标值变成了10,以此类推
- 最后得到的残差为0,完成任务
可以看到Boosting的思想是每一个分类器去拟合前一个分类器的残差,最后每个分类器的结果加起来就是真实值
GBDT的缺点
- 由于每个分类器要等待上一个分类器的结果,故模型无法并行训练,消耗的时间可能较多
python代码实现
代码
这段代码使用的数据集是虚拟的,我们这里主要学习模型是如何构建的,在实际任务中将数据集替换为真实数据集即可
# 导入必要的库
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score
# 创建虚构的数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化并训练GBDT模型
gbdt_model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbdt_model.fit(X_train, y_train)
# 预测
y_pred = gbdt_model.predict(X_test)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
模型参数解释
-
n_estimators: 子分类器数量
-
learning_rate: 学习率
-
max_depth: 决策树最大深度
结语
GBDT是一种优化的集成学习方法,采用了拟合残差的新思想,广泛应用于分类任务和回归任务中,它还有两个优化方法:XGBoost和LightGBM,之后会做具体介绍,敬请期待
感谢阅读,觉得有用的话就订阅下本专栏吧,有错误也欢迎指出