下载泰坦尼克数据集,下载地址是:https://www.kaggle.com/c/titanic
这里如果是第一次使用kaggle的话,需要注册,注册时候有一些验证码的问题,可以参考https://www.cnblogs.com/liuxiaomin/p/11785645.html 来解决。

第一步:我们来看看titanic数据集

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import matplotlib as plt
from sklearn.model_selection import GridSearchCV, train_test_split# 生存者数据加载
passdata = pd.read_csv('../archive/titanic_data.csv')
print(passdata.info())  # 查看数据的一些统计信息,包括各个列的统计
print(passdata.head())  # 默认展示前5行数据
print(passdata['Sex'][0:10].tolist())  # 想查看某个属性的话,就用这种方式查看

得到数据的统计信息如下:

一共891个样本,每个样本有12个属性,其中类型是object的都是字符串。Age有714个非空值,Cabin缺失太多了,Embarked呢缺失值就只有俩个样本有缺失。
Survived 这一列其实就是标签,能幸存还是不能幸存。

第二步:对数据进行一些预处理

# 特征删选和清洗
passdata.drop(['Cabin', 'Name', 'Ticket'], inplace=True, axis=1)  # 把一些跟结果预测没用的列全部删除,原地修改。
passdata['Age'] = passdata['Age'].fillna(passdata['Age'].mean())  # 填充一些略微多的缺失值,假如我们用平均值取填充。fillna 就是fill NAN值
passdata.dropna(inplace=True, axis=0)  # 把个位数的(单独几个而已)有缺失的值的样本删除,按行删除
print(passdata.info())  # 查看数据的一些统计信息,包括各个列的统计

把一些跟结果没有多大关系的属性删除,比如Name,Cabin和Ticket
对缺失值进行填充,拿Age的平均值填充,fillna函数就是用力啊填充缺失值的。
剩下还有Embarked属性上俩样本存在缺失值,我么也不猜测了,直接删了,也没督导影响。
得到如下结果:

样本数目变成了889个。

进一步变化。

label_Embarked = passdata['Embarked'].unique().tolist()
print(label_Embarked)
passdata['Embarked'] = passdata['Embarked'].apply(lambda x: label_Embarked.index(x))  # 用唯一的序号代替Embarked离散值
print(passdata['Embarked'][0:10].tolist())label_Sex = passdata['Sex'].unique().tolist()
print(label_Sex)
passdata['Sex'] = passdata['Sex'].apply(lambda x: label_Sex.index(x))  # 用唯一的序号代替Sex离散值
print(passdata['Sex'][0:10].tolist())
print(passdata.head())  # 默认展示前5行数据

Sex的取值是[‘male’, ‘female’],替换为唯一的数字,就用其下标。
Embarked 的取值[‘S’, ‘C’, ‘Q’] ,替换为唯一的数字,就用其下标。
效果如下:
现在没有字符串,没有缺失值,去掉了不相关的属性。

第三步:从CSV清洗过的数据中分割出测试数据集合训练数据集,并且重置数据的index。

print(passdata.columns)  # 打印出所有的列名信息
print(passdata.columns != 'Survived')  # 打印出所有的不等于Survived的真值信息
x = passdata.iloc[:, passdata.columns != 'Survived']  # 取出所有行,但是不包含Survived的信息,只把等于True的位置的取出来,具体可以学习iloc,也叫做布尔索引的用法
y = passdata.iloc[:, passdata.columns == 'Survived']  # 取出所有行,但是只包含Survived的信息,布尔索引。# 把数据进行切分,切分成训练集和测试集合,切分比例一般是7:3
data_train, data_test, target_train, target_test = train_test_split(x, y, test_size=0.3)
data_train.reset_index(drop=True, inplace=True)  # 重置索引,虽然没啥用,但是强迫症,避免后续混乱,想要重新重置索引。
data_test.reset_index(drop=True, inplace=True)  # 重置索引,虽然没啥用,但是强迫症,避免后续混乱,想要重新重置索引。
target_train.reset_index(drop=True, inplace=True)  # 重置索引,虽然没啥用,但是强迫症,避免后续混乱,想要重新重置索引。
target_test.reset_index(drop=True, inplace=True)  # 重置索引,虽然没啥用,但是强迫症,避免后续混乱,想要重新重置索引。print(data_train.shape)
print(target_train.shape)
print(data_test.shape)
print(target_test.shape)

第四步骤:建立模型且进行训练

clf = DecisionTreeClassifier(random_state=20)
score = cross_val_score(clf, x, y, cv=10).mean()
print('初始化的精确度%s' % score)  # 太低了,我们来试图调整下参数。

发现一般这样做的话,精确度在70多,不是很高。

我们改变策略,进行调整参数,一个个来调整太慢了,我们直接使用网格搜索。

# 使用网格搜索来帮助我们同事调整多个参数的技术,给个字典,枚举每个参数的列表,进行组合,一个个来尝试,但是非常耗时间。
clf = DecisionTreeClassifier(random_state=20)
param_grid = [{'criterion': ['entropy', 'gini'],'max_features': [2, 4, 6, 8],'max_depth': [1, 2, 3, 4, 5, 6, 7, 8],'splitter': ['best', 'random'],'min_samples_leaf': [*range(1, 10, 5)],'min_impurity_decrease': [*np.arange(0.01, 0.1, 0.01)]},  # 一共有 2x4x8x2x11x10 个超参数组合
]'''
实例化一个网格搜索,它同时满足了fit, score, 交叉验证三种功能。
第一个参数:我们需要优化的模型,
第二个参数:想要调整的参数和参数的取值范围。
第三个参数:交叉验证的次数
'''
grid_search = GridSearchCV(clf, param_grid, cv=10, n_jobs=2)
grid_search = grid_search.fit(x, y)
score = grid_search.score(data_test, target_test)
print('精度为%s' % score)
print(grid_search.best_params_)  # 找到最优的超参数,这里帮我自动选择好了最优的参数列表
print(grid_search.best_estimator_)  # 找到最优化的模型,甚至把初始化参数都打印出来了
print(grid_search.best_score_)  # 找到最优的结果

发现这时候,精确度上到了80多哈,再仔细调整就会结果会跟好吧。

后面我们可能会使用随机森林来测试,而不是一颗单一的决策树。

网格搜索得出来的结果不一定有我们自行搜索的快哈。时间也慢,一定要自行估计好参数列表,建议小批量的进行搞。

《scikit-learn》《Kaggle》泰坦尼克数据集的试验相关推荐

  1. kaggle——泰坦尼克数据集

    1.问题描述 RMS泰坦尼克号的沉没是历史上最臭名昭着的沉船之一.1912年4月15日,在首次航行期间,泰坦尼克号撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难.这场轰动的悲剧震撼了国际社 ...

  2. 泰坦尼克数据集预测分析_探索性数据分析—以泰坦尼克号数据集为例(第1部分)

    泰坦尼克数据集预测分析 Imagine your group of friends have decided to spend the vacations by travelling to an am ...

  3. Titanic 泰坦尼克数据集 特征工程 机器学习建模

    以下内容为讲课时使用到的泰坦尼克数据集分析.建模过程,整体比较完整,分享出来,希望能帮助大家.部分内容由于版本问题,可能无法顺利运行. Table of Contents 1  经典又有趣的Titan ...

  4. kaggle 泰坦尼克 高分 预测

    kaggle 泰坦尼克 高分 预测 目录 kaggle 泰坦尼克 高分 预测 1.前言 2.包及数据导入 3.数据的初步认识 4.数据关系的可视化 5.数据清洗与缺失值处理 6.数据的统计分析 7.超 ...

  5. Dataset:titanic泰坦尼克号数据集/泰坦尼克数据集(是否获救二分类预测)的简介、下载、案例应用之详细攻略

    Dataset:titanic泰坦尼克号数据集/泰坦尼克数据集(是否获救二分类预测)的简介.下载.案例应用之详细攻略 目录 titanic(泰坦尼克号)数据集的简介 1.titanic数据集各字段描述 ...

  6. ML之CatboostC:基于titanic泰坦尼克数据集利用catboost算法实现二分类

    ML之CatboostC:基于titanic泰坦尼克数据集利用catboost算法实现二分类 目录 基于titanic泰坦尼克数据集利用catboost算法实现二分类 设计思路 输出结果 核心代码 相 ...

  7. 泰坦尼克数据集预测分析_探索性数据分析-泰坦尼克号数据集案例研究(第二部分)

    泰坦尼克数据集预测分析 Data is simply useless until you don't know what it's trying to tell you. 除非您不知道数据在试图告诉您 ...

  8. 泰坦尼克 数据集_数据分析(一):11招入门数据分析

    作者:奔跑的鳄鱼 阅读本文大概需要3分钟 用Python来玩转数据分析实在是太爽了,因为有强大的Pandas来处理数据非常方便,我个人对数据分析情有独钟,探索数据的秘密非常好玩!前段时间写过一篇小白学 ...

  9. Kaggle泰坦尼克数据科学解决方案

    Kaggle泰坦尼克数据科学解决方案 参考文章: (1)Kaggle泰坦尼克数据科学解决方案 (2)https://www.cnblogs.com/zackstang/p/8185531.html ( ...

最新文章

  1. C# 创建控制台应用程序
  2. oracle 10g sqlplus登录显示问号,oracle sqlplus 连接时,connection to 显示的是问号
  3. Spark源码分析 – DAGScheduler
  4. iOS 设置Label中特定的文字大小和颜色
  5. 采用APACHE POI操作EXCEL文件--计算式调用另一文件
  6. css中英文混合实现两端对齐
  7. 22、java中的注解
  8. Wireshark图解教程(简介、抓包、过滤器)
  9. 找准多变量迭代过程的每一次变量转化(洛谷P1150题题解,Java语言描述)
  10. Visual Studio 2008 SP1 和 net framework 3.5 新特性
  11. [Winform]只允许运行一个exe,如果已运行则将窗口置前
  12. 线段树区改区查标记永久化板子
  13. java list容器_Java 容器列表(三)- ArrayList
  14. gz 解压 linux_Linux-Ubuntu常用命令-03-压缩解压
  15. 斯坦福大学stanford
  16. oracle10修改时区,ORACLE10g时区配置错误问题
  17. Linux下多线程pthread内存泄露
  18. 【总结整理】openlayer加载搜狗地图,qq地图,mapabc
  19. WPS 二维表格匹配方式(利用VLOOKUP+IF/SWITCH多条件查询)
  20. Vue搭脚手架及创建项目

热门文章

  1. Outlook 2013 电子邮件账户设置备份与恢复
  2. 最后一公里极速配送 - 阿里云算法大赛总结
  3. 多链路及服务器负载均衡原理与设备构建方案
  4. [转]动态加载jar文件
  5. 学习一下戴戒指的含义[转]
  6. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”
  7. 容器编排技术 -- AWS EC2快速入门
  8. 【Pyhton爬虫】中国大学排名爬虫
  9. 【C语言】用指针作为形参完成数据的升序排列
  10. Jmeter基本概念介绍