Python机器学习及实践从零开始通往Kaggle竞赛之路之第二章 第六个程序比较梯度提升决策树、随机树和决策树预测泰坦尼克号幸存人数效果

前言:本节是比较三种树形结构(DecisionTreeClassifier决策树,RandomForestClassifier随机树, GradientBoostingClassifier梯度提升决策树)在泰坦尼克号上分类的效果,泰坦尼克号数据集中选择的属性仍然是'Pclass', 'Age', 'Sex',测试效果的标签为Survived。

 

(DecisionTreeClassifier, 决策树): 用于描述特征和标签之间不存在线性关系的情况。

 

(RandomForestClassifier,随机树): 是一种集成模型,在该模型中包含多个模型,训练的时候同时训练这些数据集,每个模型输出自己的判断结果,最终RandomForestClassifier选择大多数模型输出的结果作为整个模型的输出。其就相当于选举的时候大多数认为的是什么,我们就输出什么。

 

(GradientBoostingClassifier,梯度提升决策树):同样是一种集成模型,但是和随机树不同的是,梯度提升决策树最后输出一个结果,梯度提升决策树中所有的模型目标是尽可能使模型整体最优,其就相当于贪心算法,每个模型把自己负责的那个部分进行最优化,使得输出结果达到最优。 这是猜的具体没有经过认证。

 

# -*- coding: utf-8 -*-
# @Time    : 2019/4/8 9:13
# @Author  : YYLin
# @Email   : 854280599@qq.com
# @File    : Six-Program-RFC-Titanic.py
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report

titanic = pd.read_csv('../Dataset/Tencent-Datasets/Titanic/train.csv')

# 选择数据集中列作为特征,并对数据集进行补充
X = titanic[['Pclass', 'Age', 'Sex']]
y = titanic['Survived']
X['Age'].fillna(X['Age'].mean(), inplace=True)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state = 33)

# 对数据集进行预处理
vec = DictVectorizer(sparse=False)
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
X_test = vec.transform(X_test.to_dict(orient='record'))

# 使用决策树训练数据集
dtc = DecisionTreeClassifier()
dtc.fit(X_train, y_train)
dtc_y_pred = dtc.predict(X_test)

# 使用随机树训练数据集
rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)
rfc_y_pred = rfc.predict(X_test)

# 使用梯度提升决策树训练数据集。
gbc = GradientBoostingClassifier()
gbc.fit(X_train, y_train)
gbc_y_pred = gbc.predict(X_test)


# 输出单一决策树在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。
print('-------显示使用决策树预测的结果------------')
print('The accuracy of decision tree is', dtc.score(X_test, y_test))
print(classification_report(dtc_y_pred, y_test))

print('-------显示使用随机树预测的结果------------')
print('The accuracy of random forest classifier is', rfc.score(X_test, y_test))
print(classification_report(rfc_y_pred, y_test))

print('-------显示使用梯度提升决策树预测的结果------------')
print ('The accuracy of gradient tree boosting is', gbc.score(X_test, y_test))
print (classification_report(gbc_y_pred, y_test))

 

实验结果:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值