数据分析实战之决策树(泰坦尼克号乘客生存预测)
本文利用已给特征属性和存活与否标签的训练集和只包含特征信息测试集数据,通过决策树模型来预测测试集数据乘客的生存情况
数据集来源为https://github.com/cystanford/Titanic_Data,可下载数据查看其各字段信息
生存预测的流程:
1、数据探索:
import numpy as np
import pandas as pdtrain_data = pd.read_csv(r'C:\Users\hzjy\Desktop\train.csv') #加载数据
test_data = pd.read_csv(r'C:\Users\hzjy\Desktop\test.csv')
1)训练集数据的整体特征:
2)测试集数据的整体特征:
2、数据清洗
1)训练集:可以看到Age、Cabin、Embarked是有缺失数据的
- Age中的空值可用平均年龄来填充
train_data['Age'].fillna(train_data['Age'].mean(),inplace = True)
- Cabin有大量的缺失值,在训练集和测试集中缺失率都比较高,无法补齐
- Embarked为登陆港口,可以根据港口属性补齐。可以看到港口为“S”类型的占比最高,可以考虑把缺失的港口用“S”港口填充
可以看到港口为“S”类型的占比最高,可以考虑把缺失的港口用“S”港口填充
train_data['Embarked'].fillna('S',inplace = True)
2)测试集:可以看到Age、Fare、Cabin是有缺失数据的
- Age中的空值可用平均年龄来填充
test_data['Age'].fillna(test_data['Age'].mean(),inplace = True)
- Fare中的空值可用平均票价来填充
test_data['Fare'].fillna(test_data['Fare'].mean(),inplace = True)
- Cabin有大量的缺失值,在训练集和测试集中缺失率都比较高,无法补齐
3、特征选择:选择对分类结果有关键作用的特征
1)通过数据探索,发现PassengerId和Name对分类没有太大作用;Cabin有大量的缺失值,可以放弃;Ticket字段编码较乱,没有太大作用。其余字段可能和预测乘客的生存情况有关,通过分类器来处理。
将剩余字段放到特征向量features里。
features = ['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked']
train_features = train_data[features]
train_labels = train_data['Survived']
test_features = test_data[features]
2)特征值有一些是字符串,不方便后续的运算,需要把它们转化为数值类型,
- Sex 有male和female两种类型,可以把它变成 Sex=male 和 Sex = female, 数值用0或1来表示
- Embarked 有S 、C 、Q三种类型,可以把它变成Embarked= S 、 Embarked= C、Embarked= Q,数值用0或1来表示
可以使用sklearn 特征选择中的 DictVectorizer类,用它可以处理符号化的对象,将符号转化为数字0或1进行表示
from sklearn.feature_extraction import DictVectorizer
dv = DictVectorizer(sparse = False)
train_features = dv.fit_transform(train_features.to_dict(orient= 'record'))
fit_transform可以将特征向量转化为特征矩阵,通过dv.feature_names_ 属性值查看转化后的属性
4、决策树模型:使用ID3算法 构造决策树
在创建决策树时,设置 criterion = 'entropy' ,然后使用 fit 进行训练,将特征值矩阵和分类结果作为参数传入,得到决策树分类器
将预测后的结果导出到文件中:
test_data['Survived'] = pred_labels
test_data.to_csv(r'C:\Users\hzjy\Desktop\test1.csv') #预测后的测试集导出
5、模型评估和预测
在预测中,首选需要得到测试集的特征值矩阵,然后使用训练好的决策树进行预测
test_features = dv.transform(test_features.to_dict(orient= 'record'))
pred_labels = clf.predict(test_features)
在模型评估中,决策树提供了score函数可以直接得到准确率。但由于我们的测试集中并没有真实的生存状况的结果,只能使用训练集中的数据进行模型评估
用训练集做训练,再用训练集自身做准确率评估,这样得出的准确率并不能代表决策树分类器的准确性。用K折交叉验证统计决策树分类器的准确率。
K折交叉验证的原理:
1)将数据集平均分割成K个等份
2)使用1份的数据作为测试数据,其余作为训练数据
3)计算测试准确率
4)使用不同的测试集,重复2、3步骤。
5)训练k次,最后将k次的测试准确率求平均值,作为对未知数据预测准确率的估计。
在sklearn的model_selection 模型选择中提供了cross_val_score函数
对于不知道测试集实际结果的,要使用K折交叉验证才能知道模型的准确情况
6、决策树可视化
使用graphviz可视化工具把决策树呈现出来
关于graphviz的下载:我用的是anaconda,通过在anaconda prompt界面输入 conda install python-graphviz 来安装graphviz
from sklearn import tree
import graphviz
dot_data = tree.export_graphviz(clf, out_file=None)
graph = graphviz.Source(dot_data)
graph.view()
会得到一个决策树可视化的pdf文件。
数据分析实战之决策树(泰坦尼克号乘客生存预测)相关推荐
- 【决策树算法】泰坦尼克号乘客生存预测
泰坦尼克号乘客生存预测 1. 案例背景 2. 步骤分析 3. 代码实现 4. 决策树可视化 4.1 保存树的结构到dot文件 4.2 网站显示结构 5. 决策树总结 6. 小结 1. 案例背景 泰坦尼 ...
- 泰坦尼克号乘客生存预测(XGBoost)
泰坦尼克号乘客生存预测(XGBoost) 1. 案例背景 2. 步骤分析 3. 代码实现 1. 案例背景 泰坦尼克号沉没是历史上最臭名昭着的沉船之一.1912年4月15日,在她的处女航中,泰坦尼克号在 ...
- 泰坦尼克号乘客生存预测
泰坦尼克号乘客获救预测 1. 案例背景 泰坦尼克号沉船事故是世界上最著名的沉船事故之一.1912年4月15日,在她的处女航期间,泰坦尼克号撞上冰山后沉没,造成2224名乘客和机组人员中超过1502人的 ...
- 机器学习决策树算法泰坦尼克号乘客生存预测
目录 1 决策树算法api 2 泰坦尼克号乘客案例背景 2.1 步骤分析 2.2 代码实现 2.3 决策树可视化 2.3.1 保存树的结构到dot文件 2.3.2 网站显示结构 3 决策树总结 4 小 ...
- 决策树算法实现:泰坦尼克号乘客生存预测 (python实现)
目录 1 案例背景 2 决策树算法api 3. 代码实现 3.1 代码部分分析 3.2 完整代码 4 决策树可视化 4.1 保存树的结构到dot文件 4.2 网站显示结构 4.2.1效果 5 决策树总 ...
- gini系数 决策树_案例7:机器学习--使用决策树实现泰坦尼克号乘客生存率预测...
一.决策树简介 1.1 什么是决策树? 决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树. ...
- 19丨决策树(下):泰坦尼克乘客生存预测
在前面的两篇文章中,我给你讲了决策树算法.决策树算法是经常使用的数据挖掘算法,这是因为决策树就像一个人脑中的决策模型一样,呈现出来非常直观.基于决策树还诞生了很多数据挖掘算法,比如随机森林(Rando ...
- 泰坦尼克号乘客生存情况预测分析之第三部分建模及模型评价
第三部分建模及模型评价 前面两部分我们已经对泰坦尼克号的数据进行了一些处理,感兴趣的小伙伴可以看看前面两篇文章,本篇主要介绍预测分析的第三部分,也就是建模和模型评价.数据处理完了,接下来就来看看在默认 ...
- 泰坦尼克号乘客生存情况分析第一部分
第一部分 数据读取及探索性分析 哈喽,各位小伙伴.今晚是平安夜,就先祝大家平安夜快乐,永远平安健康.泰坦尼克号相信很多人都不陌生,今天呢,主要聊一聊之前做过的一个小项目,预测下泰坦尼克号乘客的生存情况 ...
最新文章
- Andriod 破解之道(一)
- flink介绍:有界流和无界流
- PHP 如何阻止用户上传成人照片或者裸照
- 机器学习(四)决策树
- rxjs里subscribe和tap的区别
- 制定交叉编译工具_配置交叉编译工具链-嵌入式Linux
- livechart 只显示 y 值_【科研工具51】谷歌,谷歌学术,Scihub有效网址检索软件——Y学术...
- 【Java】基于Socket的C/S聊天程序
- ECCV18 | 无监督难分样本挖掘改进目标检测
- OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章)
- 如何解决Django与Vue语法的冲突
- 无线桥接正在获取ip问题,设置静态后又无法连接互联网,并且就算连接成功了也速度慢
- 80386 保护模式
- 【NanoPi T2】 5.uboot gmac网卡驱动(1) - mac控制器,phy芯片,rgmii协议
- 学习笔记:C++进阶【继承、多态、二叉树进阶、map和set、哈希、C++11、异常、智能指针、特殊类设计、C++的类型转换】
- 小软件公司的生存之道
- 计算机视觉检测 白皓月,基于视线跟踪的操作界面的人机交互方法研究
- TL431接线参数和几种应用
- 破解框星期天写作窝metasploit
- 【教程】用安卓厨房制作你自己的卡刷包!你也可以是Romer !