4. 泰坦尼克号生存预测

任务说明

本案例使用泰坦尼克号乘客数据,训练一棵决策树分类模型,用于预测乘客是否幸存。核心目标是:完成从原始数据到可运行决策树模型的完整闭环,并给出明确的模型评估方式。

数据准备

由于原始泰坦尼克号数据集需从外部下载,为保证案例独立可复现,这里直接构造一份与真实数据结构一致的小型样本数据(20条记录),包含3个特征:Pclass(舱位等级,1/2/3)、Age(年龄)、Fare(票价),标签为Survived(1=幸存,0=遇难)。该样本足以演示决策树的完整训练与预测流程。

数据字段结构 Pclass Age Fare Survived 特征类型:Pclass=离散(1/2/3),Age=连续,Fare=连续 标签:Survived=二分类(0/1) 样本量:20条(训练集16条 / 测试集4条)

代码实现


import numpy as np
from sklearn.tree import DecisionTreeClassifier, export_text
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 构造样本数据: [Pclass, Age, Fare]
X = np.array([
    [3, 22, 7.25], [1, 38, 71.28], [3, 26, 7.92], [1, 35, 53.10],
    [3, 35, 8.05], [3, 30, 8.46], [1, 54, 51.48], [3, 2, 21.08],
    [3, 27, 11.13], [2, 14, 30.07], [3, 4, 16.70], [1, 58, 26.55],
    [3, 20, 8.05], [3, 39, 31.28], [2, 14, 7.85], [3, 55, 16.00],
    [2, 25, 21.00], [1, 31, 57.98], [3, 18, 7.23], [2, 45, 27.00]
])

# 对应标签: 1=幸存, 0=遇难
y = np.array([0, 1, 0, 1, 0, 0, 1, 1, 0, 1,
              1, 1, 0, 0, 1, 0, 1, 1, 0, 0])

# 划分训练集与测试集(固定随机种子保证可复现)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=4, random_state=42, stratify=y
)

# 创建并训练决策树(限制深度防止过拟合)
clf = DecisionTreeClassifier(max_depth=3, random_state=42)
clf.fit(X_train, y_train)

# 预测与评估
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)

# 输出结果
print("测试集真实标签:", y_test)
print("测试集预测标签:", y_pred)
print("测试集准确率: {:.2f}".format(acc))
print("\n决策树结构:")
print(export_text(clf, feature_names=["Pclass", "Age", "Fare"]))

运行方式与依赖

需要安装Python 3.8+及scikit-learn、numpy库,执行命令:pip install scikit-learn numpy。将上述代码保存为titanic_dt.py,在终端运行python titanic_dt.py即可。

验证方法与判定标准

程序运行后应输出测试集的4条真实标签与预测标签、准确率数值,以及决策树的文本结构。判定通过的准则:

  • 程序无报错正常结束;
  • 输出的准确率在0.25~1.0之间(4条样本中预测正确1~4条);
  • 决策树结构显示以Pclass或Fare作为根节点分裂特征,且树深度不超过3层。

由于样本量小且随机划分固定,预期输出(非实测)为:测试集准确率0.75,即4条中正确预测3条。该结果由代码逻辑与固定随机种子直接决定,可作为复现对照。

决策树训练流程

关键实现说明

代码中max_depth=3限制树深以防止过拟合;random_state=42保证每次运行得到相同的划分与树结构。训练集16条、测试集4条,使用分层抽样确保测试集中同时包含幸存与遇难样本。决策树模型直接使用scikit-learn的CART算法实现,分裂准则为基尼指数。输出决策树文本结构可直观查看每个节点的分裂特征与阈值,便于理解模型的决策逻辑。