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

dyt*_*ori 9 r random-forest

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

我发现"party"包中的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="")
Run Code Online (Sandbox Code Playgroud)

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

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

无意义数据的预测性能相当好.

另一方面,randomForest诚实地说.

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

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

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

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

我很感激你的意见.

附加说明

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

Bac*_*lin 9

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

估计分类器性能的唯一方法是在外部数据上测试它,这不是培训的一部分,在你知道有一种模式可以找到的情况下.

一些评论:

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

  • 请注意,对于常规`randomForest`,预测方法返回袋外预测,虽然可能不如使用完全不同的测试集,但它实际上并不像在实际训练集上返回预测那样.这不是cforest预测方法的默认值,我相信,但我认为有一个OOB参数可以让你改变它. (4认同)