梯度提升算法演示

梯度提升算法(Gradient Boosting)是一种集成学习方法,它通过构建多个弱学习器(如决策树)并将其组合成一个强学习器来提高模型的性能。在本演示中,将使用二项式偏差作为损失函数,并探讨正则化、随机梯度下降和特征采样等策略对模型性能的影响。

正则化随机梯度下降

梯度提升算法中,正则化是一种重要的策略,它通过缩小学习率(learning_rate)来控制模型的复杂度,从而避免过拟合。此外,随机梯度下降(通过设置subsample小于1.0)可以进一步降低模型的方差,提高泛化能力。然而,如果没有正则化,仅使用随机梯度下降通常会导致性能下降。

特征采样

特征采样是另一种减少模型方差的策略,它通过在每次迭代中随机选择一部分特征进行训练,类似于随机森林中的随机分割。在梯度提升算法中,可以通过设置max_features参数来控制每次迭代中使用的特征数量。

Python实现

以下是一个使用Python实现梯度提升分类模型的示例代码。该代码首先生成了一个模拟数据集,并对其进行了训练和测试。然后,它尝试了不同的正则化和随机梯度下降策略,并绘制了测试集偏差随着迭代次数变化的曲线。

import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, ensemble from sklearn.metrics import log_loss from sklearn.model_selection import train_test_split # 生成模拟数据集 X, y = datasets.make_hastie_10_2(n_samples=4000, random_state=1) labels, y = np.unique(y, return_inverse=True) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8, random_state=0) # 设置初始参数 original_params = { "n_estimators": 400, "max_leaf_nodes": 4, "max_depth": None, "random_state": 2, "min_samples_split": 5, } # 绘制不同策略下的测试集偏差曲线 plt.figure() for label, color, setting in [ ("无正则化", "orange", {"learning_rate": 1.0, "subsample": 1.0}), ("learning_rate=0.2", "turquoise", {"learning_rate": 0.2, "subsample": 1.0}), ("subsample=0.5", "blue", {"learning_rate": 1.0, "subsample": 0.5}), ("learning_rate=0.2, subsample=0.5", "gray", {"learning_rate": 0.2, "subsample": 0.5}), ("learning_rate=0.2, max_features=2", "magenta", {"learning_rate": 0.2, "max_features": 2}), ]: params = dict(original_params) params.update(setting) clf = ensemble.GradientBoostingClassifier(**params) clf.fit(X_train, y_train) test_deviance = np.zeros((params["n_estimators"],), dtype=np.float64) for i, y_proba in enumerate(clf.staged_predict_proba(X_test)): test_deviance[i] = 2 * log_loss(y_test, y_proba[:, 1]) plt.plot((np.arange(test_deviance.shape[0]) + 1)[::5], test_deviance[::5], "-", color=color, label=label) plt.legend(loc="upper right") plt.xlabel("迭代次数") plt.ylabel("测试集偏差") plt.show()

通过上述代码,可以看到不同正则化和随机梯度下降策略对模型性能的影响。在实际应用中,可以根据具体问题选择合适的策略来优化模型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485