机器学习:随机森林RF-OOB袋外错误率

        文章讲解比较详细,且有Python代码,可以作为有用的参考。转载博客时候,竟然抄错成OBB了,也是悲剧................

        有篇神文评测了17个分类器族-192个非神经网络分类器,其中Rfs综合评价效果最好:https://dl.acm.org/doi/10.5555/2627435.2697065 ; Do we need hundreds of classifiers to solve real world ...

       原文链接:https://www.cnblogs.com/maybe2030/p/4585705.html

       不过我还是觉得CSDN排版比较花哨一些:http://blog.csdn.net/zhufenglonglove/article/details/51785220

 

 参数:OOB-袋外错误率

         构建随机森林的另一个关键问题就是如何选择最优的m(特征个数),要解决这个问题主要依据计算袋外错误率oob error(out-of-bag error)。

    随机森林有一个重要的优点就是,没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。

    我们知道,在构建每棵树时,我们对训练集使用了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树而言(假设对于第k棵树),大约有1/3的训练实例没有参与第k棵树的生成,它们称为第k棵树的oob样本。

  而这样的采样特点就允许我们进行oob估计,它的计算方式如下:

  (note:以样本为单位)

  1)对每个样本,计算它作为oob样本的树对它的分类情况(约1/3的树);

  2)然后以简单多数投票作为该样本的分类结果;

  3)最后用误分个数占样本总数的比率作为随机森林的oob误分率。

  (文献原文:Put each case left out in the construction of the kth tree down the kth tree to get a classification. In this way, a test set classification is obtained for each case in about one-third of the trees. At the end of the run, take j to be the class that got most of the votes every time case n was oob. The proportion of times that j is not equal to the true class of n averaged over all cases is the oob error estimate. This has proven to be unbiased in many tests.)

  oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。

 

后记:

 

       一般的方法是,特征的维数是先确定的。更多的是对随机森林本身参数的选择,比如随机深林的层数,和树木的个数。

 

在 MATLAB 中,你可以使用 `TreeBagger` 函数中的 `'OOBPrediction'` 和 `'OOBVarImp'` 参数来进行随机森林模型的 OOB(Out-of-Bag)误差估计。 OOB 误差是用于评估随机森林模型在未见样本上的预测准确性的一种方法。它利用在构建每个决策树时未使用的样本来评估模型的性能。下面是一个使用随机森林进行分类并计算 OOB 误差的示例: ```matlab % 加载示例数据集 load fisheriris X = meas; % 特征矩阵 Y = species; % 目标变量 % 构建随机森林模型 numTrees = 100; % 决策树的数量 model = TreeBagger(numTrees, X, Y, 'Method', 'classification', 'OOBPrediction', 'On'); % 获取模型的 OOB 误差 oobError = oobError(model); ``` 在上述示例中,我们加载了一个示例数据集(鸢尾花数据集)。然后,我们将特征矩阵 `meas` 赋值给变量 `X`,将目标变量 `species` 赋值给变量 `Y`。接下来,我们使用 `TreeBagger` 函数构建了一个包含 100 个决策树的随机森林分类器,并通过 `'OOBPrediction'` 参数启用了 OOB 预测。最后,我们使用 `oobError` 函数计算模型的 OOB 误差。 另外,你还可以使用 `'OOBVarImp'` 参数来评估随机森林中特征的重要性。这个参数可以用来计算每个特征的 OOB 方差重要性,表示特征对模型预测的贡献程度。示例如下: ```matlab % 获取特征的 OOB 方差重要性 varImportance = oobPermutedVarImp(model); ``` 在上述示例中,我们使用 `oobPermutedVarImp` 函数计算模型中每个特征的 OOB 方差重要性。 通过使用 OOB 误差估计和特征重要性,你可以更好地理解随机森林模型的性能和特征的贡献。希望对你有所帮助!如果还有其他问题,请随时提问。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值