泰坦尼克号案例之数据集介绍
1 课程概览
本课介绍泰坦尼克号生存预测案例的数据集和CART决策树API。重点讲解DecisionTreeClassifier的参数(criterion、min_samples_split、min_samples_leaf、max_depth)和泰坦尼克号数据集的背景。
2 核心概念与定义
- DecisionTreeClassifier:sklearn中的决策树分类器API。
- criterion:特征选择标准(gini或entropy)。
- min_samples_split:内部节点再划分所需最小样本数。
- min_samples_leaf:叶子节点最少样本数。
- max_depth:决策树最大深度。
3 算法与模型详解
3.1 决策树API
导入:
from sklearn.tree import DecisionTreeClassifier
说明:这是CART决策树
3.2 重要参数
criterion(特征选择标准)
gini:使用基尼值(CART算法,默认)entropy:使用信息增益(ID3算法)
说明:
- 默认gini,即CART算法
- 不同算法对应不同决策树(C4.5、ID3或CART)
min_samples_split(内部节点再划分最小样本数)
- 含义:内部节点再划分所需的最小样本数
- 示例:设置为7,若某节点只有5个样本,则不再划分
- 作用:控制树的生长,防止过拟合
min_samples_leaf(叶子节点最少样本数)
- 含义:叶子节点至少需要的样本数
- 示例:设置为3,叶子节点至少3个样本
- 作用:防止叶子节点样本过少
max_depth(最大深度)
- 含义:决策树的最大深度
- 作用:限制树的深度,防止过拟合
3.3 参数使用建议
常用参数:
min_samples_split:最常用,设置如10,不够10个绝对不分max_depth:限制深度
3.4 泰坦尼克号案例背景
历史背景:
- 1912年4月15日
- 泰坦尼克号与冰山相撞后沉没
- 没有准备足够的救生艇
- 幸存者存在运气因素
幸存规律:
- 妇女儿童更容易生存
- 上流社会更容易生存
目标:运用机器学习预测哪些乘客可幸免于难
3.5 数据集介绍
数据文件:train.csv
数据规模:891行 × 12列
特征列:
- Pclass:船舱等级
- Sex:性别
- Age:年龄(有缺失值)
- ...其他列
标签列:Survived(存活状态)
缺失值:
- Age列有缺失(约200个)
- Cabin列有缺失
4 代码示例
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
# 1. 决策树API介绍
print("=== 决策树API参数 ===")
clf = DecisionTreeClassifier()
print(clf)
# 2. 参数说明
print("\n=== 重要参数 ===")
print("criterion: 特征选择标准")
print(" - 'gini': 基尼值(CART,默认)")
print(" - 'entropy': 信息增益(ID3)")
print("min_samples_split: 内部节点再划分最小样本数")
print("min_samples_leaf: 叶子节点最少样本数")
print("max_depth: 最大深度")
# 3. 不同参数的决策树
print("\n=== 不同参数的决策树 ===")
# CART(默认)
cart = DecisionTreeClassifier(criterion='gini', random_state=42)
print(f"CART: {cart}")
# ID3
id3 = DecisionTreeClassifier(criterion='entropy', random_state=42)
print(f"ID3: {id3}")
# 带剪枝参数的决策树
pruned = DecisionTreeClassifier(
criterion='gini',
max_depth=5,
min_samples_split=10,
min_samples_leaf=5,
random_state=42
)
print(f"带剪枝: {pruned}")
# 4. 加载泰坦尼克号数据集
print("\n=== 泰坦尼克号数据集 ===")
data = pd.read_csv('data/train.csv')
print(f"数据形状: {data.shape}")
print(f"\n前5行:")
print(data.head())
print(f"\n数据信息:")
print(data.info())
print(f"\n缺失值统计:")
print(data.isnull().sum())
输出示例:
=== 决策树API参数 ===
DecisionTreeClassifier()
=== 重要参数 ===
criterion: 特征选择标准
- 'gini': 基尼值(CART,默认)
- 'entropy': 信息增益(ID3)
min_samples_split: 内部节点再划分最小样本数
min_samples_leaf: 叶子节点最少样本数
max_depth: 最大深度
=== 泰坦尼克号数据集 ===
数据形状: (891, 12)
缺失值统计:
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
5 重难点与易错提醒
- ❗重点:DecisionTreeClassifier默认使用gini(CART算法)。
- ❗重点:criterion='entropy'对应ID3算法。
- ❗重点:min_samples_split控制内部节点再划分。
- ❗重点:max_depth限制树的深度,防止过拟合。
- ⚠️易错:混淆gini和entropy对应的算法。
- ⚠️易错:参数设置不当导致过拟合或欠拟合。
- 💡深入理解:通过参数控制树的复杂度。
6 课堂问答精选
Q: DecisionTreeClassifier的criterion参数有什么作用?
A: criterion参数指定特征选择标准:
- 'gini'(默认):使用基尼值,对应CART算法
- 'entropy':使用信息增益,对应ID3算法 不同参数对应不同的决策树算法。
Q: min_samples_split和min_samples_leaf有什么区别?
A:
- min_samples_split:内部节点再划分所需的最小样本数。例如设置为7,若某节点只有5个样本,则不再划分。
- min_samples_leaf:叶子节点至少需要的样本数。例如设置为3,叶子节点至少3个样本。 两者都用于控制树的生长,防止过拟合。
7 本课小结
- DecisionTreeClassifier:CART决策树API。
- criterion:gini(CART)或entropy(ID3)。
- min_samples_split:内部节点再划分最小样本数。
- min_samples_leaf:叶子节点最少样本数。
- max_depth:最大深度。
- 泰坦尼克号案例:预测乘客生存。
8 延伸思考与实践
- 实践:加载泰坦尼克号数据集,查看数据结构。
- 预习:泰坦尼克号案例代码演示。
- 思考:如何选择合适的参数防止过拟合?