数据分析实战 45 讲
陈旸
清华大学计算机博士
123928 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
第二模块:数据分析算法篇 (20讲)
第四模块:数据分析工作篇 (2讲)
数据分析实战 45 讲
15
15
1.0x
00:00/00:00
登录|注册

19丨决策树(下):泰坦尼克乘客生存预测

K折交叉验证
score函数
gini
entropy
Graphviz可视化工具
模型评估方法
预测方法
决策树训练
ID3算法
DictVectorizer类
特征选择方法
数据填充
缺失值处理
tail
head
describe()
info()
分类阶段
准备阶段
score方法
predict方法
fit方法
参数设置建议
criterion参数
电商行业
医疗行业
金融行业
Graphviz可视化工具
模型准确率
特征选择
模块6:决策树可视化
模块5:模型预测&评估
模块4:决策树模型
模块3:特征选择
模块2:数据清洗
模块1:数据探索
生存预测的关键流程
问题描述
模型构造
DecisionTreeClassifier
应用场景
直观性
决策树模型使用技巧总结
Titanic乘客生存预测
sklearn中的决策树模型
决策树算法
决策树

该思维导图由 AI 生成,仅供参考

在前面的两篇文章中,我给你讲了决策树算法。决策树算法是经常使用的数据挖掘算法,这是因为决策树就像一个人脑中的决策模型一样,呈现出来非常直观。基于决策树还诞生了很多数据挖掘算法,比如随机森林(Random forest)。
今天我来带你用决策树进行项目的实战。
决策树分类的应用场景非常广泛,在各行各业都有应用,比如在金融行业可以用决策树做贷款风险评估,医疗行业可以用决策树生成辅助诊断,电商行业可以用决策树对销售额进行预测等。
在了解决策树的原理后,今天我们用 sklearn 工具解决一个实际的问题:泰坦尼克号乘客的生存预测。

sklearn 中的决策树模型

首先,我们需要掌握 sklearn 中自带的决策树分类器 DecisionTreeClassifier,方法如下:
clf = DecisionTreeClassifier(criterion='entropy')
到目前为止,sklearn 中只实现了 ID3 与 CART 决策树,所以我们暂时只能使用这两种决策树,在构造 DecisionTreeClassifier 类时,其中有一个参数是 criterion,意为标准。它决定了构造的分类树是采用 ID3 分类树,还是 CART 分类树,对应的取值分别是 entropy 或者 gini:
entropy: 基于信息熵,也就是 ID3 算法,实际结果与 C4.5 相差不大;
gini:默认参数,基于基尼系数。CART 算法是基于基尼系数做属性划分的,所以 criterion=gini 时,实际上执行的是 CART 算法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用决策树算法进行泰坦尼克号乘客生存预测的实战项目。作者首先介绍了sklearn中的决策树模型DecisionTreeClassifier的使用方法,包括设置标准参数和创建不同的决策树模型。然后,作者详细描述了泰坦尼克号乘客生存预测的问题描述和关键流程,包括数据探索和数据清洗两个模块。在数据探索模块中,作者介绍了使用Pandas进行数据探索的方法,包括info()、describe()、head和tail等函数的使用。在数据清洗模块中,作者展示了如何处理缺失值,并对Embarked字段进行了补齐。整体而言,本文通过实际项目案例,详细介绍了决策树算法在生存预测问题中的应用,为读者提供了实用的技术指导。文章还介绍了特征选择、决策树模型的构建、模型预测与评估以及决策树可视化等关键内容。特别强调了特征选择对分类模型的重要性,以及模型准确率评估时需要考虑是否有测试集的实际结果可以做对比。此外,还提到了使用Graphviz可视化工具将决策模型呈现出来的重要性。整体而言,本文内容丰富,涵盖了决策树算法在实际项目中的全流程应用,对读者进行技术指导具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《数据分析实战 45 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(81)

  • 最新
  • 精选
  • 一只眼看世界
    还有个问题 决策树怎么读? 就是每个方框内的数据都代表什么意思呢?

    作者回复: 你可以看下输出的决策树的图形,有几个数值你需要了解: 比如类似 X[7]<=0.5 这种就是告诉你这个节点,选择的属性是X[7],阈值是0.5。 当<=0.5的时候,决策进入到左子树,当>0.5的时候,决策进入到右子树。 entropy实际上代表了信息不纯度,这个数值越大,代表纯度越低。 samples代表的是这个节点的样本数,比如samples=891,就代表这个节点一般有891个样本。然后value这个数组会告诉你这个样本集是如何分布的,比如value=[549,342],即891个样本,有549个为True,也就是X[7]<=0.5,还有342个样本为False,即这些样本的X[7]>0.5 好了,然后继续上面的分裂过程,直到叶子节点,纯度越来越高,最终归为同一个类别时,纯度最高,entropy=0,此时样本都为同一个类别,也就是按照这条线路可以得到的最终分类结果。 所以你能看到:决策树的使用,就是从根节点开始,然后属性划分,当<=阈值时走左子树,>阈值时走右子树,最终在叶子节点可以得到分类的结果。你指的每个方框里的entropy, samples, vale都是中间的计算结果。 这样解释决策图的使用不知道是否理解,希望对你能有帮助。

    2019-07-03
    45
  • 小熊猫
    fit 从一个训练集中学习模型参数,其中就包括了归一化时用到的均值,标准偏差等,可以理解为一个训练过程。 transform: 在fit的基础上,对数据进行标准化,降维,归一化等数据转换操作 fit_transform: 将模型训练和转化合并到一起,训练样本先做fit,得到mean,standard deviation,然后将这些参数用于transform(归一化训练数据),使得到的训练数据是归一化的,而测试数据只需要在原先fit得到的mean,std上来做归一化就行了,所以用transform就行了。

    编辑回复: 总结的很好。需要注意的是,transform和fit_transform虽然结果相同,但是不能互换。因为fit_transform只是 fit+transform两个步骤合并的简写。而各种分类算法都需要先fit,然后再进行transform。所以如果把fit_transform替换为transform可能会报错。

    2019-02-18
    2
    27
  • 每天晒白牙
    # 依赖包从 cmd中 pip install即可 import pandas as pd import numpy as np from sklearn.feature_extraction import DictVectorizer from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_val_score from sklearn import tree import graphviz # 数据加载 train_data = pd.read_csv('D:/workspace/study/python/Titanic_Data/train.csv') test_data = pd.read_csv('D:/workspace/study/python/Titanic_Data/test.csv') # 数据探索 print(train_data.info()) print('-'*30) print(train_data.describe()) print('-'*30) print(train_data.describe(include=['O'])) print('-'*30) print(train_data.head()) print('-'*30) print(train_data.tail()) # 数据清洗 # 使用平均年龄来填充年龄中的 nan 值 train_data['Age'].fillna(train_data['Age'].mean(), inplace=True) test_data['Age'].fillna(test_data['Age'].mean(), inplace=True) # 使用票价的均值填充票价中的 nan 值 train_data['Fare'].fillna(train_data['Fare'].mean(), inplace=True) test_data['Fare'].fillna(test_data['Fare'].mean(), inplace=True) # 使用登录最多的港口来填充登录港口的 nan 值 train_data['Embarked'].fillna('S', inplace=True) test_data['Embarked'].fillna('S', inplace=True) # 特征选择 features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked'] train_features = train_data[features] train_labels = train_data['Survived'] test_features = test_data[features] dvec = DictVectorizer(sparse=False) train_features = dvec.fit_transform(train_features.to_dict(orient='record')) print(dvec.feature_names_) # 决策树模型 # 构造 ID3 决策树 clf = DecisionTreeClassifier(criterion='entropy') # 决策树训练 clf.fit(train_features, train_labels) # 模型预测 & 评估 test_features=dvec.transform(test_features.to_dict(orient='record')) # 决策树预测 pred_labels = clf.predict(test_features) # 决策树准确率 acc_decision_tree = round(clf.score(train_features, train_labels), 6) print(u'score 准确率为 %.4lf' % acc_decision_tree) # K 折交叉验证统计决策树准确率 print(u'cross_val_score 准确率为 %.4lf' % np.mean(cross_val_score(clf, train_features, train_labels, cv=10))) # 决策树可视化 dot_data = tree.export_graphviz(clf, out_file=None) graph = graphviz.Source(dot_data) graph.view()

    作者回复: Good Job

    2019-01-30
    4
    26
  • 不做键盘侠
    Fare似乎没有缺失值?

    编辑回复: 训练集train_data中Fare没有缺失值,测试集test_data中Fare有缺失值。 通过print(test_data.info()) 可以看到,所以train_data可以补用填充,而test_data需要对缺失值做处理。

    2019-02-05
    4
    17
  • Lambert
    # 决策树可视化 from sklearn import tree import graphviz dot_data = tree.export_graphviz(clf, out_file=None) graph = graphviz.Source(dot_data) graph.render("tree") graph.view('graph')

    作者回复: Good Job

    2019-02-27
    2
    9
  • 柚子
    关于graphviz:我用的是anaconda,通过在anaconda prompt界面输入 conda install python-graphviz 可以直接安装graphviz

    作者回复: 可以的

    2019-02-19
    2
    8
  • 上官
    Carbin缺失率分别为 77% 和 78%, Age\Fare有缺失值,这都是在哪儿判断出来的?

    编辑回复: 在数据探索的过程中,我们可以通过打印train_data.info()和test_data.info()得出。 你能看到训练集train_data中一共有891行数据,其中Cabin有204个非空数据。同理,测试集test_data中一共有418行数据,其中Cabin有91个非空数据。所以Cabin缺失率分别是77%和78%。同理,你能看到训练集和测试集中的Age字段有缺失值(即空值),测试集中的Fare有缺失值。

    2019-01-25
    8
  • 听妈妈的话
    https://github.com/apachecn/kaggle/tree/master/competitions/getting-started/titanic 我个人认为这里的预测方案写的更加详细一点,大家可以参考一下

    作者回复: 不错的分享

    2019-03-21
    3
    7
  • hh
    老师的课太值了,请问老师还有其他课吗,真是干货满满

    编辑回复: 多谢支持,后续有和数据相关的课程。 数据分析中的知识点比较多,同时也需要一些基础。所以课程中,有些基础的内容会省略,虽然专栏前面有3节关于python的内容,不过还是需要一定的python基础。另外每篇文章篇幅有限,我会尽量在讲解算法使用的基础上,进行一个完整的项目交付。很多使用细节和体会,还需要你通过日常的学习慢慢进行总结。

    2019-02-17
    7
  • 笔落惊风雨
    我表示真的没看明白 来回来看5遍了

    编辑回复: 我上传了完整的代码到GitHub上。你可以先自己运行一遍。如果有哪个模块不理解的,你可以加到微信群里,和我单独交流。也可以直接加我微信 cylearn123。

    2019-02-26
    5
收起评论
显示
设置
留言
81
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部