梯度提升树是多个决策树集成模型,跟大多数机器学习类似,既可以用作分类,也可用于回归。梯度提升树的模型调用很简单,sklearn基本上可以满足。但是,在实际项目应用中,如何让模型更优,或者说如何让模型发挥作用。我认为,首先更应该看重的是数据本身,数据特征的构建以及特征工程的处理,好的数据质量可以让一个模型更能发挥自身性能。接下来,在数据质量的基础上,才应该关注的是模型本身的参数调优。参数调优主要有两种思想,一是根据历史经验,例如高斯核的选取,损失函数的选取等等;二是随机尝试,这也并不是完全随机,在给定网格区域中进行随机搜索,返回区域内的最优参数。具体的参数调优方式可以参考:吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingClassifier分类模型 - 吴裕雄 - 博客园
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets,ensemble
data = pd.read_excel(r'E:\spyder\反窃电特征分析\tidu_test_data.xlsx')
data
# 排除数据集中的ID变量和因变量,剩余的数据用作自变量X;因为ID只是一个达到索引的作用
X = data.drop(['mp_id','label'], axis = 1)
y = data.label
x_train,x_test,y_train,y_test=train_test_split(X,y,test_size = 0.3,random_state=0)
gbrt=GradientBoostingClassifier()#模型不做参数调整
gbrt.fit(x_train,y_train)
print(gbrt.score(x_train,y_train))
print(gbrt.score(x_test,y_test))
a = gbrt.predict_proba(x_test)
a[:,0]
# 自变量的重要性排序
importance = pd.Series(gbrt.feature_importances_, index = X.columns)
#对模型做预剪枝
gbrt1=GradientBoostingClassifier(n_estimators=100,learning_rate=0.01)
gbrt1.fit(x_train,y_train)
print(gbrt1.score(x_train,y_train))
print(gbrt1.score(x_test,y_test))