泰坦尼克号预测:

  • 1、思路
    • 1.1 数据处理
    • 1.2 选择模型并训练
    • 1.3 用前剪枝对模型进行优化
    • 1.4 试试其他的决策树模型
  • 2、具体代码实现(代码来源于本书,不做详细解释)
    • 2.1 数据处理
    • 2.2 训练模型
    • 前剪枝
    • 生成决策树

1、思路

1.1 数据处理

  • 删除一些与预测无关的数据
  • 修改一些数据,比如男为1,女为0
  • 将一些缺失的数据进行补充或者删除
  • 找到target(预测的值)
  • 将数据集进行分割:分为训练集和交叉训练集

1.2 选择模型并训练

由于本文的内容为决策树,所以使用决策树的算法进行模型训练

当我们用决策树里面的ID3算法(信息熵)来进行训练的时候,可能会出现过拟合现象(训练集的score很高,但是交叉训练集的score较低),此时就需要进行剪枝操作

注意:sklearn里面不支持后剪枝操作,所以说只能有前剪枝操作来对模型进行优化

1.3 用前剪枝对模型进行优化

在sklearn里面,可以使用max_depth对模型进行剪枝。也就是说,确定决策树的深度,保证在已有的深度条件下进行剪枝,超出深度范围不会再进行分支。

但是我们如何确定depth呢?
我们可以一个个尝试,看哪个depth最优,但是嘞!!
由于程序员一般采用DRY原则,也就是Donot Repeat Yourself,我们才不会傻乎乎的一个个试,当然是一个大函数给他全盘解决啦!!

就有了一个函数来测试哪个depth最优,然后用不同的depth进行拟合,最后自动的索引出咱们最高的depth。然后就有了score,但是看数据太不直观了,所以一般来说,都会把数据进行一个绘制图形直观的展示我们的最优选择。

前剪枝也可以使用min_impurity_split进行剪枝,也就是控制它的叶子数量,与深度控制有异曲同工之妙
具体的话可以看下面这个博客,里面有讲到前剪枝的一些操作:
sklearn决策树

1.4 试试其他的决策树模型

我们可以尝试使用ID3的进阶C 4.5,或者是与ID3很像的CART算法,多种比较下得到最优的结果。

2、具体代码实现(代码来源于本书,不做详细解释)

2.1 数据处理

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
def read_dataset(fname):# 指定第一列作为行索引data = pd.read_csv(fname, index_col=0) # 丢弃无用的数据data.drop(['Name', 'Ticket', 'Cabin'], axis=1, inplace=True)# 处理性别数据data['Sex'] = (data['Sex'] == 'male').astype('int')# 处理登船港口数据labels = data['Embarked'].unique().tolist()data['Embarked'] = data['Embarked'].apply(lambda n: labels.index(n))# 处理缺失数据data = data.fillna(0)return datatrain = read_dataset('datasets/titanic/train.csv')


分割数据集

from sklearn.model_selection import train_test_splity = train['Survived'].values
X = train.drop(['Survived'], axis=1).valuesX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)print('train dataset: {0}; test dataset: {1}'.format(X_train.shape, X_test.shape))

2.2 训练模型

from sklearn.tree import DecisionTreeClassifierclf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
train_score = clf.score(X_train, y_train)
test_score = clf.score(X_test, y_test)
print('train score: {0}; test score: {1}'.format(train_score, test_score))

前剪枝

from sklearn.tree import export_graphvizwith open("titanic.dot", 'w') as f:f = export_graphviz(clf, out_file=f)# 1. 在电脑上安装 graphviz
# 2. 运行 `dot -Tpng titanic.dot -o titanic.png`
# 3. 在当前目录查看生成的决策树 titanic.png
# 参数选择 max_depth
def cv_score(d):clf = DecisionTreeClassifier(max_depth=d)clf.fit(X_train, y_train)tr_score = clf.score(X_train, y_train)cv_score = clf.score(X_test, y_test)return (tr_score, cv_score)depths = range(2, 15)
scores = [cv_score(d) for d in depths]
tr_scores = [s[0] for s in scores]
cv_scores = [s[1] for s in scores]best_score_index = np.argmax(cv_scores)
best_score = cv_scores[best_score_index]
best_param = depths[best_score_index]
print('best param: {0}; best score: {1}'.format(best_param, best_score))plt.figure(figsize=(10, 6), dpi=144)
plt.grid()
plt.xlabel('max depth of decision tree')
plt.ylabel('score')
plt.plot(depths, cv_scores, '.g-', label='cross-validation score')
plt.plot(depths, tr_scores, '.r--', label='training score')
plt.legend()
# 训练模型,并计算评分
def cv_score(val):clf = DecisionTreeClassifier(criterion='gini', min_impurity_decrease=val)clf.fit(X_train, y_train)tr_score = clf.score(X_train, y_train)cv_score = clf.score(X_test, y_test)return (tr_score, cv_score)# 指定参数范围,分别训练模型,并计算评分
values = np.linspace(0, 0.005, 50)
scores = [cv_score(v) for v in values]
tr_scores = [s[0] for s in scores]
cv_scores = [s[1] for s in scores]# 找出评分最高的模型参数
best_score_index = np.argmax(cv_scores)
best_score = cv_scores[best_score_index]
best_param = values[best_score_index]
print('best param: {0}; best score: {1}'.format(best_param, best_score))# 画出模型参数与模型评分的关系
plt.figure(figsize=(10, 6), dpi=144)
plt.grid()
plt.xlabel('threshold of entropy')
plt.ylabel('score')
plt.plot(values, cv_scores, '.g-', label='cross-validation score')
plt.plot(values, tr_scores, '.r--', label='training score')
plt.legend()
def plot_curve(train_sizes, cv_results, xlabel):train_scores_mean = cv_results['mean_train_score']train_scores_std = cv_results['std_train_score']test_scores_mean = cv_results['mean_test_score']test_scores_std = cv_results['std_test_score']plt.figure(figsize=(10, 6), dpi=144)plt.title('parameters turning')plt.grid()plt.xlabel(xlabel)plt.ylabel('score')plt.fill_between(train_sizes, train_scores_mean - train_scores_std,train_scores_mean + train_scores_std, alpha=0.1, color="r")plt.fill_between(train_sizes, test_scores_mean - test_scores_std,test_scores_mean + test_scores_std, alpha=0.1, color="g")plt.plot(train_sizes, train_scores_mean, '.--', color="r",label="Training score")plt.plot(train_sizes, test_scores_mean, '.-', color="g",label="Cross-validation score")plt.legend(loc="best")
from sklearn.model_selection import GridSearchCVthresholds = np.linspace(0, 0.005, 50)
# Set the parameters by cross-validation
param_grid = {'min_impurity_decrease': thresholds}clf = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5, return_train_score=True)
clf.fit(X, y)
print("best param: {0}\nbest score: {1}".format(clf.best_params_, clf.best_score_))plot_curve(thresholds, clf.cv_results_, xlabel='gini thresholds')
from sklearn.model_selection import GridSearchCVentropy_thresholds = np.linspace(0, 0.01, 50)
gini_thresholds = np.linspace(0, 0.005, 50)# Set the parameters by cross-validation
param_grid = [{'criterion': ['entropy'], 'min_impurity_decrease': entropy_thresholds},{'criterion': ['gini'], 'min_impurity_decrease': gini_thresholds},{'max_depth': range(2, 10)},{'min_samples_split': range(2, 30, 2)}]clf = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5, return_train_score=True)
clf.fit(X, y)
print("best param: {0}\nbest score: {1}".format(clf.best_params_, clf.best_score_))

生成决策树

clf = DecisionTreeClassifier(criterion='entropy', min_impurity_decrease=0.002857142857142857)
clf.fit(X_train, y_train)
train_score = clf.score(X_train, y_train)
test_score = clf.score(X_test, y_test)
print('train score: {0}; test score: {1}'.format(train_score, test_score))# 导出 titanic.dot 文件
with open("titanic.dot", 'w') as f:f = export_graphviz(clf, out_file=f)# 1. 在电脑上安装 graphviz
# 2. 运行 `dot -Tpng titanic.dot -o titanic.png`
# 3. 在当前目录查看生成的决策树 titanic.png


《scikit-learn机器学习》决策树③ -泰坦尼克号幸存者预测【思路+代码】相关推荐

  1. sklearn决策树--泰坦尼克号幸存者预测

     决策树的原理即利用不同的最优特征选择方法,优先选择样本纯度最高的特征来进行样本分类.其中:   使用信息增益的决策树算法为 ID3:   使用信息增益率的决策树算法为 C4.5:   使用Gini指 ...

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

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

  3. 机器学习-泰坦尼克号幸存者预测

    机器学习-泰坦尼克号幸存者预测 泰坦尼克灾难数据描述 PassengerId:乘客的ID号,这个是顺序编号,用来唯一标识一名乘客.这个特征和幸存与否无关,我们不使用这个特征. Survived:1表示 ...

  4. python泰坦尼克号数据预测_机器学习入门之Python机器学习:泰坦尼克号获救预测一...

    本文主要向大家介绍了机器学习入门之Python机器学习:泰坦尼克号获救预测一,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 一.项目概要 1.应用 模式识别.数据挖掘(核心).统计学 ...

  5. 特征工程实践:泰坦尼克号幸存者预测

    文章目录 泰坦尼克号幸存者预测 泰坦尼克号幸存者预测 数据集下载地址:https://www.kaggle.com/c/titanic/data . 本案例主要展示特征工程对数据集的处理方法,模型只选 ...

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

    泰坦尼克号幸存者预测 泰坦尼克号训练数据见百度网盘: 链接:https://pan.baidu.com/s/1yHvYb2usyW24LqacHk9-Dw 提取码:p1do import pandas ...

  7. 泰坦尼克号数据集_机器学习入门—泰坦尼克号生存率预测

    项目名称:泰坦尼克号生存率预测1.导入数据 这里使用kaggle kernel编写代码 数据下载地址为:https://www.kaggle.com/c/titanic 2.数据统计分析 通过desc ...

  8. 机器学习实战-泰坦尼克号生存预测案例

    泰坦尼克号生存预测案例 操作平台:Jupyter Notebook 实验数据:从官方下载的泰坦尼克号测试集与训练集 使用语言:python 实验步骤: 安装我们所需要的第三方库,本次实验需要额外下载安 ...

  9. 【1 - 决策树 - 案例部分:泰坦尼克号幸存者预测】菜菜sklearn机器学习

    课程地址:<菜菜的机器学习sklearn课堂>_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现 第二期:随机森林在sklearn中的实现 ...

最新文章

  1. 单v100 GPU,4小时搜索到一个鲁棒的网络结构
  2. boost::container模块实现全部分配的测试程序
  3. sparklines插件_21个实用的Javascript数据图表插件
  4. BDC技术(一个例子)
  5. .NET测试用例写的好不好?让变种来测试一下!
  6. ClickHouse入门
  7. Tomcat访问日志详细配置
  8. kafka 分组消费topic_关于kafka更改消费者对应分组下的offset值
  9. 小心!!,使用缓存的陷阱
  10. Numpy根据某一列进行排序
  11. NSSM通俗易懂介绍,安装与使用
  12. 2017广州大学计算机组成原理,广州大学松田学院计算机组成原理复习题(仅供参考).doc...
  13. 所谓五福临门中的五福
  14. 新美域杂志新美域杂志社新美域编辑部2022年第6期目录
  15. 【流畅的Python学习笔记】2023.4.21
  16. 如何将纯色背景的图片转换为背景透明的图片
  17. 使用eagle导出PCB制造商可用的gerber文件
  18. 孤立森林异常检测算法原理和实战(附代码)
  19. (FortiGate)飞塔防火墙配置AD***
  20. 新版ECharts实现“暂无数据”的完美解决方案

热门文章

  1. 为什么用python画图_怎么用python画图
  2. 论文阅读:《A Wavenet For Speech Denoising》
  3. android打开教程,Android 打开网络上pdf文件
  4. 四通畜牧数据库使用说明
  5. 空间曲面构造及其方程
  6. web前端期末大作业:美食网站设计与实现——HTML+CSS+JavaScript休闲美食餐饮公司网站静态模板(6个页面)
  7. 【经典C程序】判断闰年
  8. 怎么查看一段时间的计算机ip,如何查看电脑中使用过的历史IP地址
  9. 2021爱分析·云计算趋势报告——支撑数字化转型,企业云平台建设进入新阶段
  10. Python--fractions库【分数、有理数】