泰坦尼克号的沉没是世界上最严重的海难事故之一,今天我们通过分类树模型来预测一下哪些人可能成为幸存者。
数据集来自https://www.kaggle.com/c/titanic,数据集包含两个csv格式文件,data为我们接下来要使用的数据,test为kaggle提供的测试集。
接下来我们就来执行我们的代码。

1. 导入所需要的库

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt

2. 导入数据集,探索数据

data = pd.read_csv(r"C:\work\learnbetter\micro-class\week 1 DT\data\data.csv",index_col
= 0)
data.head()
data.info()

3. 对数据集进行预处理

#删除缺失值过多的列,和观察判断来说和预测的y没有关系的列
data.drop(["Cabin","Name","Ticket"],inplace=True,axis=1)
#处理缺失值,对缺失值较多的列进行填补,有一些特征只确实一两个值,可以采取直接删除记录的方法
data["Age"] = data["Age"].fillna(data["Age"].mean())
data = data.dropna()
#将分类变量转换为数值型变量
#将二分类变量转换为数值型变量
#astype能够将一个pandas对象转换为某种类型,和apply(int(x))不同,astype可以将文本类转换为数字,用这
个方式可以很便捷地将二分类特征转换为0~1
data["Sex"] = (data["Sex"]== "male").astype("int")
#将三分类变量转换为数值型变量
labels = data["Embarked"].unique().tolist()
data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))
#查看处理后的数据集
data.head()

4. 提取标签和特征矩阵,分测试集和训练集


X = data.iloc[:,data.columns != "Survived"]
y = data.iloc[:,data.columns == "Survived"]
from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3)
#修正测试集和训练集的索引
for i in [Xtrain, Xtest, Ytrain, Ytest]:
i.index = range(i.shape[0])
#查看分好的训练集和测试集
Xtrain.head()

5. 导入模型,粗略跑一下查看结果

clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, Ytrain)
score_ = clf.score(Xtest, Ytest)
score_
score = cross_val_score(clf,X,y,cv=10).mean()
score

6. 在不同max_depth下观察模型的拟合状况

tr = []
te = []
for i in range(10):
clf = DecisionTreeClassifier(random_state=25,max_depth=i+1,criterion="entropy")
clf = clf.fit(Xtrain, Ytrain)
score_tr = clf.score(Xtrain,Ytrain)
score_te = cross_val_score(clf,X,y,cv=10).mean()
tr.append(score_tr)
te.append(score_te)
print(max(te))
plt.plot(range(1,11),tr,color="red",label="train")
plt.plot(range(1,11),te,color="blue",label="test")
plt.xticks(range(1,11))
plt.legend()
plt.show()
#这里为什么使用“entropy”?因为我们注意到,在最大深度=3的时候,模型拟合不足,在训练集和测试集上的表现接
近,但却都不是非常理想,只能够达到83%左右,所以我们要使用entropy。

7. 用网格搜索调整参数

import numpy as np
gini_thresholds = np.linspace(0,0.5,20)
parameters = {'splitter':('best','random')
,'criterion':("gini","entropy")
,"max_depth":[*range(1,10)]
,'min_samples_leaf':[*range(1,50,5)]
,'min_impurity_decrease':[*np.linspace(0,0.5,20)]
}
clf = DecisionTreeClassifier(random_state=25)
GS = GridSearchCV(clf, parameters, cv=10)
GS.fit(Xtrain,Ytrain)
GS.best_params_
GS.best_score_

决策树的优缺点

决策树优点

  1. 易于理解和解释,因为树木可以画出来被看见
  2. 需要很少的数据准备。其他很多算法通常都需要数据规范化,需要创建虚拟变量并删除空值等。但请注意,sklearn中的决策树模块不支持对缺失值的处理。
  3. 使用树的成本(比如说,在预测数据的时候)是用于训练树的数据点的数量的对数,相比于其他算法,这是一个很低的成本。
  4. 能够同时处理数字和分类数据,既可以做回归又可以做分类。其他技术通常专门用于分析仅具有一种变量类型的数据集。
  5. 能够处理多输出问题,即含有多个标签的问题,注意与一个标签中含有多种标签分类的问题区别开
  6. 是一个白盒模型,结果很容易能够被解释。如果在模型中可以观察到给定的情况,则可以通过布尔逻辑轻松解释条件。相反,在黑盒模型中(例如,在人工神经网络中),结果可能更难以解释。
  7. 可以使用统计测试验证模型,这让我们可以考虑模型的可靠性。
  8. 即使其假设在某种程度上违反了生成数据的真实模型,也能够表现良好。

决策树的缺点

  1. 决策树学习者可能创建过于复杂的树,这些树不能很好地推广数据。这称为过度拟合。修剪,设置叶节点所需的最小样本数或设置树的最大深度等机制是避免此问题所必需的,而这些参数的整合和调整对初学者来说会比较晦涩
  2. 决策树可能不稳定,数据中微小的变化可能导致生成完全不同的树,这个问题需要通过集成算法来解决。
  3. 决策树的学习是基于贪婪算法,它靠优化局部最优(每个节点的最优)来试图达到整体的最优,但这种做法不能保证返回全局最优决策树。这个问题也以由集成算法来解决,在随机森林中,特征和样本会在分枝过程中被随机采样。
  4. 有些概念很难学习,因为决策树不容易表达它们,例如XOR,奇偶校验或多路复用器问题。
  5. 如果标签中的某些类占主导地位,决策树学习者会创建偏向主导类的树。因此,建议在拟合决策树之前平衡数据集。

分类树参数列表




分类树的属性列表

分类树接口列表

决策树sklearn实现泰坦尼克号幸存者的预测 及决策树优缺点、参数、属性、接口总结相关推荐

  1. 1.决策树 实例:泰坦尼克号幸存者的预测

    决策树 文章目录 决策树 1.概述 1.1决策树是如何工作的 2 DecisionTreeClassififier与红酒数据集 2.1重要参数 2.1.1 criterion 2.1.2 random ...

  2. sklearn机器学习:泰坦尼克号幸存者的预测

    这是Kaggle的一道题,这里使用决策树完成预测,方便起见就直接在jupyter lab上来做这题了. 1.首先导入需要的包 #1.导包 import pandas as pd import nump ...

  3. 【机器学习笔记】【决策树】【泰坦尼克号幸存者的预测】

    目录 一.导入库以及相关的数据 1.导入所需要的库 2.导入指定的数据集 3.查看数据的相关信息 1.data.info() 2.data.head() 二.数据的预处理 1.处理数据中的空缺值 2. ...

  4. python机器学习之决策树案例——泰坦尼克号幸存者的预测

    决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题.决策树算法容易理解,适用各种数 ...

  5. 实例:泰坦尼克号幸存者的预测

    目录 1.导库 2.导入数据集,探索数据 4.提取标签和特征矩阵,分测试机和训练集 5.导入模型,粗略跑一下查看结果 6.在不同max_depth下观察模型的拟合状况 7.网格搜索调参 1.导库 im ...

  6. 泰坦尼克号幸存者的预测

    data.drop(['特征1','特征2'],axis=1,inplace=True) axis=1 删除列 inplace=True 删除后的数据替换原来的 data.drop(['特征1','特 ...

  7. sklearn机器学习(七)决策树预测泰坦尼克号幸存者

    接下来我们开始使用决策树来预测泰坦尼克号的辛存者名单. 其中的数据集是在kaggle上下载的taitanic的训练数据集. 以下一些特征为此人是否幸存做出了贡献. PassengerId:乘客的ID号 ...

  8. 决策树入门案例:泰坦尼克号幸存者预测

    决策树 1 概述 1.1 决策树是如何工作的 1.2 分类树 DecisionTreeClassifier 1.3 回归树 DecisionTreeRegressor 1.4 案例练习 1. 用回归树 ...

  9. 【阅读笔记】使用决策树预测泰坦尼克号幸存者实例 - scikit-learn机器学习

    文章目录 使用决策树预测泰坦尼克号幸存者实例 一.数据获取 二.数据探索 数据质量分析(缺失值.异常值.一致性) 三.数据预处理 四.数据建模 五.优化模型参数 使用决策树预测泰坦尼克号幸存者实例 代 ...

最新文章

  1. 修改结构体中成员的值
  2. 蚂蚁森林快捷指令_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰
  3. K近邻算法的kd树实现
  4. 在Vue项目中使用Echarts的一种方式
  5. 手机号 ,邮箱,固定电话js验证,身份证号(正则表达式)
  6. 计算地球上两点的直线距离
  7. git 添加远程服务器,远程搭建git服务器新手踩坑
  8. 如何做好一场技术分享(技巧篇)
  9. SSL证书以及其验证过程
  10. 在Python中文件用Feather格式,与 CSV说再见,速度提升 150 倍!
  11. DHCP V6 server配置
  12. 水文专业对计算机要求,来了来了,高考志愿这么填!
  13. Leetcode打卡——二叉树的4种遍历你真的会了吗(Leetcode官解迭代法解法解析)
  14. tomcat如何增大并发_tomcat最大并发连接数的修改方法
  15. 有各组方差怎么算组间平方和_方差分析中组内离差平方和,组间离差平方和的意义...
  16. 使用 Redis 实现 Feed 流
  17. idead 1099端口被占用 解决
  18. 计算机专业机房 英语,计算机与网络英语词汇(C3)
  19. web3D 车型展示
  20. Linux下的U盘测速

热门文章

  1. 《AlignedReID: Surpassing Human-Level Performance in Person Re-Identification》论文解读
  2. 软件工程大作业:自动售货机系统
  3. 使用tf.data.Dataset加载numpy数据
  4. Python绘制六种可视化图表详解
  5. php 微信开发 网页授权登录,微信开发网页授权登录——2018年6月2日
  6. 终端模拟器常用快捷键
  7. 双排桩弯矩Matlab求解程序,考虑开挖过程椅式双排桩内力及变形分析
  8. ppt在服务器上打开要修复,打开ppt提示需要修复怎么办-处理ppt总是提示需要修复的方法 - 河东软件园...
  9. 正确关闭迅雷右侧浏览器的方法
  10. 十分nb且详细的Elasticsearch教程