区块链技术博客
www.b2bchain.cn

泰坦尼克乘客生存预测实战的讲解

这篇文章主要介绍了泰坦尼克乘客生存预测实战的讲解,通过具体代码讲解7906并且分析了泰坦尼克乘客生存预测实战的讲解的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了泰坦尼克乘客生存预测实战的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7906.html。具体如下:

泰坦尼克乘客生存预测实战(决策树篇)

大纲
1.读取数据及预处理
2.构建决策树模型
3.在测试集上预测
4.输出预测结果
5. 决策树可视化

算法背景:

  • 决策树的核心环节:构造和剪枝

构造:选择划分的特征和特征值
剪枝:预剪枝和后剪枝用于避免模型过拟合现象,提高泛化能力

  • 选择特征的依据:纯度、信息熵(构建决策树的过程就是样本纯度不断提升、信息熵不断下降的过程)
  • 由此引申出了三类构造算法:ID3 C4.5 CART

概略介绍:
ID3:
以信息增益(大)为依据选择特征;
优:简单方便
缺:倾向于选择取值比较多的属性,只能处理类别特征
C4.5:
以信息增益率(大)为依据选择特征;
优:采用了后剪枝策略(悲观剪枝PEP)、离散化处理连续特征、可以处理缺失值、
CART:分类回归决策树
以基尼系数(小)/(回归用最小二乘偏差MSE或最小绝对偏差MAE)为依据选择特征,且只会生成二叉树;
优:使用CCP后剪枝(代价复杂度剪枝策略–剪枝前后的误差率变化/减去的叶子数量)

问题导入:泰坦尼克问题是一个比较经典的案例,此次实验的目的在于用决策树进行乘客的生存预测,数据集中的具体字段为:
泰坦尼克乘客生存预测实战

#导入可能用到的工具包 import numpy as np import pandas as pd from sklearn.tree import  DecisionTreeClassifier from sklearn.model_selection import cross_val_score import warnings warnings.filterwarnings('ignore') 
  1. 读取数据、展示、简单的预处理
traindata = pd.read_csv("train.csv",engine="python") testdata = pd.read_csv("test.csv",engine="python") print("train's shape:",traindata.shape) print("test's shape:",testdata.shape) 
traindata.describe() 
traindata.describe(include=["O"]) 
traindata.info() testdata.info() 

根据info()可以看出数据的缺失情况主要出现在#缺失值:age Fare Cabin Embarked,并且Cabin缺失的过多,没办法补救了可以考虑直接剔除,其他的特征使用填充的方式补全。

del traindata['Cabin'] del testdata['Cabin']  age_mean = traindata['Age'].mean() fare_mean = traindata['Fare'].mean() embarked_mode = traindata.Embarked.mode() traindata['Age'].fillna(age_mean,inplace=True) testdata['Age'].fillna(age_mean,inplace=True) testdata['Fare'].fillna(fare_mean,inplace=True) traindata['Embarked'].fillna(embarked_mode,inplace=True) testdata['Embarked'].fillna(embarked_mode,inplace=True) 
traindata.head() testdata.head() 

该数据集的任务为预测乘客是否存活,其中乘客ID ,姓名以及票编号其实对分类不具有参考意义,把他们加入到模型中可能会影响决策树的构建(如ID3算法的一个弊端:倾向于选择划分类别多的特征 e.g.日期,ID,学号等)

delte_features = ['PassengerId','Name','Ticket'] for feature in delte_features:        del traindata[feature]     del testdata[feature]   print("train's shape:",traindata.shape) print("test's shape:",testdata.shape) 

对训练集和测试集做相同的编码操作:

all_data = pd.concat((traindata,testdata),axis=0) all_data.shape y_train = traindata['Survived'] del all_data['Survived'] all_data = pd.get_dummies(all_data) x_train = all_data[:len(traindata)] x_test = all_data[len(traindata):] print("x_train's shape:",x_train.shape) print("x_test's shape:",x_test.shape) 

预览一下,操作是否正确

x_train.head() 
  1. 构建决策树模型
# ID3算法 id3_model = DecisionTreeClassifier(criterion='entropy') id3_model.fit(x_train,y_train) accuracy_id3 = id3_model.score(x_train,y_train) print("id3算法的分类准确率为(训练集):{}".format(accuracy_id3))  # 交叉验证 print("ID3算法-10折交叉验证的平均结果为:",np.mean(cross_val_score(id3_model,x_train,y_train,cv=10))) 
# CART算法 cart_model = DecisionTreeClassifier(criterion='gini') cart_model.fit(x_train,y_train) accuracy_cart = cart_model.score(x_train,y_train) print("CART算法的分类准确率为(训练集):{}".format(accuracy_cart))  # 交叉验证 print("CART算法-10折交叉验证的平均结果为:",np.mean(cross_val_score(cart_model,x_train,y_train,cv=10))) 
  1. 在测试集上预测
predict_result_CART = cart_model.predict(x_test) predict_result_ID3 = id3_model.predict(x_test)  predict_result_CART 
  1. 输出预测结果
result = pd.DataFrame({'Survived':predict_result_CART}) summit = pd.concat((x_test,result),axis=1) summit.head() summit.to_csv("predict_summit.csv",index=None) 
  1. 决策树可视化
from sklearn import tree import matplotlib.pyplot as plt fig,axes = plt.subplots(nrows=1,ncols=1,dpi=600) tree.plot_tree(cart_model,feature_names=x_train.columns,class_names=['0','1'],filled=True); fig.savefig('tree.png') 

结果展示:
泰坦尼克乘客生存预测实战
小结:本实验完成了《数据分析实战45讲》的第19讲内容(泰坦尼克乘客生存预测),源数据参见github链接,整体来说挖掘的比较粗糙,并没有做调优工作以及深入的分析挖掘工作,当基本流程还是比较明确的,有一个小tips:sklearn0.23版(好像21以上都可吧)已经可以支持直接用tree.plot_tree(model,……)来可视化决策树了,记得该行代码后要加上分号“;”,保存的图片还是蛮清晰的就是太大了不好看,也亏我白搞了老半天的graphviz haha,当作一个教训吧!~~~~

本文地址https://www.b2bchain.cn/7906.html

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 泰坦尼克乘客生存预测实战的讲解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们