ML – 梯度提升
梯度提升是一种流行的提升算法。在梯度提升中,每个预测器都会纠正其前任的错误。与 Adaboost 相比,训练实例的权重没有调整,而是使用前任的残差作为标签来训练每个预测器。
有一种称为梯度提升树的技术,其基础学习器是 CART(分类和回归树)。
下图解释了如何针对回归问题训练梯度提升树。
集成由N棵树组成。 Tree1 使用特征矩阵X和标签y进行训练。标记为y1(hat)的预测用于确定训练集残差r1 。然后使用特征矩阵X和 Tree1 的残差r1作为标签训练 Tree2。然后使用预测结果r1(hat)来确定残差r2 。重复该过程,直到训练完构成集成的所有N棵树。
该技术中使用了一个重要参数,称为收缩率。
收缩是指集成中每棵树的预测在乘以介于 0 到 1 之间的学习率 (eta) 后收缩。需要通过增加估计量来补偿,以达到一定的模型性能。由于现在所有的树都经过训练,因此可以进行预测。
每棵树预测一个标签,最终预测由公式给出,
y(pred) = y1 + (eta * r1) + (eta * r2) + ....... + (eta * rN)
scikit-learn 中梯度提升回归的类是GradientBoostingRegressor 。一种类似的算法用于分类,称为GradientBoostingClassifier 。
代码:梯度提升回归器的Python代码
# Import models and utility functions
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error as MSE
from sklearn import datasets
# Setting SEED for reproducibility
SEED = 1
# Importing the dataset
bike = datasets.load_bike()
X, y = bike.data, bike.target
# Splitting dataset
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size = 0.3, random_state = SEED)
# Instantiate Gradient Boosting Regressor
gbr = GradientBoostingRegressor(n_estimators = 200, max_depth = 1, random_state = SEED)
# Fit to training set
gbr.fit(train_X, train_y)
# Predict on test set
pred_y = gbr.predict(test_X)
# test set RMSE
test_rmse = MSE(test_y, pred_y) ** (1 / 2)
# Print rmse
print('RMSE test set: {:.2f}'.format(test_rmse))
输出:
RMSE test set: 4.01
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。