【问题标题】:Binary classification or unknown class in random forest in RR中随机森林中的二元分类或未知类
【发布时间】: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 中进行二进制分类。

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

【问题讨论】:

    标签: r machine-learning classification random-forest prediction


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 2016-12-30
      • 2016-09-30
      • 2012-10-27
      • 2019-02-01
      • 2019-09-05
      • 2013-09-22
      • 2018-02-18
      • 2017-10-20
      相关资源
      最近更新 更多