区间内的 R 预测
Posted
技术标签:
【中文标题】区间内的 R 预测【英文标题】:R prediction within an interval 【发布时间】:2015-04-30 03:29:52 【问题描述】:关于预测的快速问题。
我试图预测的值是 0 或 1(它被设置为数字,而不是一个因子)所以当我运行我的随机森林时:
fit <- randomForest(PredictValue ~ <variables>, data=trainData, ntree=50)
并预测:
pred<-predict(fit, testData)
我所有的预测都在 0 和 1 之间——这是我所期望的,而且——我想象——可以解释为 1 的概率。
现在,如果我使用 gbm 算法完成相同的过程:
fitgbm <- gbm(PredictValue~ <variables>, data=trainData, distribution = "bernoulli", n.trees = 500, bag.fraction = 0.75, cv.folds = 5, interaction.depth = 3)
predgbm <- predict(fitgbm, testData)
值从 -0.5 到 0.5
我也试过 glm,范围最差,从 -3 到 3 左右。
所以,我的问题是:是否可以将算法设置为在 0 和 1 之间进行预测?
谢谢
【问题讨论】:
【参考方案1】:您需要指定type='response'
才能发生这种情况:
检查这个例子:
y <- rep(c(0,1),c(100,100))
x <- runif(200)
df <- data.frame(y,x)
fitgbm <- gbm(y ~ x, data=df,
distribution = "bernoulli", n.trees = 100)
predgbm <- predict(fitgbm, df, n.trees=100, type='response')
太简单不过看predgbm
的总结:
> summary(predgbm)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.4936 0.4943 0.5013 0.5000 0.5052 0.5073
正如文档中提到的,这是 y 为 1 的概率:
如果 type="response" 则 gbm 转换回与结果相同的比例。目前,这将产生的唯一影响是返回伯努利的概率和泊松的预期计数。
【讨论】:
太好了,非常感谢,但如果您不介意,我还有另一个问题。如果我在您的示例中拟合森林: fitforest 没问题!这是因为它们是根本不同的算法。随机森林在树之间进行投票来定义观察的类别,而 gbm 尝试使用第一棵树来预测类别,然后其他树根据损失函数预测第一棵树的错误(在许多情况下只是残差)。然后它根据添加树的符号进行分类。希望它更清楚一点。 我认为这也会使其更清晰。这是一个非常简单的示例,在某些情况下,所有树都会针对特定情况预测 1 或 0,因此您在随机森林中得到 0 或 1 的概率。在 gbm 的情况下,除了第一棵树(我认为用 -1 或 1 预测)之外,其他所有东西都将预测错误,因此数字将被添加到 1s 或 -1s 上,最后是总数的符号将确定班级。 gbm 没有多数票。 谢谢,它确实有道理,只是有点难以消化,因为我的测试行与训练行 100% 相似(我添加到测试中 - 只是为了检查算法的准确性),gbm 预测为 0.6,而 forest 预测为 1。 是的,它肯定会发生(它发生在我身上很多次)。这一切都取决于首先如何创建树。以上是关于区间内的 R 预测的主要内容,如果未能解决你的问题,请参考以下文章