Bagging算法_随机森林Random_Forest

Bagging是一种通过自助采样技术增强泛化能力的集成学习方法,通过有放回地从训练数据集中抽样构建多个独立的学习器。随机森林是基于决策树的Bagging应用,具有高准确度和处理大量变量的能力,但也存在解释性差和可能过拟合的问题。

Bagging

BaggingBaggingBagging是并行式集成学习方法最著名的代表,这个名字是由BootstrapAGGregatINGBootstrap AGGregatINGBootstrapAGGregatING而来,顾名思义,该算法由BooststrapBooststrapBooststrapAggregatingAggregatingAggregating两部分组成。

欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立,一种可能的做法是对训练样本进行采样,产生若干不同的子集,再从每个数据子集中训练处一个学习器。同时,为了获得更好的集成,每个个体学习器不能太差。如果每次采样出的子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至不足以进行有效学习,这显然无法确保产生出比较好的基学习器。

BaggingBaggingBagging为解决这个问题,使用自助取样(BootstrapingBootstrapingBootstraping)。给定包含mmm个样本的数据集,我们先随机取出一个样本放入采样集中,再将该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过mmm次随机采样操作,我们得到含mmm个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现,可以做一个简单的估计,样本在mmm次采样中始终不被采到的概率是(1−1m)m{(1-\frac{1}{m})}^m(1m1)m,求极限得到:
lim⁡m→∞(1−1m)m→1e≈0.368\lim_{m \to \infty }{(1-\frac{1}{m} )}^m \to \frac{1}{e} \approx 0.368mlim(1m1)me10.368
可知,初始训练集中约有63.2%63.2\%63.2%的样本出现在采样集中。

算法:

设有一个大小为NNN的训练数据集,每次从该数据集中有放回的选出大小为MMM的子数据集,一共选KKK次;
根据这KKK个子数据集,训练学习出KKK个模型;
使用这KKK个模型进行预测,再通过取平均值或者多数分类的方式,得到最后的预测结果。

随机森林 Random Forest

随机森林简称RFRFRF,是以决策树为估计器的BaggingBaggingBagging算法。

算法:

假设训练集TTT的大小为NNN,特征数为MMM,随机森林的大小为KKK
遍历RFRFRF的大小KKK次:
从训练集T中有放回抽样的方式,取样NNN次形成一个新子训练集DDD
随机选择mmm个特征,其中m<Mm<Mm<M
使用新的训练集DDDmmm个特征,学习出一个完整的决策树
得到随机森林。

RF的优点

  1. 针对很多任务可以产生高准确度的分类器;
  2. 可以处理大量的输入变量;
  3. 可以在决定类别时,给出变量的重要性;
  4. 在建造森林时,可以在内部对于一般化后的误差产生不偏差的估计;
  5. 包含一个好方法可以估计丢失的资料,并且如果有很大一部分的资料丢失,仍可以维持准确度;
  6. 对于不平衡的分类资料集来说,可以平衡误差;
  7. 可被延伸应用在未标记的资料上,这类资料通常是使用非监督式聚类,也可以侦测偏离者和观看资料;
  8. 学习过程很快速。

RF的缺点

  1. 不可解释性;
  2. 在噪音较大的任务上会过拟合;
  3. 在多分类任务中,RF可能无法提高基学习器的准确性。
### Bagging算法原理 Bagging(Bootstrap Aggregating)是一种集成学习方法,其核心思想是对原始数据集进行有放回的重采样,生成多个不同的子数据集。通过对每个子数据集独立训练得到若干个基学习器,并将这些基学习器的结果组合起来形成最终预测结果[^1]。 具体来说,在分类任务中,Bagging通常采用简单多数投票法决定最终类别;而在回归任务中,则常使用算术平均法计算最终输出值[^3]。这种方法能够有效减少单个模型因样本扰动带来的波动,从而显著降低模型的方差。 #### 随机森林Bagging的关系 随机森林Random Forest, RF)可以视为Bagging的一种特例或扩展版本。它不仅继承了Bagging的核心思想——通过多次抽样构建多样化的基学习器集合并聚合它们的预测结果,还引入了一个额外的关键机制:特征随机选择。 在传统Bagging框架下,每次分裂节点时会考虑所有可能的特征维度;然而,在随机森林中,当寻找最佳分割点时,仅允许从当前候选集中随机选取部分特征参与竞争最优划分标准[^2]。这一改进使得不同树木之间差异更大,进而增强了整个森林整体表现稳定性以及抗过拟合能力。 ### 实现过程概述 以下是基于上述理论描述的一个简化版Python实现示例: ```python from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split import numpy as np class SimpleBagging: def __init__(self, n_estimators=10): self.n_estimators = n_estimators self.estimators = [] def fit(self, X, y): for _ in range(self.n_estimators): bootstrap_indices = np.random.choice(len(X), size=len(X), replace=True) X_bootstrap = X[bootstrap_indices] y_bootstrap = y[bootstrap_indices] estimator = DecisionTreeClassifier() estimator.fit(X_bootstrap, y_bootstrap) self.estimators.append(estimator) def predict(self, X): predictions = [] for estimator in self.estimators: prediction = estimator.predict(X).reshape(-1, 1) predictions.append(prediction) combined_predictions = np.hstack(predictions) final_prediction = np.apply_along_axis( lambda row: np.bincount(row.astype(int)).argmax(), axis=1, arr=combined_predictions ) return final_prediction if __name__ == "__main__": data = load_iris() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3, random_state=42) bagging_model = SimpleBagging(n_estimators=50) bagging_model.fit(X_train, y_train) preds = bagging_model.predict(X_test) accuracy = (preds == y_test).mean() print(f"Accuracy on Test Set: {accuracy:.4f}") ``` 此代码片段展示了如何手动创建一个简易形式下的Bagging分类器,并应用于Iris花卉数据集之上完成多类别区分任务演示目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值