随机森林(Random Forest)学习笔记
随机森林是一种强大且常用的机器学习算法,它结合了多棵决策树的智慧,从而得到更稳定、更准确的预测结果。
1. 随机森林是什么?
简单来说,随机森林就是:用很多“有点不同”的决策树一起投票(用于分类问题)或取平均值(用于回归问题),让最终的预测结果更稳定、更准确。
2. 一个好懂的比喻
想象一下,你要判断一棵树上的果子是不是苹果。
-
你只问了一个专家(单棵决策树):他可能会因为某些特殊情况(比如光线、角度等)而判断失误,这就像机器学习中的“过拟合”,模型在训练数据上表现很好,但在新数据上却不准确。
-
你问了100个来自不同背景的专家(多棵树):他们每个人都根据自己的经验和观察给出判断。如果大多数专家都说是苹果,那么这个果子是苹果的可能性就非常大。随机森林正是借鉴了这种**“集思广益,少数服从多数”**的思想。
更重要的是,这些“专家”之间是有差异的,他们不会都被同样的错误信息所迷惑。这种多样性是随机森林成功的关键。
3. 随机森林背后的两个“随机”
随机森林之所以强大,在于它引入了“随机性”,这使得每棵决策树都“有点不同”,从而避免了它们犯同样的错误。随机森林 = Bagging(套袋法) + 决策树 + 特征随机化。
3.1 样本随机(Bootstrap Sampling)
- 怎么做? 每棵树在训练时,不是使用全部的原始数据集,而是从原始数据中有放回地随机抽取一部分样本来训练。这意味着有些样本可能会被多次抽到,有些样本可能一次也抽不到。
- 好处? 这种做法让每棵树看到的数据视角不同,减少了树之间的相关性。就像不同的专家阅读了不同的案例集,他们的经验会更加多样化。
3.2 特征随机(Feature Subset Selection)
- 怎么做? 在构建每棵决策树的每个分裂节点时,算法不会考虑所有的特征,而是随机挑选一部分特征(例如,如果总共有100个特征,每次可能只随机选择10个)来寻找最佳的分裂点。
- 好处? 这种随机性让每棵树的结构更加不同,进一步减少了树之间的相关性,也有效防止了过拟合,特别是当某些特征非常突出时,避免了所有树都依赖于同一个特征。
4. 算法流程(分类版)
理解了随机森林的构成,我们来看看它是如何工作的:
-
设定森林规模:首先,你需要决定森林里有多少棵决策树(
n_estimators
参数)。通常,树的数量越多,结果越稳定,但计算时间也会增加。 -
构建每棵树:对于森林中的每一棵树,执行以下步骤:
- 样本抽样:从原始数据集中使用“Bootstrap”方法进行有放回的随机抽样,得到一个与原始数据集大小相同的新样本集。这个新样本集就是当前这棵树的训练数据。
- 特征选择:在每个节点进行分裂时,不是考虑所有可用特征,而是随机挑选
max_features
个特征作为候选,然后从这些候选特征中选择最佳的分裂特征和分裂点。 - 树的训练:根据决策树算法(如CART算法,通常使用基尼系数Gini或信息熵Entropy作为分裂标准),将这棵树训练到预设的最大深度(
max_depth
)或其他停止条件(如min_samples_split
、min_samples_leaf
)。
-
新样本预测:当有一个新的、未见过的数据样本需要预测时:
- 分类问题:将这个新样本输入到森林中的每一棵决策树中,每棵树都会给出一个分类结果。最终的预测结果是所有树的“多数投票”结果(即哪个类别被预测的次数最多)。
- 回归问题:同样将新样本输入到每一棵决策树中,每棵树都会给出一个预测值。最终的预测结果是所有树预测值的“平均值”。
5. 数学/统计学本质
随机森林的核心思想是一种叫做 Bagging (Bootstrap Aggregating) 的集成学习方法。
-
单棵决策树的特点:通常,单棵决策树模型具有高方差、低偏差的特点。这意味着它很容易在训练数据上表现得非常好(低偏差),但对训练数据的微小变动非常敏感,导致在新的、未见过的数据上表现不稳定(高方差),也就是容易“过拟合”。
-
随机森林的优化:通过结合多棵(高方差、低偏差的)决策树,并引入随机性(样本随机和特征随机),随机森林能够显著降低模型的方差。虽然这可能会略微增加一点偏差,但从整体来看,模型的总误差会大幅下降,从而提升了模型的泛化能力(在未见过的数据上表现良好的能力)。
误差来源拆分:
总误差 = 偏差² + 方差 + 噪声
随机森林的核心策略就是通过牺牲一点点偏差来大幅降低方差,最终实现总误差的最小化。
6. 重要的调参项
为了让随机森林模型达到最佳性能,我们需要对一些关键参数进行调整(调参)。以下是一些最重要的参数:
-
n_estimators
(树的数量):森林中决策树的数量。通常情况下,树的数量越多,模型的稳定性越好,结果也越准确。但同时,计算时间也会相应增加。需要根据实际情况权衡。 -
max_features
(每次分裂考虑的特征数):在每个节点分裂时,随机选择的特征子集的数量。- 分类问题:通常建议设置为特征总数的平方根(
sqrt(特征总数)
)。 - 回归问题:通常建议设置为特征总数的三分之一(
特征总数/3
)。
这个参数控制了每棵树的“多样性”,较小的值会增加树的随机性,有助于减少过拟合。
- 分类问题:通常建议设置为特征总数的平方根(
-
max_depth
(树的最大深度):每棵决策树允许生长的最大深度。限制树的深度可以有效防止过拟合。如果设置得太深,树可能会记住训练数据中的噪声;如果设置得太浅,树可能无法捕捉到数据中的复杂模式。 -
min_samples_split
/min_samples_leaf
(限制分裂所需的最小样本数):min_samples_split
:一个节点在分裂之前必须包含的最小样本数。如果一个节点的样本数少于这个值,它将不会分裂。min_samples_leaf
:一个叶子节点(即最终的决策结果节点)必须包含的最小样本数。这两个参数也能有效控制树的复杂度,防止过拟合。
-
bootstrap
(是否启用样本有放回抽样):一个布尔值,决定在构建每棵树时是否使用有放回抽样。默认通常为True
,这是随机森林的核心特性之一。如果设置为False
,则每棵树都使用全部数据集进行训练,这会降低树的多样性,可能导致过拟合。
6. 重要的调参项
为了让随机森林模型达到最佳性能,我们需要对一些关键参数进行调整(调参)。以下是一些重要的参数:
-
n_estimators
(树的数量):森林中决策树的数量。通常情况下,树的数量越多,模型的稳定性越好,但计算时间也会相应增加。需要根据实际情况权衡。 -
max_features
(每次分裂考虑的特征数):在每个节点分裂时,随机选择的特征子集的数量。- 分类问题:通常建议设置为特征总数的平方根(
sqrt(特征总数)
)。 - 回归问题:通常建议设置为特征总数的三分之一(
特征总数/3
)。
- 分类问题:通常建议设置为特征总数的平方根(
-
max_depth
(树的最大深度):每棵决策树允许生长的最大深度。限制深度可以有效防止过拟合,但过小的深度可能导致欠拟合。 -
min_samples_split
/min_samples_leaf
(限制分裂所需的最小样本数):min_samples_split
:一个节点在分裂之前必须包含的最小样本数。如果样本数小于这个值,节点将不再分裂。min_samples_leaf
:一个叶子节点(最终节点)必须包含的最小样本数。这可以防止生成过小的叶子节点,从而减少过拟合。
-
bootstrap
(是否启用样本有放回抽样):一个布尔值,决定在构建树时是否使用有放回抽样。默认通常为True
,这是随机森林的核心特性之一。
7. 优点
随机森林之所以广受欢迎,得益于其诸多优点:
- ✅ 抗过拟合能力强:相比于单棵决策树,随机森林通过集成多棵树并引入随机性,大大降低了过拟合的风险,模型泛化能力更强。
- ✅ 能处理高维、非线性、多类别数据:它对输入数据的类型不敏感,无论是连续型还是离散型特征,都能很好地处理。
- ✅ 不需要特征缩放:由于决策树是基于特征的顺序和阈值进行分裂的,而不是基于距离,因此不需要对特征进行标准化或归一化处理。
- ✅ 可以给出特征重要性排序:随机森林在训练过程中可以评估每个特征对模型预测的贡献程度,从而给出特征的重要性排名,这对于特征选择和理解数据非常有帮助。
- ✅ 对缺失值和异常值相对鲁棒:由于每棵树只使用部分样本和特征,即使数据中存在缺失值或异常值,也不会对整个模型造成太大影响。
8. 缺点
尽管随机森林有很多优点,但它也并非完美无缺:
- ❌ 模型比较大,推理比单棵树慢:由于需要构建和存储多棵决策树,模型的体积会比较大。在进行预测时,需要遍历所有树并汇总结果,因此推理速度会比单棵决策树慢。
- ❌ 可解释性差:相比于单棵决策树清晰的决策路径,随机森林的“黑箱”特性使其内部决策过程难以直观理解。你很难像解释一棵树那样,解释随机森林是如何做出某个具体判断的。
- ❌ 树数很多时内存占用大:当
n_estimators
设置得非常大时,模型会占用更多的内存资源。 - ❌ 样本极不平衡时,少数类可能被忽略:如果数据集中某个类别的样本数量非常少,随机森林在训练时可能会倾向于预测多数类,从而忽略少数类。这时可能需要通过调整
class_weight
参数或采用其他采样方法来解决。
9. 常见应用场景
随机森林因其出色的性能和鲁棒性,在许多领域都有广泛应用:
- 特征选择:根据模型输出的特征重要性,可以帮助我们识别数据集中最重要的特征,用于后续的模型优化或数据理解。
- 工业/金融风控:在风险评估、欺诈检测等场景中,随机森林的稳健性和抗噪能力使其成为理想选择。
- 医学诊断:能够处理混合型特征(如患者的年龄、性别、化验结果等),在疾病诊断和预后预测中发挥作用。
- 推荐系统中的候选集过滤:在海量的商品或内容中,快速筛选出用户可能感兴趣的候选集。
- 高维小样本的基线模型:在数据维度很高但样本量相对较少的情况下,随机森林通常能提供一个不错的基线性能,且通常不需要进行过多的参数调整。
10. 小结
- 决策树:就像一个人凭经验做判断,容易因为个人偏好或片面信息而“偏激”或“过拟合”。
- 随机森林:则像一群背景不同、各有专长的人一起商量、投票或平均意见,最终得出的“共识”会更稳健、更可靠。
- 随机性:是随机森林的灵魂,它让每个“专家”的视角不同,避免了大家同时犯同样的错误。
- 投票/平均:这种机制能够有效地把个别“怪异”或错误的观点平均掉,从而得到一个更稳定、更准确的结论。
随机森林是一种非常实用的集成学习算法,它通过“集体智慧”的力量,将多个弱学习器(决策树)组合成一个强大的模型,在实际应用中表现出色。