你可以把它想象成一个问问题的流程图:
是否下雨? → 是 → 带伞
↘ 否 → 不带伞
🎯 适用任务
✅ 分类任务(如判断客户是否流失)
✅ 回归任务(如预测房价)
🧠 决策树的构建原理
构建过程就是不断“选一个最好的特征”进行划分。
🔍 核心概念:
概念 | 说明 |
---|---|
信息增益 | 分类中用于衡量某个划分的好坏,越大越好(比如 ID3 算法) |
基尼系数 | 衡量数据纯度的标准(比如 CART 算法) |
递归分裂 | 不断对子节点重复这个过程,直到满足停止条件 |
✅ Python 实战(用 scikit-learn 构建分类决策树)
🧪 案例:泰坦尼克号生存预测
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import tree
import matplotlib.pyplot as plt
# 加载鸢尾花分类数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练和测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# 创建决策树模型并训练
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X_train, y_train)
# 打印准确率
print("准确率:", clf.score(X_test, y_test))
# 可视化决策树
plt.figure(figsize=(12, 8))
tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
📈 优缺点总结
✅ 优点 | ❌ 缺点 |
---|---|
简单直观,易于理解和可视化 | 容易过拟合,泛化能力差 |
不需要标准化特征 | 对小变化敏感(数据变一点,树会变) |
适用于数值型或类别型特征 | 不适合非常深的树,效率低 |
🔧 解决过拟合的方法:
- 限制树的深度(
max_depth
) - 设置最小样本划分数(
min_samples_split
) - 使用集成方法如 随机森林(Random Forest)、XGBoost
🔥 应用领域
- 医疗:疾病诊断
- 金融:信用评分
- 电商:用户推荐
- 教育:学生成绩分析
🤝 拓展推荐:集成学习方法
方法名 | 思想 | 特点 |
---|---|---|
随机森林 | 多棵决策树投票(Bagging) | 更稳健,抗过拟合 |
XGBoost | 前一棵树的误差给后一棵树修正(Boosting) | 精度更高,Kaggle 大杀器 |
如果你想,我可以带你用决策树做一个小项目,比如预测学生是否会及格,或者用随机森林优化模型。想试试吗?🌱😄
发表回复