随机森林与极端随机森林

极端随机森林(ET)是一种类似随机森林的集成学习算法,它使用全部训练样本而非随机抽样,并且在特征选择上采取完全随机的方式。与随机森林相比,ET在每个节点的划分上更具有随机性,导致单棵树的预测可能不准确,但通过集成多棵树,可以得到强大的预测能力。ET的预测误差计算也利用了全部训练样本,即使样本相同,由于分叉属性的随机性,预测结果也会有所不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ET或Extra-Trees(Extremely randomized trees,极端随机树)是由PierreGeurts等人于2006年提出。
该算法与随机森林算法十分相似,都是由许多决策树构成。

极端随机森林与随机森林有两点主要的区别:

1、随机森林应用的是Bagging模型(随机抽取样本),而极端随机森林是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本;

2、随机森林是在一个随机子集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。

对于第2点的不同,我们再做详细的介绍。

当特征属性是类别的形式时(使用基尼系数进行划分):

随机选择具有某些类别的样本为左分支,而把具有其他类别的样本作为右分支;

当特征属性是数值的形式时(使用均方误差进行划分):

1 随机选择一个处于该特征属性的最大值和最小值之间的任意数,
2 当样本的该特征属性值大于该值时,作为左分支,当小于该值时,作为右分支。

这样就实现了在该特征属性下把样本随机分配到两个分支上的目的。
然后计算此时的分叉值。遍历节点内的所有特征属性,按上述方法得到所有特征属性的分叉值,我们选择分叉值最大的那种形式实现对该节点的分叉。

从上面的介绍可以看出,这种方法比随机森林的随机性更强。

对于某棵决策树,由于它的最佳分叉属性是随机选择的,因此用它的预测结果往往是不准确的,但多棵决策树组合在一起,就可以达到很好的预测效果。

当ET构建好了以后,我们也可以应用全部的训练样本来得到该ET的预测误差。
这是因为尽管构建决策树和预测应用的是同一个训练样本集,但由于最佳分叉属性是随机选择的,所以我们仍然会得到完全不同的预测结果,用该预测结果就可以与样本的真实响应值比较,从而得到预测误差。

如果与随机森林相类比的话,在ET中,全部训练样本都是OOB样本,所以计算ET的预测误差,也就是计算这个OOB误差。

在这里,我们仅仅介绍了ET算法与随机森林的不同之处,ET算法的其他内容(如预测、OOB误差的计算)与随机森林是完全相同的,具体内容请看关于随机森林的介绍。

总结:
相比较随机森林来讲,极端随机森林主要的区别是:

  1. 极端随机森林使用全部样本数据
  2. 极端随机森林的最佳分叉属性是随机选择的

参考:
https://blog.csdn.net/zhaocj/article/details/51648966
https://blog.csdn.net/xbmatrix/article/details/69488867

### 极端随机森林算法在回归任务中的应用 极端随机森林(Extremely Randomized Trees, ERT)是一种集成学习方法,属于决策树模型的一种变体。标准的随机森林不同的是,在构建每棵决策树时,ERT不仅会随机选择特征子集来分裂节点,还会随机选取分割阈值[^1]。 对于回归任务而言,极端随机森林通过以下方式工作: - **数据准备**:输入训练样本集合 \( D=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\} \),其中 \( x_i \) 表示第 i 个实例的属性向量,\( y_i \) 是对应的连续型目标变量。 - **模型建立**:创建多棵树构成的森林。每一棵树都是独立生长出来的,并且在整个过程中不会进行剪枝操作。当决定如何划分内部结点时,不是寻找最优切分点而是完全随机地挑选一个或几个特征以及这些被选中特征上的任意值作为测试条件。 - **预测过程**:给定一个新的观测值 \( x_{new} \),将其传递到森林里的每一棵已训练好的树上得到各自的输出结果;最后取所有单棵树预测值得平均数作为最终的结果。 下面是一个简单的 Python 实现例子,使用 `sklearn` 库中的 `ExtraTreesRegressor` 类来进行极端随机森林回归分析: ```python from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split from sklearn.ensemble import ExtraTreesRegressor import numpy as np # 创建模拟数据集 X, y = make_regression(n_samples=1000, n_features=20, noise=0.1) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25) # 初始化并拟合模型 ert_regressor = ExtraTreesRegressor(n_estimators=100) ert_regressor.fit(X_train, y_train) # 预测新数据 predictions = ert_regressor.predict(X_test) print('真实值:', y_test[:5]) print('预测值:', predictions[:5]) mse = ((y_test - predictions)**2).mean() rmse = np.sqrt(mse) print(f'均方根误差 RMSE={rmse:.3f}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值