决策树模型实战指南:从数据预处理到预测的完整流程解析

1次阅读
没有评论

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

image.webp

为什么选择决策树?

决策树是机器学习中最直观的算法之一,特别适合刚入门的新手。它最大的优势是模型可解释性强——训练完成后可以直接看到决策规则,就像看流程图一样清晰。另外,决策树对数据的要求比较宽松:

决策树模型实战指南:从数据预处理到预测的完整流程解析

  • 不需要做特征缩放(比如归一化)
  • 能同时处理数值型和类别型特征
  • 自动进行特征选择

这些特点让它成为探索性分析和小规模预测的首选工具。我在第一次接触机器学习项目时,就是通过决策树快速理解业务规律的。

数据预处理实战

1. 处理缺失值

实际数据经常存在缺失,决策树虽然能处理缺失值,但提前处理效果更好。这里演示两种常用方法:

# 方法 1:用中位数 / 众数填充
from sklearn.impute import SimpleImputer
num_imputer = SimpleImputer(strategy='median')
data[['年龄','收入']] = num_imputer.fit_transform(data[['年龄','收入']])

# 方法 2:直接删除缺失严重的列
data.drop(columns=['缺失率超过 80% 的列'], inplace=True)

2. 编码分类变量

决策树需要将文字类别转换为数字,注意区分有序变量和名义变量:

# 有序变量(如学历:小学 < 初中 < 高中)from sklearn.preprocessing import OrdinalEncoder
edu_level = [['小学','初中','高中','大学']]
data['学历'] = OrdinalEncoder(categories=edu_level).fit_transform(data[['学历']])

# 名义变量(如城市:北京 / 上海 / 广州无大小关系)data = pd.get_dummies(data, columns=['城市'])  # 独热编码 

3. 特征选择

用方差过滤和相关性分析初步筛选特征:

# 移除低方差特征
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold(threshold=0.1)
data = selector.fit_transform(data)

# 可视化特征相关性
import seaborn as sns
sns.heatmap(data.corr(), annot=True)

模型训练关键细节

1. 选择分裂标准

主要考虑两个指标,根据需求选择:

  • 基尼系数(Gini):计算更快,适合大多数情况
  • 信息增益(Entropy):对不平衡数据更敏感
from sklearn.tree import DecisionTreeClassifier

# 两种分裂标准对比
tree_gini = DecisionTreeClassifier(criterion='gini') 
tree_entropy = DecisionTreeClassifier(criterion='entropy')

2. 关键参数调优

这些参数直接影响模型效果,建议先用默认值跑通流程再调整:

model = DecisionTreeClassifier(
    max_depth=3,       # 控制树深度防止过拟合
    min_samples_leaf=5, # 叶节点最小样本数
    class_weight='balanced'  # 处理类别不平衡
)

模型评估与可视化

1. 基础评估指标

不要只看准确率,特别是不平衡数据时:

from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred, target_names=['类别 1','类别 2']))

2. 可视化决策树

这可能是决策树最酷的功能——直接看到决策逻辑:

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

plt.figure(figsize=(12,8))
plot_tree(model, feature_names=X.columns, 
          class_names=['负样本','正样本'], filled=True)
plt.show()

新手避坑指南

根据我踩过的坑,总结 5 个常见问题:

  1. 过拟合问题
  2. 现象:训练集准确率 100%,测试集只有 60%
  3. 解决:限制 max_depth、设置 min_samples_split

  4. 忽略特征重要性

  5. 现象:所有特征都用,但实际只有少数有用
  6. 解决:训练后查看 model.feature_importances_

  7. 类别不平衡处理不当

  8. 现象:模型总是预测多数类
  9. 解决:设置 class_weight 参数或过采样

  10. 误用特征编码

  11. 现象:把有序变量当名义变量处理
  12. 解决:区分 OrdinalEncoder 和 OneHotEncoder

  13. 忽视业务解释性

  14. 现象:模型效果好但业务方看不懂
  15. 解决:用 plot_tree 可视化并标注业务含义

完整代码与思考题

示例 Notebook 链接 (包含可运行数据集)

最后留几个思考方向:
1. 如果某个重要特征存在大量缺失值,除了删除还能如何处理?
2. 对比决策树和随机森林在相同数据上的表现差异
3. 当树的深度达到多少时开始出现过拟合迹象?如何检测?

希望这篇指南能帮你避开我当年踩过的坑。决策树就像瑞士军刀——简单但实用,掌握后能解决大部分基础问题。建议先完整跑通一遍流程,再逐步深入调参优化。

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