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)
posted @ 2026-06-23 20:54  王新文  阅读(5)  评论(0)    收藏  举报