02-决策树-泰坦尼克号乘客生存预测

📅 2026/7/11 6:54:50 👁️ 阅读次数 📝 编程学习
02-决策树-泰坦尼克号乘客生存预测

1. 需求分析

根据乘客特征预测是否幸存(二分类)

2. 数据说明

Kaggle 经典入门分类数据集,模拟 1912 年泰坦尼克沉船事件乘客信息,任务:根据乘客特征预测是否幸存(二分类)。数据来源于阿里云天池。

  • train.csv:训练集(891 条),含 Survived 标签;
  • test.csv:测试集(418 条),无存活标签;
字段含义
PassengerId乘客唯一 ID
Survived目标标签:0 = 遇难,1 = 幸存
Pclass客舱等级:1 一等、2 二等、3 三等(重要特征)
Name姓名,可提取头衔 Mr/Mrs/Miss 等衍生特征
Sex性别:male/female,强相关幸存(女士优先)
Age年龄,存在大量缺失值
SibSp同船兄弟姐妹 / 配偶数量
Parch同船父母 / 子女数量
Ticket船票编号
Fare票价
Cabin船舱号,缺失极多
Embarked登船港口:S 南安普顿、C 瑟堡、Q 皇后镇

数据特点:

  • 缺失值多:Age、Cabin、Embarked 均有空值,入门练数据清洗;
  • 类别不平衡:遇难人数多于幸存者;
  • 特征类型丰富:数值、分类、文本,适合练习特征工程;
  • 经典二分类任务:逻辑回归、决策树、随机森林、KNN 入门首选。

3. 建模

import matplotlib.pyplot as plt import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier, plot_tree from sklearn.metrics import classification_report

3.1 获取数据

data = pd.read_csv("./data/train.csv") data.info()

3.2 数据预处理

# 1. 提取特征和标签 x = data[['Pclass', 'Age', 'Sex']] y = data['Survived'] # 2. 缺失值处理 x.Age.fillna(x.Age.mean(), inplace=True) # 3. 分类数据one-hot编码 x = pd.get_dummies(x, columns=['Sex']) # 4. 划分数据集 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=79)

3.3 特征工程

绝大多数树模型都不需要特征标准化

3.4 模型训练

# 参数解释:criterion='gini',gini指数;max_depth=10,最大深度 estimator = DecisionTreeClassifier(criterion='gini', max_depth=10) estimator.fit(x_train, y_train)

3.5 模型预测

y_pre = estimator.predict(x_test)

3.6 模型评估

print(classification_report(y_test, y_pre))

3.7 可视化

plt.figure(figsize=(30,20)) # 设置图的大小:太大容易跑不出来 # 参数解释:filled=True,填充颜色;max_depth=10,最大深度 plot_tree(estimator, filled=True, max_depth=10) plt.savefig("./data/cart.png") plt.show()