news 2026/4/26 5:41:22

【机器学习实战2】泰坦尼克号:从数据清洗到特征工程的生存预测全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【机器学习实战2】泰坦尼克号:从数据清洗到特征工程的生存预测全流程

1. 数据探索与初步分析

第一次拿到泰坦尼克号数据集时,我习惯性地先看数据结构。用pandas的head()快速浏览前几行数据,发现每个乘客有12个特征,包括年龄、性别、舱位等级等。但很快注意到Age列有缺失,Cabin列更是大面积空白——这让我想起实际项目中常遇到的"脏数据"问题。

统计Survived列发现生还率仅38%,说明这是个类别不均衡问题。进一步用groupby分析发现:头等舱乘客生还率62%,而三等舱只有24%;女性生还率74%,男性仅18%。这些数字直观展示了"妇女儿童优先"的救援原则。可视化时我用matplotlib画了堆叠柱状图,不同舱位的生存对比一目了然。

2. 数据清洗实战技巧

处理缺失值时,Age列我尝试了三种方法:均值填充、中位数填充和基于称谓的智能填充。实测发现,从Name提取Mr/Miss/Mrs等称谓后,按称谓分组用中位数填充效果最好。比如"Master"称谓(未成年男性)的年龄中位数是5岁,比整体均值29.7岁更合理。

对于Embarked缺失的两条记录,通过票号查找发现都是头等舱乘客,且票价接近80英镑。查询历史资料发现这个价位乘客多从南安普顿登船,因此填充'S'。Cabin列缺失太多,但首字母代表甲板位置可能有价值,于是提取出Deck特征后再删除原列。

# 智能填充年龄示例 titles = df['Name'].str.extract(' ([A-Za-z]+)\.', expand=False) title_median_age = df.groupby(titles)['Age'].median() df['Age'] = df.apply( lambda x: title_median_age[x['Title']] if pd.isnull(x['Age']) else x['Age'], axis=1 )

3. 特征工程深度挖掘

3.1 姓名中的隐藏信息

Name列看似无用,但提取称谓后发现有趣模式:"Dr""Rev"等职业称谓的生还率低于平均值,而"Countess"等高身份称谓生还率更高。我将称谓归纳为6类:贵族、职业人士、成年男性、成年女性、未婚女性、儿童,做成分类特征。

3.2 家庭关系特征

SibSp和Parch原始特征可以衍生出更多信息:

  • FamilySize:家庭成员总数(SibSp + Parch + 1)
  • IsAlone:是否独自乘船(FamilySize == 1)
  • 分箱处理:将家庭规模分为独行、小家庭(2-4人)、大家庭(5人以上)

3.3 舱位与票价特征

Fare票价与Pclass舱位等级高度相关,但相同舱位内票价差异也蕴含信息:

  • FarePerPerson:总票价除以家庭人数
  • FareBin:将票价分为5个等级
  • CabinPremium:根据Cabin首字母判断是否位于高级甲板

4. 特征编码与选择

对于分类特征,测试了三种编码方式:

  1. LabelEncoder:简单但会引入虚假顺序
  2. OneHotEncoder:维度爆炸但无顺序假设
  3. TargetEncoding:用目标变量均值编码,需防范数据泄露

最终方案:

  • 有序类别(如Pclass)用LabelEncoder
  • 无序类别(如Embarked)用OneHotEncoder
  • 高基数特征(如Ticket前缀)用TargetEncoding
# 目标编码示例 from sklearn.preprocessing import TargetEncoder encoder = TargetEncoder() df['Deck_encoded'] = encoder.fit_transform( df['Deck'], df['Survived'] )

5. 模型构建与优化

5.1 基线模型选择

先用逻辑回归建立基线,准确率约79%。然后尝试:

  • 随机森林:处理非线性关系效果好
  • XGBoost:自动特征选择能力强
  • SVM:小样本表现稳定

5.2 特征重要性分析

通过随机森林的feature_importance发现:

  1. 性别是最强预测因子
  2. 票价和舱位次之
  3. 自建特征Deck和Title排名靠前

5.3 超参数调优

用GridSearchCV优化随机森林:

param_grid = { 'n_estimators': [100, 200], 'max_depth': [4, 6, None], 'min_samples_split': [2, 5] } grid = GridSearchCV(RandomForestClassifier(), param_grid) grid.fit(X_train, y_train)

6. 集成学习提升效果

单模型最好成绩是XGBoost的83.5%。尝试三种集成方法:

  1. VotingClassifier:结合逻辑回归、随机森林、SVM
  2. Stacking:用XGBoost作为元模型
  3. Bagging:对随机森林做二次采样

最终Stacking方案将准确率提升到85.2%,关键代码如下:

from sklearn.ensemble import StackingClassifier base_models = [ ('rf', RandomForestClassifier(n_estimators=200)), ('xgb', XGBClassifier(max_depth=3)) ] stack = StackingClassifier( estimators=base_models, final_estimator=LogisticRegression() )

7. 避免常见陷阱

在这个项目中我踩过几个坑:

  1. 数据泄露:在填充Age缺失值时,错误地在全数据集计算均值
  2. 过拟合:早期版本在训练集达到92%但测试集只有80%
  3. 评估偏差:用accuracy评价不均衡数据,改用F1-score

解决方案:

  • 严格区分训练/测试集
  • 早停法防止过拟合
  • 使用交叉验证
  • 关注混淆矩阵而非单一指标

处理泰坦尼克号数据集就像在考古,每个特征都可能隐藏着1912年的社会密码。当我发现头等舱儿童的生还率比三等舱成人高出6倍时,突然理解了特征工程的魅力——它让数据讲出了那个夜晚的真实故事。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 23:46:01

LosslessCut高效工作流:从新手到专家的无损编辑实践指南

LosslessCut高效工作流:从新手到专家的无损编辑实践指南 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut LosslessCut是一款专注于无损视频编辑的跨平台工具…

作者头像 李华
网站建设 2026/4/18 19:29:36

Nano-Banana Studio惊艳效果:高分辨率(2048×2048)技术蓝图输出实测

Nano-Banana Studio惊艳效果:高分辨率(20482048)技术蓝图输出实测 1. 这不是普通AI绘图,是产品设计师的“结构透视眼” 你有没有试过把一件夹克衫摊开在桌面上,每颗纽扣、每条缝线、每块衬布都整整齐齐排成一行&…

作者头像 李华
网站建设 2026/4/24 0:56:09

NCM格式破解工具全攻略:无损转换与高效工作流搭建指南

NCM格式破解工具全攻略:无损转换与高效工作流搭建指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾因下载的NCM音频文件无法在常用播放器中打开而感到困扰?是否遇到过转换工具效率低下、音质受损的…

作者头像 李华
网站建设 2026/4/25 23:09:51

打破音乐格式限制:3分钟解锁NCM文件的自由播放方案

打破音乐格式限制:3分钟解锁NCM文件的自由播放方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾遇到这样的困境:精心收藏的网易云音乐下载后,却因NCM加密格式无法在其他设备播放&#…

作者头像 李华
网站建设 2026/4/18 13:03:11

游戏存档修改神器NHSE零基础精通指南

游戏存档修改神器NHSE零基础精通指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE作为一款专业的《动物森友会》存档编辑工具,能帮助玩家轻松实现物品获取、岛屿规划和村民管理…

作者头像 李华
网站建设 2026/4/23 12:13:32

解决游戏控制器兼容性问题的虚拟手柄驱动解决方案

解决游戏控制器兼容性问题的虚拟手柄驱动解决方案 【免费下载链接】ViGEmBus 项目地址: https://gitcode.com/gh_mirrors/vig/ViGEmBus 在游戏体验中,控制器识别问题常常成为玩家与游戏之间的阻碍。无论是第三方手柄无法被游戏识别,还是特殊输入…

作者头像 李华