共计 1431 个字符,预计需要花费 4 分钟才能阅读完成。
背景介绍
决策树是一种直观的机器学习算法,通过树状结构模拟人类决策过程。它的核心思想是通过一系列 if-then 规则对数据进行递归分割,直到达到终止条件。决策树广泛应用于信用评分、疾病诊断等分类问题,以及销量预测等回归任务。

- 优点 :模型可解释性强、无需特征缩放、能处理混合类型数据
- 缺点 :容易过拟合、对数据分布敏感
环境准备
# 基础工具库
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
模型构建实战
-
数据准备
# 示例使用鸢尾花数据集 from sklearn.datasets import load_iris 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) -
基础模型训练
# 创建决策树分类器(默认参数)clf = DecisionTreeClassifier(random_state=42) clf.fit(X_train, y_train) # 预测并评估 preds = clf.predict(X_test) print(f"基础模型准确率:{accuracy_score(y_test, preds):.2f}")
参数调优实验
关键参数对比
| 参数名 | 作用 | 典型取值 |
|---|---|---|
| max_depth | 树的最大深度 | 3-10 |
| min_samples_split | 节点分裂最小样本数 | 2-10 |
| min_samples_leaf | 叶节点最小样本数 | 1-5 |
实验代码示例 :
for depth in [3, 5, 7, None]:
model = DecisionTreeClassifier(max_depth=depth, random_state=42)
model.fit(X_train, y_train)
acc = model.score(X_test, y_test)
print(f"max_depth={depth} 时准确率:{acc:.3f}")
避坑指南
- 过拟合问题 :
- 现象:训练集准确率 100% 但测试集差
-
解决方案:设置 max_depth/prune 参数
-
类别不平衡 :
- 现象:少数类识别率低
-
解决方案:使用 class_weight 参数
-
随机性控制 :
- 现象:相同代码结果不一致
- 解决方案:固定 random_state
最佳实践
- 优先使用 GridSearchCV 进行自动化调参
- 可视化决策树辅助分析(使用 sklearn.tree.plot_tree)
- 重要特征分析:
pd.Series(clf.feature_importances_, index=iris.feature_names).plot.barh()
进阶思考
- 尝试将决策树与 Bagging/Boosting 方法结合
- 实验不同分裂标准(gini vs entropy)的效果差异
- 思考如何处理决策树对数据微小变化敏感的问题
总结建议
建议读者在泰坦尼克数据集等真实场景中实践,特别注意:
– 对分类特征进行适当编码
– 通过交叉验证评估模型稳定性
– 记录不同参数组合的实验结果
完整代码示例已上传至 GitHub 仓库(示例链接),包含更多注释和可视化代码
正文完
