R中随机森林中的二元分类或未知类

Posted

技术标签:

【中文标题】R中随机森林中的二元分类或未知类【英文标题】:Binary classification or unknown class in random forest in R 【发布时间】:2015-12-03 02:29:55 【问题描述】:

有没有办法在随机森林中引入“未知”类别或进行二元分类?

我想将数据输入一个随机森林,如果投票百分比超过 70%,我只想对其进行分类。我总共有 6 个类别,所以我最初做的是创建一个随机森林,并且截止值自动默认为 c(16.6, 16.6, 16.6, 16.6, 16.6, 16.6)。这是相当低的,所以相反,我想:

为使用二元分类的每个类别(总共 6 个)创建一个随机森林(它属于或不属于该类别 - 所以它是未知的),然后将未知数据输入下一棵树,依此类推。 或者,我希望能够坚持一个随机森林,但要引入新的截止值,允许我指定“获胜”类别的选票比例必须大于 70%,并且任何未标记为“未知”的数据。

第二种方法目前存在问题,因为截止值需要总和为 1,第一种建议是一个问题,因为我似乎无法弄清楚如何在 R 中进行二进制分类。

无论如何,是否可以克服其中任何一个,并引入“未知”类别?谢谢

【问题讨论】:

【参考方案1】:

我建议您保持简单,不要创建多个相互关联的二进制射频模型。您可以采用“多数票”以外的其他聚合规则。您可以从每个预测样本中提取投票分布,并从这里实现例如70% 多数规则

@"第二种方式目前存在问题,因为截止值需要总和为 1" - 从技术上讲,截止值不需要总和为 1。在 randomForest 中,类别预测除以各自的类别截止值,并且最大的数字是多数赢家。

library(randomForest)
library(plotrix)
set.seed(1234)
data(iris)
#iris is too easy and therefore applying jitter
iris[1:4] = lapply(iris[1:4],jitter,amount=2)
plot(iris,col=iris$Species)
test = sample(150,25) #reserve a test set
rf = randomForest(Species~.,data=iris[-test,])

#predict test, use type=prob to extract vote fractions
preds = predict(rf,iris[test,],type="prob") 

#make 70% rule
class.winner = apply(preds,1,function(aPred) c(which(aPred>=.7),NA)[1]) 

#plot prediction in probability simplex
triax.plot(preds,col.symbols=iris$Species[test],main="col is true class, o is all pred, x is >=70% preds")
triax.points(preds,col.symbols=unlist(class.winner),pch=4)

【讨论】:

以上是关于R中随机森林中的二元分类或未知类的主要内容,如果未能解决你的问题,请参考以下文章

未知标签类型:在多类分类问题上使用随机森林分类器时“连续”

Spark Random Forest classifier 随机森林分类

随机森林中的错误:“需要至少两个类来进行分类”

R中的随机森林 - 许多类

偏移随机森林分类器 scikit 学习

R中栅格堆栈的无监督随机森林分类