共计 1864 个字符,预计需要花费 5 分钟才能阅读完成。
Iris 数据集简介
Iris 数据集是机器学习的经典入门数据集,包含 150 个样本,每个样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和 1 个类别标签(Setosa、Versicolor、Virginica)。这个数据集的特点是:

- 特征均为连续数值型
- 类别完全平衡(每类 50 个样本)
- 特征与类别间存在明显相关性
决策树算法原理
决策树通过递归地将数据划分为更纯净的子集来进行分类。主要包含两个步骤:
- 特征选择 :根据某种标准(如信息增益、基尼指数)选择最佳分裂特征
- 节点分裂 :按照选定特征的值将数据划分到不同子节点
算法会递归执行这两个步骤,直到满足停止条件(如节点纯度达到阈值、达到最大深度等)。
Python 实现全流程
1. 数据准备
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 划分训练集和测试集(7:3 比例)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
2. 模型训练
from sklearn.tree import DecisionTreeClassifier
# 创建决策树模型
# criterion: 分裂标准(gini/entropy)# max_depth: 树的最大深度
# min_samples_split: 节点分裂所需最小样本数
model = DecisionTreeClassifier(criterion='gini',
max_depth=3,
min_samples_split=2,
random_state=42)
# 训练模型
model.fit(X_train, y_train)
3. 模型评估
from sklearn.metrics import accuracy_score, classification_report
# 预测测试集
y_pred = model.predict(X_test)
# 计算准确率
print(f"准确率: {accuracy_score(y_test, y_pred):.2f}")
# 打印分类报告
print(classification_report(y_test, y_pred))
关键参数解析
- criterion: 分裂标准
- ‘gini’:基尼不纯度(计算更快)
-
‘entropy’:信息增益(理论上更精确)
-
max_depth: 控制树的最大深度
- 值太小可能导致欠拟合
-
值太大容易过拟合
-
min_samples_split: 节点继续分裂所需的最小样本数
- 防止对极少数样本做过细划分
性能优化建议
避免过拟合
- 使用交叉验证选择最优参数
- 设置合理的 max_depth
- 添加 min_samples_split/min_samples_leaf 约束
- 使用剪枝(sklearn 中通过 ccp_alpha 参数)
分裂标准对比
# 测试不同分裂标准
for criterion in ['gini', 'entropy']:
model = DecisionTreeClassifier(criterion=criterion, random_state=42)
model.fit(X_train, y_train)
acc = model.score(X_test, y_test)
print(f"{criterion} 标准准确率: {acc:.3f}")
常见问题解答
1. 需要做特征缩放吗?
决策树不需要特征缩放,因为它基于特征值比较做分裂,不受特征尺度影响。
2. 如何处理类别不平衡?
- 使用 class_weight 参数调整类别权重
- 对少数类样本上采样或多数类下采样
3. 为什么测试集准确率波动大?
- 检查 random_state 是否固定
- 可能 max_depth 设置过大导致过拟合
- 尝试增加测试集比例
扩展应用
- 尝试在更大规模的数据集(如葡萄酒分类数据集)上应用
- 比较决策树与 KNN、SVM 等算法的效果
- 可视化决策树(使用 sklearn.tree.plot_tree)
学习资源推荐
- 《机器学习实战》第 3 章
- scikit-learn 官方文档(决策树部分)
- Kaggle 上的决策树入门教程
总结
通过本实战,我们完成了从数据加载到模型评估的完整流程,并深入理解了决策树的关键参数和调优方法。Iris 数据集作为经典案例,很好地展示了决策树直观、易解释的特点。建议读者尝试调整不同参数,观察模型性能变化,这是掌握算法最有效的方式。
正文完
发表至: 未分类
近一天内
