首页 文章

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

提问于
浏览
2

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

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

  • 为每个类别(共6个)创建一个随机森林,它使用二进制分类(它属于类别或不属于 - 因此未知),然后将未知数据提供给下一个树,依此类推 .

  • 或者,我希望能够坚持一个随机森林,但是要引入新的截止值,这允许我指定'winning'类必须具有大于70%的投票比例,以及任何不具有't is labelled '的数据未知' .

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

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

1 回答

  • 4

    我建议你保持简单,不要创建多个互连的二进制射频模型 . 您可以采用另一种聚合规则而不是“多数投票” . 您可以从每个预测的样本中提取投票分布,并从此处实现,例如, 70%的多数人统治

    enter image description here

    @“第二种方式目前存在问题,因为截止值需要总和为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)
    

相关问题