2015-09-07 58 views
2

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

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

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

第二种方式目前提出了一个问题,因为切断值需要和为1,第一个建议是,我似乎无法找出如何做二元分类中R.

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

回答

4

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

enter image description here

@“作为切断值需要总结为1第二种方式目前提出了一个问题”,切断值不需要总和为1。在随机森林中,类别预测除以各自的类别截止点,并且最大数量是多数赢家。

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)