决策树 (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
🌳
树 2
🌳
... 树 N
⬇️
投票/平均
🗳️
⬇️
最终预测
🏆