Python实现GBDT(参数介绍;调用;调参)

GBDT(Gradient Boosting Decision Tree),每一次建立树模型是在之前建立模型损失函数的梯度下降方向,即利用了损失函数的负梯度在当前模型的值作为回归问题提升树算法的残差近似值,去拟合一个回归树。GBDT应用有回归和分类:GBDT分类每一颗树拟合当前整个模型的损失函数的负梯度,构建新的树加到当前模型中形成新模型,下一棵树拟合新模型的损失函数的负梯度;GBDT回归每一颗树拟合当前整个模型的残差,构建新的树加到当前模型中形成新模型,下一棵树拟合新模型的损失函数的负梯度。

下面是其在Python的sklearn包下简单调用方法:

import pandas as pd
from sklearn.model_selection import train_test_split


filePath01 = r'F://temp_data/train_V2.csv'
data01 = pd.read_csv(filePath01)
data01.head()  # 读取前五行数据,如果是最后五行,用data.tail()
print(data01.shape)  # 看数据的维度
X = data01.drop(['rank'], axis=1)
y = data01[:, ['rank']]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=2333)

from sklearn import ensemble
clf = ensemble.GradientBoostingClassifier()
gbdt_model = clf.fit(X_train, y_train)  # Training model
y_predict = gbdt_model.predict_proba(X_test)[:, 1]  # predict: probablity of 1


from sklearn import ensemble
clf = ensemble.GradientBoostingRegressor(n_estimators=100,
                                         max_depth=3,
                                         loss='ls')
gbdt_model = clf.fit(X_train, y_train)  # Training model
y_upper = gbdt_model.predict(X_test)  # predict
'''
boosting框架参数:
n_estimators:学习器的最大迭代次数,回归树的数量
max_depth:每棵独立树的深度
loss:GBDT的损失函数,分类模型和回归模型的损失函数不一样的,(ls为最小二乘函数,用于回归)
learning_rate:学习速率,较低的学习速率需要更高数量的n_estimators,以达到相同程度的训练集误差–用时间换准确度的。
subsample:(0,1],子采样。随机森林是有放回的采样,这里是不放回的采样

CART回归树学习器的参数:
max_features:划分时考虑的最大特征数
max_depth:决策树的最大深度
min_samples_split:限制子树继续划分的条件,如果某结点的样本数少于它,就不会再继续划分
min_samples_leaf:限制叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟结点一起被减掉
max_laef_nodes:最大叶子结点数,防止过拟合


'''
# 调参小技巧
# 根据要解决的问题选择损失函数
# n_estimators尽可能大(如3000)
# 通过grid search方法对max_depth, learning_rate, min_samples_leaf, 及max_features进行寻优
# 增加n_estimators,保持其它参数不变,再次对learning_rate调优


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章