kaggle项目:泰坦尼克号生存率分析_随机森林

一 项目背景与问题提出

1. 项目背景

1912年4月15日,号称“永不沉没”的泰坦尼克号巨轮,在首航期间,撞上冰山之后沉没。船上的2224名乘客和机组人员,只有772人存活了下来,生存率只有32%,让人唏嘘不已。

导致大量的没法存活的重要原因之一,就是没有足够的救生艇,在上船前,露丝就曾向船长提出救生艇不够的问题。虽然幸存下来有一些运气因素,但是,有一些人可能比其他人更有可能生存,比如妇女,儿童以及上层阶级。

2. 问题提出

根据船上人员的姓名,性别,年龄等特征预测他们是否能幸存

二 数据来源与数据说明

1. 数据来源

数据来源于kaggle平台项目:点击下载Kaggle泰坦尼克号数据

2. 数据说明

三 数据探索与特征工程

1. 导入模块和数据


2. 查看数据


data.head()

共891行, "Age"有714个非空值,"Cabin"只有204个非空值,存在大量缺失值,"Embarked"有两个缺失值

data.info()

3. 缺失值处理

"Age" 缺失值不多,用均值填充

"Cabin"过多, 删除该列

"Embarked" ,删除带有缺失值的行

 4. 连续型变量处理

将连续变量进行分组.,并进行哑变量处理

age 分组


fare分组


embarked和sex


5.相关关系与特征处理

"name" "ticket" 无法获得更多信息,删除特征

与最后能否幸存相关度较高的特征是:"Fare" "Age" "Embarked" "Pclass" "Sex" 可以放入模型

" Parch" "PassengerId" "Sibsp" 相关度较低.  直接删除"PassengerId",  " Parch"和"Sibsp" 考虑生成衍生特征


用Parch和sibsp 生成familysize特征, 但与生存率关系不大

familysize

用Parch和sibsp 生成 isalone 特征, 相关性较大,放入模型

四 建模

1.  训练集和测试集

2. 交叉验证选择最佳模型

创建空字典  为画图做准备
遍历五个模型交叉验证
画图

从图中看出,随机森林表现最好,选择随机森林作为最终模型,进行调参

结果

五 调参

1. 调参思想

运用泛化误差-复杂度曲线,当模型复杂度过高(过拟合),或过低(拟合不足)时,模型的泛化误差较高.

达到最适当的复杂度时,泛化误差最小

2.学习曲线

调参数n_estimators, 该参数不影响模型的复杂度. 一般来说n_estimators越大,模型的准确率慢慢提升至平稳,运行时间越长

运用学习曲线找到能衡运行时间和准确率的最佳 n_estimators

结果:  n_estimators=101, 模型准确率0.830145556691

3. 网格搜索

3.1 参数 max_depth

目的: 找出 d当n_estimators =101 时 ,参数 max_depth等于多少能提高模型准确率

结果: 当 max_depth=13时,模型准确率略有提高. 

说明模型可能处于泛化误差-复杂度曲线的左边 ,增加复杂度还有可能提高模型准确率,因此用网格搜索下一个参数

代码

3.2 参数min_samples_split

结果: 加入该参数,模型准确率反而下降了,说明此时可能已经处于泛化误差最低点

增加模型复杂度已经不能提高准确率,因此 其他增加模型复杂度的参数不用再尝试

3.3 参数 criterion 

该参数既可能提升模型复杂度也可能降低复杂度,可以尝试一下

结果: 用现有参数 criterion=gini,准确率最高

3.4 最终模型

交叉验证
拟合

六 预测

导入测试集数据,清洗整理后用建好的模型预测

结果
导出为csv文件

七  改进

参考了别人的方法,获得新思路 : 

从name中提取特征

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容