Python机器学习及实践从零开始通往Kaggle竞赛之路之第二章 第五个程序使用决策树预测泰坦尼克号生还人数

前言: 本节主要测试决策树(DecisionTreeClassifier) 预测泰坦尼克号生还人数, 训练时选择属性为年龄、性别和Pclass,预测的标签选择是否生还。决策树最要适用于数据集可能存在非线性关系情况下,例如按照年龄预测泰坦尼克号生还人数的话,显然年龄过小或者过大都会影响生成率较低,但是中年人生还的可能性相对较高,所以就属性对于生成概率而言其可能存在非线性关系,所以这种情况下可以尝试使用决策树进行预测分类的情况。

 

注意在选择属性的时候,源码中给出的属性标签是小写的,但是测试文件之中的标签的属性是大写的,所以建议将代码中的数据集的标签修改成大写的,避免找不到对应的属性,程序的整体思想如下,但是关于代码中相关函数的解释以后再做解释。

1、加载训练中的数据集,包括将数据集划分测试集和训练集

2、使用DictVectorizer对数据集进行预处理,包括对缺失数据的补齐操作,

3、生成一个DecisionTreeClassifier()对象,使用对象中的fit函数训练数据

 

代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2019/4/8 8:47
# @Author  : YYLin
# @Email   : [email protected]
# @File    : Five-Program-DecisionTreeClassifier-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.metrics import classification_report

titanic = pd.read_csv('../Dataset/Tencent-Datasets/Titanic/train.csv')
print("显示数据集中前5行",titanic.head())
# 查看数据集中每个数据有多少有用数据
titanic.info()

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

X['Age'].fillna(X['Age'].mean(), inplace=True)
X.info()

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)

# 打印显示分类的结果
y_predict = dtc.predict(X_test)
print(dtc.score(X_test, y_test))
print (classification_report(y_predict, y_test, target_names = ['died', 'survived']))

 

实验结果:

 

你可能感兴趣的:(Python机器学习及实践从零开始通往Kaggle竞赛之路之第二章 第五个程序使用决策树预测泰坦尼克号生还人数)