如何控制随机森林中错误分类的成本?


21

是否有可能控制R包randomForest中错误分类的代价

在我自己的工作中,误报(例如,由于一个人可能患有疾病而导致的错误失误)比误报的代价要高得多。软件包rpart允许用户通过指定损失矩阵来不同程度地加权错误分类,从而控制错误分类成本。是否有类似的东西存在randomForest?例如,我是否应该使用该classwt选项来控制Gini标准?

Answers:


8

并非如此,如果不是通过手动制作RF克隆来制作rpart模型袋的话。

一些选择来自以下事实:RF的输出实际上是连续得分而不是明确的决定,即在某个类别上投票的树木所占的比例。它可以predict(rf_model,type="prob")用ROC曲线提取并用于制作,例如,ROC曲线将显示出比.5更好的阈值(以后可以将其合并到带有cutoff参数的RF训练中)。

classwt 这种方法似乎也有效,但是在实践中效果不佳-无论属性如何,在平衡预测和同级无关紧要的转换之间的过渡都过于尖锐而无法使用。


MBQ。非常感谢。(i)ROC曲线:在这种情况下,我不需要ROC曲线,因为我对成本权重应该有自己的先验。(ii)classwt:是的,我发现在实践中并与其他用户一致,结果与预期不符。(iii)cutoff:我不清楚如何cutoff在这种情况下使用,欢迎任何进一步的建议。
user5944

3

有很多方法可以包括费用。
(1)每棵袋装树的过高/过低采样(分层采样)是引入成本的最常见方法。您故意使数据集失衡。
(2)加权。永远都行不通。我认为文档中强调了这一点。有人声称您只需要在所有阶段(包括基尼拆分和最终投票)加权即可。如果它能正常工作,那将是一个棘手的实现。
(3)Weka中的元成本函数。
(4)将随机森林视为概率分类器并更改阈值。我最喜欢这个选项。可能是由于我缺乏知识,但是即使该算法可以输出概率,对我来说也无法将其视为概率模型来对待。

但是我敢肯定还有其他方法。


3

建议如果您要预测的变量不是50%class 1和50%class 2(与大多数情况一样),则应调整cutoff参数以代表实数OOB摘要。

例如,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

在这种情况下,具有为一的值的概率class 1.96同时具有值class 2.04

否则,随机森林使用的阈值0.5


1

一个可以将costMatrixrandomForest通过明确的parms参数:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))

0

您可以使用包装中的sampsize功能合并成本敏感性randomForest

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

改变数字(100,20)根据你的数据,你正在使用的假设/业务规则。

需要一些试验和错误方法才能获得反映分类错误成本的混淆矩阵。看看理查德·伯克(Richard Berk)的《犯罪风险预测:一种机器学习方法》,第1页。82。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.