随机森林由R包方供应随机数据

时间:2013-10-23 12:57:42

标签: r random-forest

我正在研究随机森林分类。

我发现“派对”套餐中的cforest通常比“randomForest”表现得更好 然而,似乎cforest容易过度装配。

玩具示例

这是一个随机数据集,包括二元因子的响应和从rnorm()生成的10个数值变量。

# Sorry for redundant preparation.
data <- data.frame(response=rnorm(100))
data$response <- factor(data$response < 0)
data <- cbind(data, matrix(rnorm(1000), ncol=10))
colnames(data)[-1] <- paste("V",1:10,sep="")

执行cforest,使用无偏的参数集(可能推荐)。

cf <- cforest(response ~ ., data=data, controls=cforest_unbiased())
table(predict(cf), data$response)
#       FALSE TRUE
# FALSE    45    7
# TRUE      6   42

无意义数据的预测性能相当不错。

另一方面,randomForest诚实地说。

rf <- randomForest(response ~., data=data)
table(predict(rf),data$response)
#       FALSE TRUE
# FALSE    25   27
# TRUE     26   22

这些差异来自哪里?
我担心我会以错误的方式使用cforest。

让我在cforest中加入一些额外的观察:

  1. 变量的数量对结果影响不大。
  2. 与使用一些现实解释变量的那些相比,变量重要性值(由varimp(cf)计算得)相当低。
  3. ROC曲线的AUC接近1。
  4. 我很感激你的意见。

    附加说明

    有些人想知道为什么训练数据集应用于预测() 我没有准备任何测试数据集,因为预测是针对OOB样本进行的,而cforest则不然 c.f。 http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

2 个答案:

答案 0 :(得分:9)

通过研究分类器在训练集上的表现,您无法了解分类器的真实性能。此外,由于没有真正的模式可以找到,你无法真正判断像cforest那样的过度拟合是否更糟,或像randomForest那样随机猜测。你可以说的是,这两种算法遵循不同的策略,但是如果你在新的看不见的数据上测试它们,那么两者都可能会失败。

估算分类器性能的唯一方法是在外部数据上对其进行测试,这种情况尚未成为培训的一部分,在您知道存在要查找的模式的情况下。

一些意见:

  1. 如果没有变量包含任何有用信息,则变量数量无关紧要。
  2. 很高兴看到无意义数据的变量重要性低于有意义的数据。这可以作为方法的健全性检查,但可能不多。
  3. AUC(或任何其他表现指标)在训练集上无关紧要,因为获得完美的分类结果是微不足道的。

答案 1 :(得分:3)

predict方法分别对cforestrandomForest模型有不同的默认值。 party:::predict.RandomForest让你

function (object, OOB = FALSE, ...) 
    {
        RandomForest@predict(object, OOB = OOB, ...)
    }

所以

table(predict(cf), data$response)

让我

        FALSE TRUE
  FALSE    45   13
  TRUE      7   35

,而

table(predict(cf, OOB=TRUE), data$response)

让我

        FALSE TRUE
  FALSE    31   24
  TRUE     21   24

这是一个令人沮丧的结果。