我正在研究随机森林分类。
我发现“派对”套餐中的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中加入一些额外的观察:
我很感激你的意见。
有些人想知道为什么训练数据集应用于预测() 我没有准备任何测试数据集,因为预测是针对OOB样本进行的,而cforest则不然 c.f。 http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm
答案 0 :(得分:9)
通过研究分类器在训练集上的表现,您无法了解分类器的真实性能。此外,由于没有真正的模式可以找到,你无法真正判断像cforest
那样的过度拟合是否更糟,或像randomForest
那样随机猜测。你可以说的是,这两种算法遵循不同的策略,但是如果你在新的看不见的数据上测试它们,那么两者都可能会失败。
估算分类器性能的唯一方法是在外部数据上对其进行测试,这种情况尚未成为培训的一部分,在您知道存在要查找的模式的情况下。
一些意见:
答案 1 :(得分:3)
predict
方法分别对cforest
和randomForest
模型有不同的默认值。 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
这是一个令人沮丧的结果。