决策树与随机森林
决策树是一种非常直观的模型,它模仿人类的决策过程。随机森林则通过集成多棵决策树,构建出更强大、更稳健的模型,是应用最广泛的机器学习算法之一。
决策树 (Decision Tree)
核心思想:像一个流程图,每个内部节点代表一个特征的“问题”,每个分支代表一个“答案”,而每个叶子节点代表一个最终的决策(类别)。
如何分裂?模型在构建时,会选择一个“最佳”特征来分裂数据。评判“最佳”的标准通常是信息增益 (Information Gain) 或 基尼不纯度 (Gini Impurity),目标是让分裂后的数据尽可能地“纯净”(即属于同一类别的样本尽可能多地被分在一起)。
动手试试:
下面是一个经典的决策树示例,用于决定“今天是否去打球”。观察模型是如何根据天气、湿度等条件一步步做出决策的。
from sklearn.tree import DecisionTreeClassifier
# X: 特征 [天气, 温度, 湿度, ...]
# y: 标签 [去打球, 不去打球]
X, y = ...
# 创建并训练决策树模型
# criterion='gini' 或 'entropy' (信息增益)
model = DecisionTreeClassifier(criterion='gini')
model.fit(X, y)
天气?
晴天
阴天
雨天
湿度?
去打球
不去打球
去打球
不去打球
随机森林 (Random Forest)
核心思想:“三个臭皮匠,赛过诸葛亮”。随机森林通过构建大量的决策树(“臭皮匠”)并让它们“投票”,来得到一个比任何单棵树都更准确、更稳健的最终决策(“诸葛亮”)。这是一种集成学习 (Ensemble Learning) 的思想。
如何实现“随机”?它通过 Bagging (Bootstrap Aggregating) 策略来保证每棵树的差异性:1. 对训练数据进行有放回的随机抽样,为每棵树提供不同的“教材”;2. 在每个节点分裂时,只从所有特征中随机选择一部分来进行比较。
动手试试:
下图生动地展示了随机森林的工作流程。不同的数据子集和特征子集被用来训练多棵独立的决策树,最终通过投票得出结论。
from sklearn.ensemble import RandomForestClassifier
# X, y: 与决策树相同
X, y = ...
# 创建并训练随机森林模型
# n_estimators: 森林中树的数量
model = RandomForestClassifier(n_estimators=100)
model.fit(X, y)
原始数据
📊
⬇️
🌳
树 1
树 1
🌳
树 2
树 2
🌳
... 树 N
... 树 N
⬇️
投票/平均
🗳️
⬇️
最终预测
🏆