当前位置:   article > 正文

决策树算法实现:泰坦尼克号乘客生存预测 (python实现)_使用python或c++等编程语言,应用决策树算法,根据titanic数据集的乘客信息,预测乘

使用python或c++等编程语言,应用决策树算法,根据titanic数据集的乘客信息,预测乘

目录

 

1 案例背景

2 决策树算法api

3. 代码实现

3.1 代码部分分析

3.2 完整代码

4 决策树可视化

4.1 保存树的结构到dot文件

4.2 网站显示结构

4.2.1效果 

5 决策树总结

5.1 优点

5.2 缺点

5.3 改进


1 案例背景

泰坦尼克号沉没是历史上最臭名昭着的沉船之⼀。 1912年4⽉ 15⽇ , 在她的处⼥航中, 泰坦尼克号在与冰⼭相撞后沉没, 在2224名乘客和机组⼈员中造成1502⼈死亡。 这场耸⼈听闻的悲剧震惊了国际社会, 并为船舶制定了更好的安全规定。 造成海难失事的原因之⼀是乘客和机组⼈员没有⾜够的救⽣艇。 尽管幸存下沉有⼀些运⽓因素, 但有些⼈⽐其他⼈更容易⽣存, 例如妇⼥, ⼉童和上流社会。 在这个案例中, 我们要求您完成对哪些⼈可能存活的分析。 特别是,我们要求您运⽤机器学习⼯具来预测哪些乘客幸免于悲剧。
案例: https://www.kaggle.com/c/titanic/overview
我们提取到的数据集中的特征包括票的类别, 是否存活, 乘坐班次, 年龄, 登陆home.dest, 房间, 船和性别等。
数据: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
 

2 决策树算法api

  • class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)

1.criterion
特征选择标准
"gini"或者"entropy", 前者代表基尼系数, 后者代表信息增益。 ⼀默认"gini", 即CART算法。
2.min_samples_split
内部节点再划分所需最⼩样本数
这个值限制了⼦树继续划分的条件, 如果某节点的样本数少于min_samples_split, 则不会继续再尝试选择最优特征来进⾏划分。 默认是2.如果样本量不⼤, 不需要管这个值。 如果样本量数量级⾮常⼤, 则推荐增⼤这个值。 我之前的⼀个项⽬例⼦, 有⼤概10万样本, 建⽴决策树时, 我选择了min_samples_split=10。可以作为参考。
3.min_samples_leaf
叶⼦节点最少样本数
这个值限制了叶⼦节点最少的样本数, 如果某叶⼦节点数⽬⼩于样本数, 则会和兄弟节点⼀起被剪枝。默认是1,可以输⼊最少的样本数的整数, 或者最少样本数占样本总数的百分⽐。 如果样本量不⼤, 不需要管这个值。 如果样本量数量级⾮常⼤, 则推荐增⼤这个值。 之前的10万样本项⽬使⽤min_samples_leaf的值为5, 仅供参考。
4.max_depth
决策树最⼤深度
决策树的最⼤深度, 默认可以不输⼊, 如果不输⼊的话, 决策树在建⽴⼦树的时候不会限制⼦树的深度。⼀般来说, 数据少或者特征少的时候可以不管这个值。 如果模型样本量多, 特征也多的情况下, 推荐限制这个最⼤深度, 具体的取值取决于数据的分布。 常⽤的可以取值10-100之间。
5.random_state
随机数种⼦


3. 代码实现

3.1 代码部分分析

  • 导入需要的模块

  • 1.获取数据

  • 2.数据的基本处理

       2.1 确定特征值,目标值

     

     2.2 缺失值处理

    

     2.3 数据集划分

     

  • 3.特征工程(字典特征抽取)

     特征中出现类别符号, 需要进⾏one-hot编码处理(DictVectorizer)   ;x.to_dict(orient="records") 需要将数组特征转换成字典数据。
      

  • 4. 决策树模型训练和评估

   决策树API当中, 如果没有指定max_depth那么会根据信息熵的条件直到最终结束。 这⾥我们可以指定树的深度来进⾏限制树的⼤⼩。

3.2 完整代码

  1. # 1.获取数据
  2. # 2.数据基本处理
  3. # 2.1 确定特征值,目标值
  4. # 2.2 缺失值处理
  5. # 2.3 数据集划分
  6. # 3.特征工程(字典特征抽取)
  7. # 4.机器学习(决策树)
  8. # 5.模型评估
  9. import pandas as pd
  10. import numpy as np
  11. from sklearn.model_selection import train_test_split
  12. from sklearn.feature_extraction import DictVectorizer
  13. from sklearn.tree import DecisionTreeClassifier, export_graphviz
  14. # 1.获取数据
  15. titan =pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
  16. # 2.数据基本处理
  17. # 2.1 确定特征值,目标值
  18. x = titan[["pclass", "age", "sex"]]
  19. y = titan["survived"]
  20. # 2.2 缺失值处理
  21. x['age'].fillna(value=titan["age"].mean(), inplace=True)
  22. # 2.3 数据集划分
  23. x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22, test_size=0.2)
  24. # 3.特征工程(字典特征抽取)
  25. x_train = x_train.to_dict(orient="records")
  26. x_test = x_test.to_dict(orient="records")
  27. transfer = DictVectorizer()
  28. x_train = transfer.fit_transform(x_train)
  29. x_test = transfer.fit_transform(x_test)
  30. # 4.机器学习(决策树)
  31. estimator = DecisionTreeClassifier(max_depth=15)
  32. estimator.fit(x_train, y_train)
  33. # 5.模型评估
  34. y_pre = estimator.predict(x_test)
  35. ret = estimator.score(x_test, y_test)
  36. print(ret)
  37. export_graphviz(estimator, out_file="./data/tree.dot", feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])

4 决策树可视化

4.1 保存树的结构到dot文件

  • sklearn.tree.export_graphviz() 该函数能够导出DOT格式

       tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
 

dot文件当中的内容如下

那么这个结构不能看清结构, 所以可以在⼀个⽹站上显示


4.2 网站显示结构

4.2.1效果 

5 决策树总结

5.1 优点

简单的理解和解释,树木可视化

5.2 缺点

决策树学习者可以创建不能很好地推广数据的过于复杂的树,容易发生过拟合。

5.3 改进

剪枝cart算法

随机森林

 

参考:黑马程序员课程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/166251
推荐阅读
相关标签
  

闽ICP备14008679号