Titanic SVM 实验介绍视频脚本(约 5 分钟)

0:00-0:25 开场与任务说明

画面提示:展示实验报告封面或 Kaggle Titanic 题目页面。

口播:
大家好,本次实验的题目是 Kaggle 上的 Titanic - Machine Learning from Disaster。我使用 Python 语言和支持向量机 SVM,完成乘客是否生还的二分类预测。实验的主要流程包括数据读取、探索性分析、缺失值处理、结合实际背景的特征工程、SVM 模型训练与验证,最后生成 Kaggle 要求格式的提交文件。

0:25-1:05 数据集与问题理解

画面提示:展示 titanic/train.csvtest.csv 和代码中的读取部分。

口播:
训练集一共有 891 条样本,包含 PassengerId、Pclass、Name、Sex、Age、SibSp、Parch、Ticket、Fare、Cabin、Embarked 和标签 Survived。测试集有 418 条样本,没有 Survived 标签,需要模型预测。Survived 等于 1 表示乘客生还,等于 0 表示未生还。

在训练集中,整体生还率约为 38.38%。这说明数据本身并不是完全均衡的,所以后续评估时不能只看模型是否能预测多数类别,还需要观察 Precision、Recall、F1 和混淆矩阵。

1:05-2:05 结合实际背景的数据分析

画面提示:展示 outputs/metrics.json 中按性别和舱位等级统计的结果,或展示报告中的统计表。

口播:
Titanic 这个题目不能只机械地填补缺失值,还要考虑真实背景。根据训练集统计,女性乘客的生还率为 74.20%,男性乘客的生还率只有 18.89%,差异非常明显。这和历史中的“妇女和儿童优先”救援背景一致。

再看舱位等级,头等舱乘客生还率为 62.96%,二等舱为 47.28%,三等舱只有 24.24%。这说明 Pclass 和 Fare 这类字段能够反映乘客所在区域、经济条件和逃生机会,因此应该保留。

年龄方面,儿童群体的生还率也相对较高。所以在特征工程中,我没有只保留原始 Age,而是额外构造了 IsChild 和 WomanOrChild,用来体现儿童以及女性或儿童这类更可能优先获救的群体。

2:05-3:05 缺失值处理与特征工程

画面提示:展示 TitanicFeatureEngineer 类中的 fittransform_extract_title 部分。

口播:
数据中缺失比较明显的字段是 Age、Cabin 和 Embarked。Age 在训练集中缺失 177 个,在测试集中缺失 86 个。如果直接用全局平均数填充,会丢失很多人群差异。因此我先从 Name 中提取 Title,也就是 Mr、Mrs、Miss、Master 等称谓,再结合 Sex 和 Pclass,用分组中位数填充 Age。如果某个分组没有可用中位数,再回退到更粗的分组或全局中位数。

Cabin 缺失很多,所以我没有直接使用原始舱号文本,而是构造 HasCabin,表示是否有舱位记录。Embarked 使用训练集众数填充,Fare 使用相同舱位等级的中位数填充。

特征工程方面,除了原始的 Pclass、Sex、Age、SibSp、Parch、Fare、Embarked,我还构造了 Title、FamilySize、IsAlone、IsFemale、IsChild、WomanOrChild、HasCabin 和 AgeBand。这些特征都和 Titanic 的实际背景有关,可以帮助模型学习更有意义的分类边界。

3:05-4:00 SVM 建模流程

画面提示:展示 build_pipeline()GridSearchCV 和模型训练部分。

口播:
模型部分使用 scikit-learn 的 Pipeline 组织完整流程。首先通过自定义的 TitanicFeatureEngineer 生成特征,然后用 ColumnTransformer 分别处理数值特征和类别特征。

数值特征使用 StandardScaler 标准化,因为 SVM 对特征尺度比较敏感。如果 Age、Fare 和 FamilySize 的数值范围差异太大,会影响距离和分类间隔的计算。类别特征使用 OneHotEncoder 进行独热编码,例如 Sex、Pclass、Embarked、Title 和 AgeBand。

分类器选择 RBF 核的 SVC。RBF 核可以处理非线性分类边界,适合 Titanic 这种由性别、年龄、舱位、家庭关系等多个因素共同影响的任务。我使用 8:2 的分层划分得到训练集和验证集,并通过 GridSearchCV 对 C 和 gamma 做小范围搜索,最终选择的最佳参数是 C 等于 10,gamma 等于 0.05。

4:00-4:40 实验结果

画面提示:展示终端运行结果、outputs/metrics.jsonsubmission_svm.csv 和报告中的结果表。

口播:
在验证集上,模型的 Accuracy 为 0.7933,Precision 为 0.75,Recall 为 0.6957,F1 值为 0.7218。混淆矩阵中,真实未生还且预测未生还的样本为 94 个,真实未生还但预测生还的样本为 16 个;真实生还但预测未生还的样本为 21 个,真实生还且预测生还的样本为 48 个。

从结果看,模型对未生还样本的识别相对稳定,但对生还样本仍存在一定漏判。测试集预测后生成了 submission_svm.csv,共 418 行,包含 PassengerId 和 Survived 两列,符合 Kaggle 提交格式。其中预测生还 141 人,预测未生还 277 人。Kaggle 官网分数可以在后续提交后补充到报告中。

4:40-5:10 总结

画面提示:展示实验报告最后的总结部分。

口播:
本次实验让我完整实践了一个机器学习分类任务的流程。比较重要的体会是,数据预处理不能只看字段是否缺失,还要理解字段背后的业务含义。比如 Titanic 数据中女性、儿童、头等舱乘客的生还率都更高,这些实际情况应该体现在特征设计中。

同时,SVM 对特征尺度敏感,所以标准化是必要步骤。通过 Pipeline 可以把特征工程、编码、标准化和模型训练组织在一起,减少手动处理带来的错误。后续如果继续优化,可以尝试更细致的票号特征、更多交叉验证实验,或者与随机森林、梯度提升树等模型进行对比。以上就是本次实验介绍,谢谢大家。

博客静态托管迁移记录

博客迁移

迁移原因

我的博客网站的最早期版本是静态托管在 Github Pages 上的,后来由于国内访问速度过慢的原因迁移到了 Gitee Pages 托管。但今年年初 Gitee 莫名抽风,无限期暂停Gitee Pages 的托管服务(其实之前还有个实名认证风波,我就不应该对国内的开源社区抱有希望)。

由于 Gitee Pages 托管服务停止,我不得不重新将博客网站迁移到 Github Pages ,并决定使用 Cloudflare 的托管服务作备份。

  • Copyrights © 2020-2026 Amano陽菜&丁同勖
  • 访问人数: | 浏览次数:

请我喝杯奶茶吧~

支付宝
微信