CART决策树做表:从原理到实战避坑指南

1次阅读
没有评论

共计 1434 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

核心概念:CART 决策树如何做选择

决策树就像做选择题:每次根据一个特征把数据分成更 ” 纯 ” 的子集。CART(Classification and Regression Trees)使用基尼系数 (Gini Index) 来衡量不纯度:

CART 决策树做表:从原理到实战避坑指南

$$ Gini = 1 – \sum_{i=1}^{n}(p_i)^2 $$

  • 基尼系数:计算简单,偏向于分割出大的分区(适合类别分布均匀的场景)
  • 信息增益:基于信息熵,对类别分布不平衡的数据更敏感

实际使用中,80% 的情况用默认的基尼系数就够用——这也是 sklearn 的默认设置。

表格数据的三大杀手

  1. 类别不平衡:比如欺诈检测中正常交易占 99%
  2. 对策:class_weight=’balanced’ 参数或过采样

  3. 高基数特征:像用户 ID 这种唯一值多的特征

  4. 对策:直接删除或用频次编码

  5. 混合类型数据:数值型和类别型特征共存

  6. 对策:ColumnTransformer 分列处理

从原始数据到预测的完整流程

数据预处理实战

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

# 假设 df 包含数值型特征和类别型特征
num_cols = ['age', 'income']
cat_cols = ['gender', 'city']

# 构建处理管道
preprocessor = ColumnTransformer(
    transformers=[('num', 'passthrough', num_cols),
        ('cat', OneHotEncoder(handle_unknown='ignore'), cat_cols)
    ])

建树与调参关键点

from sklearn.tree import DecisionTreeClassifier

# 重要参数说明:# max_depth:树的最大深度,从 3 开始尝试
# min_samples_leaf:叶节点最小样本数,建议≥5
model = DecisionTreeClassifier(
    max_depth=5,
    min_samples_leaf=20,
    class_weight='balanced',
    random_state=42
)

模型评估:超越准确率的视角

当正样本只有 1% 时,99% 的准确率可能是假象:

  1. 混淆矩阵 看具体错分情况
  2. 召回率 (Recall) 对欺诈检测更重要

  3. ROC 曲线 比较不同阈值的效果

  4. 面积(AUC)>0.9 说明模型很好

六个血泪教训

  1. 过拟合陷阱:树深度每增加 1 层,所需样本量翻倍
  2. 通过学习曲线观察验证集表现

  3. 缺失值处理:

  4. 简单方法:用中位数 / 众数填充
  5. 高级方法:新增 ” 是否缺失 ” 作为特征

  6. 部署优化:

  7. 用 export_text() 代替图形化显示
  8. 限制树深度≤5 以保证可解释性

  9. 类别特征:

  10. 避免直接用 LabelEncoder(会引入虚假大小关系)

  11. 计算效率:

  12. 大数据集使用 max_features 参数

  13. 特征重要性:

  14. 警惕高基数特征的虚假重要性

进阶方向:从单棵树到森林

尝试对比实验:
1. 相同数据先用 CART 单棵树
2. 再用 RandomForest(本质上就是 CART 的集合)
3. 观察两者的:
– 特征重要性排序是否一致
– 测试集表现差异
– 训练时间对比

这种对比能直观理解集成学习的效果。

写在最后

决策树最大的优势是 解释性强 ——当业务方问 ” 为什么拒绝这个客户 ” 时,你能清楚地指出决策路径。建议把最终模型用export_graphviz 可视化,配合业务知识优化特征选择。记住:没有完美的模型,只有最适合当前业务阶段的解决方案。

正文完
 0
评论(没有评论)