泰坦尼克号 - 机器学习灾难

2025年3月17日 | 阅读18分钟
Titanic- Machine Learning From Disaster

1912年泰坦尼克号沉没的悲剧事件,是历史上令人痛心的海上灾难。除了悲剧本身,与泰坦尼克号相关的数据集已成为从事数据科学和机器学习领域人士的重要资源。在接下来的探讨中,我们将深入研究泰坦尼克号数据集作为机器学习领域宝贵平台的重要性,它为那些对机器学习感兴趣的人提供了宝贵的经验,如数据准备、特征处理和预测建模等方面。

它被认为是一个初学者数据集,因此我们将非常基础地处理数据集。

数据集描述

训练数据集是构建机器学习模型的基础。在这个训练数据集中,提供了每位乘客的结果,通常称为“真实值”。模型的构建依赖于各种属性或“特征”,例如乘客的性别和舱位等级。此外,还存在特征工程的可能性,允许创建新的属性。

数据词汇表

特性说明关键代码
生存生存0 = 未生存,1 = 生存
Pclass船票等级1 = 一等舱,2 = 二等舱,3 = 三等舱
sex性别 (Gender)
年龄年龄(岁)
sibsp在泰坦尼克号上的兄弟姐妹/配偶数量|
parch在泰坦尼克号上的父母/子女数量|
ticket船票号码
fare乘客票价
cabin船舱号码
embarked登船港口C = 瑟堡,Q = 皇后镇,S = 南安普敦

特征详述

  • pclass:此变量用作社会经济地位(SES)的指标
  • 一等舱 = 上层阶级
  • 二等舱 = 中产阶级
  • 三等舱 = 下层阶级
  • age:如果年龄小于1,则以小数表示。如果年龄是估算的,则显示为xx.5
  • sibsp:数据集中家庭关系如下……
  • 兄弟姐妹 = 兄弟、姐妹、继兄弟、继姐妹
  • 配偶 = 丈夫、妻子(情妇和未婚妻不计在内)
  • parch:数据集中家庭关系如下……
  • 父母 = 母亲、父亲
  • 子女 = 女儿、儿子、继女、继子
  • 有些孩子只和保姆一起旅行;因此,他们的parch=0。

挑战

泰坦尼克号数据集的挑战在于根据年龄、性别、舱位等级等各种特征预测哪些乘客在这场灾难中幸存下来。这个挑战属于监督学习的范畴,因为我们有训练集的标记数据,并且我们的目标是预测测试集的标签。

代码实现

  • 导入库
  • 读取数据集
  • 分析数据

首先,我们将看看数据集中有哪些特征。

输出

Titanic- Machine Learning From Disaster

看起来我们的数据集有很多属性。那么我们需要对这些特征进行分类,比如哪些是分类特征,哪些是数值特征。

分类特征:这些值将实例分类到可比较的实例组中。分类特征包括名义、顺序、比率或区间值。这有助于选择合适的可视化方法等。

分类:Survived、Sex和Embarked。顺序:Pclass。

数值特征:这些值在不同实例之间变化。数值特征包括离散、连续或时间序列值。这有助于确定合适的绘图进行可视化等。

连续:Age、Fare。离散:SibSp、Parch。

输出

Titanic- Machine Learning From Disaster

混合数据类型指的是单个特征中同时包含数字和字母数字数据。这些实例是实现预期目标进行纠正的潜在候选者。我们的数据集中确实存在混合数据类型。

在这里,船票信息包含数字和字母数字数据类型的组合,而船舱数据仅包含字母数字字符。

在大型数据集中分析特征中的错误和拼写错误可能更具挑战性。然而,检查较小数据集的样本子集可能很容易地揭示需要纠正的特征。

在这里,如果您仔细观察,“Name”属性可能包含不准确之处或拼写错误,因为使用了各种格式来表示姓名。这些格式包括称谓、括号和引号,通常用于备用或缩写名称。

输出

Titanic- Machine Learning From Disaster

输出

Titanic- Machine Learning From Disaster

在数据集中,“Cabin”、“Age”和“Embarked”属性显示了一系列空值,按出现次数从高到低排序。

有七个特征具有整数或浮点数据类型,在测试数据集中,这个数量减少到六个。此外,有五个特征表示为字符串或对象。

输出

Titanic- Machine Learning From Disaster

让我们看看数值特征的各种分布

  • 该数据集共有 891 个样本,约占泰坦尼克号实际乘客人数(2,224 人)的 40%。
  • “Survived”特征是分类的,取值为 0 或 1。
  • 约 38% 的样本代表幸存的乘客,这与实际生存率(约 32%)一致。
  • 绝大多数乘客(>75%)没有父母或子女陪伴。
  • 近 30% 的乘客在泰坦尼克号上有兄弟姐妹和/或配偶。
  • 票价差异很大,一小部分乘客(<1%)支付的费用高达 512 美元。
  • 年龄在 65-80 岁之间的高龄乘客(<1%)人数很少。

输出

Titanic- Machine Learning From Disaster

让我们看看分类特征的各种分布

  • 数据集中每个名字都是唯一的,总计数与唯一条目数 891 匹配。
  • “Sex”变量显示两个不同的值,其中大约 65% 的条目被归类为男性,使得“male”成为最常见的值,数量为 891 中的 577。
  • Cabin 值显示在多个样本中存在重复,这意味着某些船舱被多名乘客共享。
  • “Embarked”变量包含三个可能的值。“S”港口的使用者最多,成为占主导地位的选择。
  • “Ticket”特征显示相当高的重复值比例(22%),导致 891 个条目中只有 681 个唯一条目。

制定假设

我们将建立基于迄今为止进行的数据分析得出的假设。我们还可能寻求进一步证实这些假设,然后再做出必要的决定。以下是假设:

  • 我们的目标是评估每个特征与生存的关联程度。初步检查后,将在稍后与模型得出的相关性进行比较。
  • 我们应该考虑填充 Age 特征的缺失数据,因为它似乎与生存有关。
  • 完成 Embarked 特征可能是有价值的,因为它可能与生存或其他重要特征相关。
  • 由于其高重复率(22%),我们可能会将 Ticket 特征排除在分析之外,因为它可能与生存无关。
  • 鉴于其训练集和测试集中的大量不完整性和大量空值,我们可能会选择删除 Cabin 特征。
  • 由于 PassengerId 似乎与生存无关,因此可以将其从训练数据集中省略。
  • Name 特征相对不常规,可能不直接影响生存;因此,它是移除的候选。
  • 为了衡量船上的总体家庭规模,我们可以根据 Parch 和 SibSp 创建一个名为 Family 的新特征。
  • 在进行工程处理后,从 Name 特征中提取 Title 可以提供额外的见解。
  • 通过创建 Age 段将 Age 特征转换为顺序类别是一种潜在的策略。
  • 如果 Fare 段特征有助于我们的分析,可以生成 Fare 段特征。
  • 女性(Sex=female)的生存率更高。
  • 儿童(Age
  • 上层阶级(Pclass=1)的乘客更有可能生存。

透视特征

通过创建交叉引用不同特征的透视表,我们可以快速评估特征之间的相关性。但是,此分析目前仅限于没有缺失值的特征。此外,谨慎的做法是专门针对属于分类(Sex)、顺序(Pclass)或离散(SibSp、Parch)类型的特征进行此分析。

输出

Titanic- Machine Learning From Disaster

输出

Titanic- Machine Learning From Disaster

输出

Titanic- Machine Learning From Disaster

输出

Titanic- Machine Learning From Disaster
  • Pclass 存在显著的相关性(>0.5),特别是 Pclass=1 和 Survived 之间。我们选择将此特征包含在我们的模型中。
  • Sex 我们的初步观察是正确的,女性的生存率高达 74%。
  • SibSp 和 Parch,这些特征中的某些值没有显示相关性。从这些单独的特征派生一个新特征或特征组合可能是明智的。
  • 可视化数据

我们现在可以继续通过使用可视化来分析数据来验证某些假设。

数值特征之间的相关性

我们将通过理解数值特征与我们期望的结果(Survived)之间的相关性来开始我们的分析。

输出

Titanic- Machine Learning From Disaster

仔细检查数据后,注意到以下几点:

  • 婴儿(Age <= 4)的生存率很高。
  • 最年长的乘客(Age = 80)幸存了下来。
  • 相当多的 15-25 岁乘客未能生还。
  • 大多数乘客年龄在 15-35 岁之间。

因此,随后做出了以下决定:

  • 应将 Age 作为特征整合到模型训练中。
  • 应努力填充 Age 特征的缺失值。
  • 应将乘客的年龄分为特定的组。

数值特征与顺序特征之间的相关性

我们可以合并几个特征来通过单一可视化检测相关性。此方法适用于具有数值的数值和分类特征。

输出

Titanic- Machine Learning From Disaster

仔细检查数据后,注意到以下几点:

  • Pclass=3 容纳了最多的乘客;然而,大多数乘客未能生还。
  • 乘坐 Pclass=2 和 Pclass=3 的婴儿大部分幸存下来。
  • Pclass=1 中的大多数乘客幸存下来。
  • Pclass 在乘客年龄分布上有所不同。

根据这些观察,做出了以下决定:

  • Pclass 应作为特征纳入模型训练。

分类特征之间的相关性

接下来,我们将建立分类属性与我们解决方案目标之间的相关性。

输出

Titanic- Machine Learning From Disaster

仔细检查数据后,注意到以下几点:

  • 女性乘客的生存率明显高于男性乘客。
  • 在 Embarked=C 的情况下出现了一个有趣的例外,男性乘客的生存率更高。这可能意味着 Pclass 和 Embarked 之间存在相关性,从而影响 Pclass 和 Survived,而不是 Embarked 和 Survived 之间的直接相关性。
  • 在男性乘客中,对于 C 和 Q 港口,Pclass=3 的乘客的生存率高于 Pclass=2 的乘客。
  • 很明显,登船港口表现出不同的生存率,特别是对于 Pclass=3 和男性乘客。

因此,随后做出了以下决定:

  • 将 Sex 特征纳入模型训练。
  • 处理并整合 Embarked 特征,确保其包含在模型训练中。

分类特征与数值特征之间的相关性

我们还可以考虑检查分类特征(具有非数值值的特征)与数值特征之间的潜在相关性。例如,我们可以探索 Embarked(分类非数值特征)、Sex(另一个分类非数值特征)、Fare(数值连续特征)和 Survived(分类数值特征)之间的相关性。

输出

Titanic- Machine Learning From Disaster

仔细检查数据后,注意到以下几点:

  • 支付较高票价的乘客生存率更高,证实了我们创建票价范围类别的假设。
  • 生存率似乎与登船港口相关,这为我们提供了登船与生存之间以及港口与生存之间相关性的支持。

因此,随后做出了以下决定:

  • 建议将 Fare 特征分到不同的区间进行模型训练。
  • 数据整理

数据整理,也称为数据捣碎或数据预处理,是清理、转换和组织原始数据以获得更结构化和可用格式进行分析的过程。它涉及处理缺失值、删除重复项、格式化数据以及合并来自不同来源的数据等各种任务。数据整理可确保数据准确、一致并为进一步分析做好准备,从而使整个数据分析过程更顺畅、更有效。

丢弃特征

通过删除特征,我们处理的是较少的数据点。这加快了模型的性能并简化了分析。

我们打算删除 Cabin 和 Ticket 特征。

输出

Titanic- Machine Learning From Disaster

创建新特征

我们旨在检查 Name 特征是否可以被操纵以提取称谓,然后评估称谓与生存率之间的联系。将在决定删除 Name 和 PassengerId 特征之前进行此分析。

现在,我们将使用正则表达式提取 Title 特征。正则表达式模式 (\w+\.) 识别 Name 特征中以点字符开头的第一个单词。通过使用 expand=False 标志,我们得到一个 DataFrame 作为输出。

输出

Titanic- Machine Learning From Disaster

仔细检查数据后,注意到以下几点:

  • 许多称谓有效地对年龄范围进行了分组。例如,Master 称谓对应于 5 岁的平均年龄。
  • 不同 Title 年龄组的生存率略有不同。
  • 特定的称谓显示出更高的生存率(例如,Mme、Lady、Sir)或更低的生存率(例如,Don、Rev、Jonkheer)。

因此,随后做出了以下决定:

  • 因此,我们选择保留最近派生的 Title 特征,用于训练我们的模型。

我们可以选择用一个更常见的名称替换许多称谓,或者将它们归类为“Rare”。

输出

Titanic- Machine Learning From Disaster

我们可以将分类的称谓转换为顺序值。

输出

Titanic- Machine Learning From Disaster

我们现在可以放心地从数据集中删除 Name 特征。此外,数据集中不需要 PassengerId 特征。

输出

Titanic- Machine Learning From Disaster

转换分类特征

我们可以继续将包含字符串值的特征转换为数值特征,因为大多数模型算法都需要这种格式。此转换对于完成特征填充目标也至关重要。为了启动此过程,我们将 Sex 特征转换为名为 Gender 的新特征,其中 female 对应 1,male 对应 0。

输出

Titanic- Machine Learning From Disaster

连续特征

现在,我们需要开始估计和填充具有缺失或空值的特征。让我们从 Age 特征开始。

我们可以考虑三种方法来填充数值连续特征的缺失值:

  • 一种简单的方法涉及在平均值和 [标准差] 范围内生成随机数。估算缺失值的更准确方法是利用其他相关的特征。在我们的例子中,我们注意到 Age、Gender 和 Pclass 之间的相关性。我们可以通过使用 Pclass 和 Gender 不同组合的 Age 的 [中位数] 值来推断 Age 值。这意味着找到 Pclass=1 和 Gender=0、Pclass=1 和 Gender=1 等的中位数 Age。
  • 方法 1 和 2 的结合涉及在 Pclass 和 Gender 组合的集合之间生成随机数(而不是使用中位数),而不是使用中位数。

方法 1 和 3 都可能在我们的模型中引入随机波动,导致多次运行结果不同。因此,我们将选择方法 2 作为首选。

输出

Titanic- Machine Learning From Disaster

我们将开始创建一个空数组来保存估算的 Age 值,这些值将由 Pclass 和 Gender 的组合确定。

输出

Titanic- Machine Learning From Disaster

接下来,我们将循环遍历 Gender(0 或 1)和 Pclass(1、2、3)以计算六种可能组合的估算 Age 值。

输出

Titanic- Machine Learning From Disaster

我们将建立年龄分组,并评估它们与 Survived 的相关性。

输出

Titanic- Machine Learning From Disaster

我们将用与这些年龄分组相对应的顺序数字替换 Age 值。

输出

Titanic- Machine Learning From Disaster

我们不能删除 AgeBand 特征。

输出

Titanic- Machine Learning From Disaster

通过现有特征生成新特征

我们可以选择通过合并 Parch 和 SibSp 来生成一个名为 FamilySize 的新属性。然后,这将允许我们从数据集中删除 Parch 和 SibSp。

输出

Titanic- Machine Learning From Disaster

我们有机会生成一个称为 IsAlone 的附加属性。

输出

Titanic- Machine Learning From Disaster

我们应该删除 Parch、SibSp 和 FamilySize 属性,而是考虑 IsAlone 特征。

输出

Titanic- Machine Learning From Disaster

我们还可以通过结合 Pclass 和 Age 来生成一个合成属性。

输出

Titanic- Machine Learning From Disaster

分类特征

Embarked 特征由 S、Q 和 C 值表示,表示登船港口。我们的数据集中有两个实例在此特征中存在缺失值。我们可以方便地用最频繁的出现次数替换这些空白。

输出

Titanic- Machine Learning From Disaster

输出

Titanic- Machine Learning From Disaster

分类到数值

我们可以通过将 EmbarkedFill 特征转换为名为 port 的新数值特征来继续。

输出

Titanic- Machine Learning From Disaster

我们无法创建 FareBand。

输出

Titanic- Machine Learning From Disaster

使用 FareBand 类别将 Fare 特征转换为顺序值。

输出

Titanic- Machine Learning From Disaster

建模

现在我们可以开始训练模型并为我们期望的解决方案进行预测了。我们有超过 60 种预测建模算法可供选择。然而,为了简化我们的选择过程,考虑问题的性质和特定的解决方案要求很重要。在我们的案例中,我们正在处理分类和回归问题。我们的目标是建立输出(乘客是否生存)与各种其他变量或特征(如性别、年龄和登船港口)之间的关系。这属于监督学习的范畴,因为我们正在使用提供的数据集来训练模型。基于这些标准——监督学习结合分类和回归——我们可以将选项缩小到几个合适的模型。这些包括:

  • 逻辑回归
  • KNN(k-近邻)
  • 支持向量机
  • 朴素贝叶斯分类器
  • 决策树
  • 随机森林
  • 感知器
  • 人工神经网络

RVM(相关向量机)

输出

Titanic- Machine Learning From Disaster

逻辑回归

逻辑回归在分析早期就很有价值。它通过估计概率来评估分类因变量(特征)与一个或多个自变量(特征)之间的联系,这些概率通过逻辑函数估计,代表累积逻辑分布。

输出

Titanic- Machine Learning From Disaster

我们可以使用逻辑回归来验证我们关于特征创建和填充目标的假设和决策。这可以通过计算决策函数中的特征系数来实现。

正系数会放大响应的对数几率(并随后提高概率),而负系数会减小响应的对数几率(并因此降低概率)。

  • 最高的正系数与 Sex 相关,表明随着 Sex 值增加(从 male: 0 到 female: 1),Survived=1 的可能性显著增加。
  • 相反,随着 Pclass 值增加,Survived=1 的可能性显着降低。
  • 这突显了 Age*Class 作为有价值的、用于建模的人工特征的重要性,因为它是与 Survived 具有第二高负相关性的特征。
  • 同样,Title 也显示出作为第二高的强正相关性。

输出

Titanic- Machine Learning From Disaster

SVM

支持向量机 (SVM) 是监督学习中的模型,配有相应的学习算法,用于分类和回归分析。当提供一组标记为两个类别之一的训练样本时,SVM 训练算法会构建一个模型,将新的测试样本分配到这两个类别之一。此特性将 SVM 分类为非概率二元线性分类器。

输出

Titanic- Machine Learning From Disaster

K-近邻

在模式识别领域,k-近邻算法(缩写为 k-NN)是一种无特定参数的方法,常用于分类和回归任务。该方法通过确定样本的类别来确定其类别,该类别是基于其附近实例的集体意见。样本被分配到其 k 个最近邻中出现次数最多的类别(其中 k 是正整数,通常较小)。当 k 等于 1 时,该项直接分配给最近邻的类别。

输出

Titanic- Machine Learning From Disaster

朴素贝叶斯

朴素贝叶斯分类器属于一类简单的概率分类器,它们使用贝叶斯定理,同时假设特征之间存在很强的(朴素的)独立性。这些分类器以其出色的可扩展性而闻名,因为它们所需的参数数量与给定学习场景中的变量(特征)数量呈线性增长。

输出

Titanic- Machine Learning From Disaster

感知器

该模型使用决策树作为预测模型,该模型将特征(树分支)映射到目标值的结论(树叶)。目标变量可以取有限集合值的树模型称为分类树;在这些树结构中,叶子代表类标签,分支代表导致这些类标签的特征的组合。可以取连续值(通常是实数)的目标变量的决策树称为回归树。

输出

Titanic- Machine Learning From Disaster

线性 SVM

输出

Titanic- Machine Learning From Disaster

随机梯度下降

输出

Titanic- Machine Learning From Disaster

决策树

该模型使用决策树作为预测工具,该工具建立特征(如树的分支)与目标值(由树叶表示)的结论之间的联系。当目标变量具有有限的值范围时,树结构被称为分类树。在这些结构中,类标签位于叶子上,而分支代表与这些类标签对应的特征组合。另一方面,如果目标变量可以具有连续值(通常是实数),则生成的决策树称为回归树。

输出

Titanic- Machine Learning From Disaster

随机森林

随机森林是广泛采用的技术之一。它们是一种用于分类和回归任务的集成学习方法。该方法涉及在训练期间创建许多决策树(n_estimators=100),然后确定来自单个树的预测结果的类别模式(用于分类)或平均预测(用于回归)。

输出

Titanic- Machine Learning From Disaster

模型置信度得分是迄今为止评估的所有模型中最高的。

模型评估

我们现在可以评估和比较我们所有模型的性能,以确定我们任务的最佳模型。尽管决策树和随机森林产生相同的分数,但我们选择随机森林,因为它能够减轻决策树过度适应其训练数据的倾向,这种现象称为过拟合。

输出

Titanic- Machine Learning From Disaster

我们选择随机森林而不是决策树,因为它克服了过拟合的缺点。

结论

泰坦尼克号数据集已从历史性的悲剧事件记录演变为学习和实践机器学习技术的宝贵工具。它提供了实践机会来探索数据预处理、特征工程、探索性数据分析、模型构建和评估。有抱负的数据科学家和机器学习爱好者可以通过泰坦尼克号 - 从灾难中学习机器学习竞赛,更深入地理解真实世界数据分析所涉及的复杂性和挑战。