应用机器学习:乘客生存预测案例研究的经验教训

在学习和实践机器学习时,研究他人如何应用方法和解决问题是一个有价值的练习。它很有价值,因为你可以学到新的流程、软件、图表和算法。

但通过机器学习解决问题的过程,最宝贵的收获是新的思维方式。

在这篇文章中,你将回顾 Curt Wehrley 的方法,用于 预测泰坦尼克号上的乘客生存情况。这个数据集是 初级 Kaggle 竞赛 的基础。

Curt 在他的分析中使用了 R,并提供了一种合乎逻辑的问题研究方法,从中你可以吸取许多经验。

用我的新书《R 语言机器学习精通》开启您的项目,书中包含分步教程和所有示例的R 源代码文件。

让我们开始吧。

研究问题

Curt 开始时描述了问题。他链接到 RMS Titanic 维基百科词条 等资源,并提到了关于泰坦尼克号及其沉没事件的一些事实。

这表明 Curt 在深入研究数据集之前,已经在思考更宏观的问题。这不是对一个空变量的预测,而是现实世界中发生的一个事件,我们可以从中做出一些假设。

Curt 这样做并列出了可以针对数据进行测试的假设,例如乘客等级、客舱到救生艇的距离以及“妇女儿童优先”的原则。

研究数据

Curt 评论说,他认为大部分的努力(和回报)都在问题的 数据准备阶段。他将其视为一个亲自动手、深入了解数据的机会。他说,他对问题的最大见解来自于这个阶段。

缺失数据

Curt 研究了缺失数据,并创建了一个图表(来自 Amelia 包 的 missmap 函数),总结了具有缺失数据的属性。他评论了不同属性的缺失数据量,并推测了插补数据的方法和实用性。

属性分布

Curt 独立研究了属性的分布,查看了名义属性的直方图。他提取了总体趋势并解释了数据,结合领域背景评论了它们含义,例如年龄和等级。

Attribute Distributions

属性分布
Curt Wehrley 创建的图表

属性与生存的关系

接下来,Curt 研究了属性在预测变量(生存)背景下的分布。他使用马赛克图(来自 vcd 包 的 mosaicplot 函数)来评估分类属性与预测变量之间的关系,以及使用相关图(来自 corrgram 包 的 corrgram 函数)来支持他的解释。

Curt 逐一分析了关键属性,指出了关键关系和解释,例如等级影响生存概率以及性别与生存之间的关系。

有一个有用的模式值得注意,那就是可视化、解释和确认。确认是通过另一种主观方法实现的,但这些假设也可以在流程的后期轻松地进行建模。

Passenger Fate by Traveling Class

乘客按旅行等级划分的命运
Curt Wehrley 创建的图表

特征工程

Curt 从年龄开始,考虑了对大约 20% 的缺失值进行插补的不同方法。他查看了取平均年龄,首先是总体平均年龄,然后是按等级划分的平均年龄,接着是使用性别甚至头衔。

这是一个使用简单统计方法提高数据质量的重要例子。鉴于这是一个竞赛,我希望能看到不同年龄模型对最终得分的贡献效果。

Curt 充分利用了姓名字段中的头衔前缀,提取并进行了有意义的整合(如先生、贵族等)。这是一个很好的特征,并且有很大的空间去探索它对模型做出的贡献。

最后,Curt 从数据中派生了许多其他特征,例如对女性儿童的偏好,以及有客舱属性的记录所在的船舱层和侧面。

需要更多关于R机器学习的帮助吗?

参加我为期14天的免费电子邮件课程,了解如何在您的项目中使用R(附带示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

研究模型

Curt 并没有一开始就给问题带来大量最先进的模型。

拟合一个被充分理解的模型

Curt 从一个被充分理解的方法开始:逻辑回归。

他使用简单的数据 80/20 划分进行训练和测试,并观察了不同属性对预测乘客生存的贡献。他使用卡方统计量来评估模型,并通过运行方差分析来查看不同属性的方差减少情况。

这是一个巧妙的第一步,因为它允许 Curt 验证关于问题的假设,并寻找简单的改进,比如删除不相关的特征。

然后他切换到 caret 包,运行具有 10 折交叉验证和 3 次重复的逻辑回归。他很小心地为每次运行使用相同的随机种子,以便结果可以直接比较。通过这个更强大的测试框架,他尝试了不同的特征组合,删除了特征,甚至进行了一些进一步的特征工程。

拟合其他模型

在对特征选择建立一些信心后,Curt 选择了另外三个强大的模型:Adaboost、Random Forest 和 SVM。

Curt 没有随意运行模型,而是利用 caret 包的特性来调整每个模型的参数。他为每个算法选择了表现更好的参数集用于模型评估。

评估模型

Curt 评估了每个模型在问题上的表现,并准备了一个混淆矩阵来总结结果。他对这些结果进行了一些简要的解释,留下了很多深入分析的空间。

ROC Curves of Model Performance

模型性能的 ROC 曲线
Curt Wehrley 的图表

结果通过 ROC 曲线在灵敏度-特异度图上进行了图形化比较。这是比较模型在预测准确性权衡时的一种常用方法。

Curt 还使用点图和箱须图来比较每个模型的 ROC 分数。他评论说,所有四个模型在预测死亡人数方面都比预测生存人数更好,并且如果他必须选择一个模型应用,他会选择逻辑回归。

Dot Plots of Model Performance

模型性能的点图
Curt Wehrley 的图表

学到的经验

Curt 谨慎地指出,这只是一个解决问题的例子,远非最佳方法。我认为它很好地展示了如何解决问题和应用机器学习算法。

你可以从这个案例研究中吸取一些经验:

  • 研究你的问题:在更广泛的背景下回顾问题,并列出你认为可能相关且可以通过实际数据进行验证的所有假设。
  • 审查你的数据:研究可用数据。查找缺失值并考虑如何进行插补。仔细查看每个属性的分布以及每个属性在预测变量背景下的分布,并务必写下你注意到的趋势和见解,这些也可以在模型构建过程中进行测试和利用。
  • 衍生特征:超越提供的数据,创建新的属性,这些属性暴露了数据中你认为有助于模型进行预测的结构。
  • 研究一个模型:选择一个你熟悉且了解的模型,并用它来更多地了解问题、检验假设并找出可能有助于预测的属性。
  • 鲁棒的模型评估:使用如重复交叉验证等鲁棒方法来估计模型在未见数据上的性能,并使用对结果敏感的度量(真阳性/假阴性)来比较模型。

在R中发现更快的机器学习!

Master Machine Learning With R

在几分钟内开发您自己的模型

...只需几行R代码

在我的新电子书中探索如何实现
精通 R 语言机器学习

涵盖自学教程端到端项目,例如
加载数据、可视化、构建模型、调优等等...

最终将机器学习应用到您自己的项目中

跳过学术理论。只看结果。

查看内容

4 条对《应用机器学习案例研究:乘客生存预测经验分享》的回复

  1. Learner 2017年3月2日 上午1:58 #

    这个例子就像用以下步骤来教人们如何驾驶火箭——
    1. 建造一个容器——比如有金属和塑料的选项。
    2. 用燃料填充容器。不要告诉人们它不是汽油。
    3. 点燃底部。不要告诉人们是应该用火柴还是烟花棒。
    4. 对火箭说“再见”,然后仰望天空。

    … 很少能清晰地解释任何东西。最后,我的问题比答案还多。

  2. Another Learner 2018年11月18日 上午12:01 #

    嗨,Jason,

    您能否提供一个类似教程的链接,其中包含所有步骤的代码,并对概念进行更深入的解释?

    谢谢 🙂

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。