一 项目背景与问题提出
1. 项目背景
1912年4月15日,号称“永不沉没”的泰坦尼克号巨轮,在首航期间,撞上冰山之后沉没。船上的2224名乘客和机组人员,只有772人存活了下来,生存率只有32%,让人唏嘘不已。
导致大量的没法存活的重要原因之一,就是没有足够的救生艇,在上船前,露丝就曾向船长提出救生艇不够的问题。虽然幸存下来有一些运气因素,但是,有一些人可能比其他人更有可能生存,比如妇女,儿童以及上层阶级。
2. 问题提出
根据船上人员的姓名,性别,年龄等特征预测他们是否能幸存
二 数据来源与数据说明
1. 数据来源
数据来源于kaggle平台项目:点击下载Kaggle泰坦尼克号数据
2. 数据说明
三 数据探索与特征工程
1. 导入模块和数据
2. 查看数据
共891行, "Age"有714个非空值,"Cabin"只有204个非空值,存在大量缺失值,"Embarked"有两个缺失值
3. 缺失值处理
"Age" 缺失值不多,用均值填充
"Cabin"过多, 删除该列
"Embarked" ,删除带有缺失值的行
4. 连续型变量处理
将连续变量进行分组.,并进行哑变量处理
5.相关关系与特征处理
"name" "ticket" 无法获得更多信息,删除特征
与最后能否幸存相关度较高的特征是:"Fare" "Age" "Embarked" "Pclass" "Sex" 可以放入模型
" Parch" "PassengerId" "Sibsp" 相关度较低. 直接删除"PassengerId", " Parch"和"Sibsp" 考虑生成衍生特征
用Parch和sibsp 生成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 最终模型
六 预测
导入测试集数据,清洗整理后用建好的模型预测
七 改进
参考了别人的方法,获得新思路 :
从name中提取特征