共计 1170 个字符,预计需要花费 3 分钟才能阅读完成。
核心概念:基尼系数与信息增益
决策树的核心是选择最佳分割特征,CART 算法使用基尼系数(Gini Index)来衡量不纯度。基尼系数计算公式为:

Gini(D) = 1 - Σ(p_i)^2
其中 p_i 是第 i 类样本在数据集 D 中的比例。
信息增益(Information Gain)则是父节点的基尼系数与子节点基尼系数的加权差:
Gain = Gini(D) - Σ(|D_j|/|D|)*Gini(D_j)
新手常见 3 大误区
- 忽略特征缩放:连续型特征未标准化可能导致分裂点偏移
- 误解分类边界:将决策树的矩形边界误认为线性分割
- 过度依赖默认参数 :未调整
max_depth等参数导致模型过拟合
Python 实现全流程
1. 数据预处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
2. 模型训练
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X_train, y_train)
3. 可视化实现
from sklearn.tree import export_graphviz
import graphviz
dot_data = export_graphviz(clf, feature_names=feature_names,
filled=True, rounded=True)
graph = graphviz.Source(dot_data)
graph.render('decision_tree')
关键参数解析
max_depth:控制树的最大深度min_samples_split:节点分裂所需最小样本数ccp_alpha:用于代价复杂度剪枝
避坑实践指南
连续特征分箱
pd.cut(df['age'], bins=5) # 等宽分箱
预防过拟合
# 后剪枝示例
path = clf.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas = path.ccp_alphas
中文显示方案
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
延伸思考
尝试用 clf.feature_importances_ 生成带颜色深浅的特征重要性标注。对于多输出问题,建议使用 export_text() 先查看文本结构再设计可视化方案。
完整 Notebook 已上传 GitHub(伪链接):
https://github.com/example/decision-tree-visualization
正文完
