GBDT代码实现-泰坦尼克号案例
本章会通过讲解泰坦尼克号案例来帮助读者理解如何代码实现GBDT模型
导入相关的库
import pandas as pd
from sklearn.model_selection import GridSearchCV # 网格搜索
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import GradientBoostingClassifier # 集成学习,GBDT
from sklearn.metrics import classification_report # 模型评估
一、读取数据
df = pd.read_csv("../ch07_other_supervised/train.csv")
print(df.info())
二、数据预处理
2.1 提取特征和标签
x = df[['Pclass','Sex','Age']].copy()
y = df['Survived'].copy()
2.2 处理Age的缺失值
x['Age'] = x['Age'].fillna(x['Age'].median())
2.3 热编码处理字符串类型
x = pd.get_dummies(x)
2.4 切割训练集和测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=23)
三、特征工程(此处略)
四、模型训练,预测,评估
场景1:单个决策树对象(CART)
4.1 创建模型对象
estimator = DecisionTreeClassifier()
4.2 模型训练
estimator.fit(x_train,y_train)
4.3 模型预测.
y_pred = estimator.predict(x_test)
print(f"单个决策树对象预测结果:\n{y_pred}")
4.4 模型评估
print(f"单个决策树对象的分类评估报告:\n{classification_report(y_test,y_pred)}") #0.80
print('-'*23)
场景2:梯度提升树(GBDT)
4.1 创建模型对象
estimator2 = GradientBoostingClassifier()
4.2 模型训练
estimator2.fit(x_train,y_train)
4.3 模型预测.
y_pred2 = estimator.predict(x_test)
print(f"梯度提升树对象预测结果:\n{y_pred2}")
4.4 模型评估
print(f"梯度提升树对象的分类评估报告:\n{classification_report(y_test,y_pred2)}") #0.80
print('-'*23)
场景3:梯度提升树(GBDT)参数网格搜索
4.1 定义模型可选参数
param_dict = {
'n_estimators' : [90,100,110], # 弱学习器的数量
'learning_rate':[0.1,0.2],# 学习率
'max_depth':[3,5],# 树的最大深度
}
4.2 创建梯度提升树模型对象
estimator3 = GradientBoostingClassifier()
4.3 创建网格搜索对象
estimator4 = GridSearchCV(estimator3, param_grid=param_dict,cv=3)
4.4 模型训练
estimator4.fit(x_train,y_train)
4.5 模型评估
print(f"网格搜索后的模型准确率:\n{estimator4.best_score_}") #0.7935444219882046
print(f"网格搜索后的模型参数:\n{estimator4.best_params_}")
print('-'*23)

浙公网安备 33010602011771号