《scikit-learn》《Kaggle》泰坦尼克数据集的试验
下载泰坦尼克数据集,下载地址是: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》泰坦尼克数据集的试验相关推荐
- kaggle——泰坦尼克数据集
1.问题描述 RMS泰坦尼克号的沉没是历史上最臭名昭着的沉船之一.1912年4月15日,在首次航行期间,泰坦尼克号撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难.这场轰动的悲剧震撼了国际社 ...
- 泰坦尼克数据集预测分析_探索性数据分析—以泰坦尼克号数据集为例(第1部分)
泰坦尼克数据集预测分析 Imagine your group of friends have decided to spend the vacations by travelling to an am ...
- Titanic 泰坦尼克数据集 特征工程 机器学习建模
以下内容为讲课时使用到的泰坦尼克数据集分析.建模过程,整体比较完整,分享出来,希望能帮助大家.部分内容由于版本问题,可能无法顺利运行. Table of Contents 1 经典又有趣的Titan ...
- kaggle 泰坦尼克 高分 预测
kaggle 泰坦尼克 高分 预测 目录 kaggle 泰坦尼克 高分 预测 1.前言 2.包及数据导入 3.数据的初步认识 4.数据关系的可视化 5.数据清洗与缺失值处理 6.数据的统计分析 7.超 ...
- Dataset:titanic泰坦尼克号数据集/泰坦尼克数据集(是否获救二分类预测)的简介、下载、案例应用之详细攻略
Dataset:titanic泰坦尼克号数据集/泰坦尼克数据集(是否获救二分类预测)的简介.下载.案例应用之详细攻略 目录 titanic(泰坦尼克号)数据集的简介 1.titanic数据集各字段描述 ...
- ML之CatboostC:基于titanic泰坦尼克数据集利用catboost算法实现二分类
ML之CatboostC:基于titanic泰坦尼克数据集利用catboost算法实现二分类 目录 基于titanic泰坦尼克数据集利用catboost算法实现二分类 设计思路 输出结果 核心代码 相 ...
- 泰坦尼克数据集预测分析_探索性数据分析-泰坦尼克号数据集案例研究(第二部分)
泰坦尼克数据集预测分析 Data is simply useless until you don't know what it's trying to tell you. 除非您不知道数据在试图告诉您 ...
- 泰坦尼克 数据集_数据分析(一):11招入门数据分析
作者:奔跑的鳄鱼 阅读本文大概需要3分钟 用Python来玩转数据分析实在是太爽了,因为有强大的Pandas来处理数据非常方便,我个人对数据分析情有独钟,探索数据的秘密非常好玩!前段时间写过一篇小白学 ...
- Kaggle泰坦尼克数据科学解决方案
Kaggle泰坦尼克数据科学解决方案 参考文章: (1)Kaggle泰坦尼克数据科学解决方案 (2)https://www.cnblogs.com/zackstang/p/8185531.html ( ...
最新文章
- C# 创建控制台应用程序
- oracle 10g sqlplus登录显示问号,oracle sqlplus 连接时,connection to 显示的是问号
- Spark源码分析 – DAGScheduler
- iOS 设置Label中特定的文字大小和颜色
- 采用APACHE POI操作EXCEL文件--计算式调用另一文件
- css中英文混合实现两端对齐
- 22、java中的注解
- Wireshark图解教程(简介、抓包、过滤器)
- 找准多变量迭代过程的每一次变量转化(洛谷P1150题题解,Java语言描述)
- Visual Studio 2008 SP1 和 net framework 3.5 新特性
- [Winform]只允许运行一个exe,如果已运行则将窗口置前
- 线段树区改区查标记永久化板子
- java list容器_Java 容器列表(三)- ArrayList
- gz 解压 linux_Linux-Ubuntu常用命令-03-压缩解压
- 斯坦福大学stanford
- oracle10修改时区,ORACLE10g时区配置错误问题
- Linux下多线程pthread内存泄露
- 【总结整理】openlayer加载搜狗地图,qq地图,mapabc
- WPS 二维表格匹配方式(利用VLOOKUP+IF/SWITCH多条件查询)
- Vue搭脚手架及创建项目