- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近使用 R 中的 ranger 包构建了一个随机森林模型。但是,我注意到训练期间存储在 ranger 对象中的预测(可通过 model$predictions 访问)与运行预测时得到的预测不匹配使用创建的模型对同一数据集执行命令。以下代码在 mtcars 数据集上重现了该问题。我创建了一个二元变量只是为了将其转换为分类问题,尽管我也看到了回归树的类似结果。
library(datasets)
library(ranger)
mtcars <- mtcars
mtcars$mpg2 <- ifelse(mtcars$mpg > 19.2 , 1, 0)
mtcars <- mtcars[,-1]
mtcars$mpg2 <- as.factor(mtcars$mpg2)
set.seed(123)
mod <- ranger(mpg2 ~ ., mtcars, num.trees = 20, probability = T)
mod$predictions[1,] # Probability of 1 = 0.905
predict(mod, mtcars[1,])$predictions # Probability of 1 = 0.967
这个问题也存在于 randomForest 包中,我在其中观察到可以使用以下代码重现类似的问题。
library(randomForest)
set.seed(123)
mod <- randomForest(mpg2 ~ ., mtcars, ntree = 20)
mod$votes[1,]
predict(mod, mtcars[1,], type = "prob")
有人可以告诉我为什么会发生这种情况吗?我希望结果是一样的。我是否做错了什么,或者我对随机森林的某些固有属性的理解存在错误,从而导致了这种情况?
最佳答案
我认为您可能想更深入地了解随机森林的工作原理。我强烈推荐Introduction to Statistical Learning in R (ISLR),它可以在线免费获得here .
也就是说,我认为这里的主要问题是,当 mod$votes 值和predict()
值不完全相同时,您将它们视为相同的值。如果您查看
randomForest
函数的文档,
mod$votes
或
mod$predicted
值是out-of-bag(“OOB ") 对输入数据的预测。这与
predict()
函数生成的值不同,后者评估对
randomForest()
生成的模型的观察。通常,您希望在一组数据上训练模型,并在测试集上使用
predict()
函数。
最后,如果您想为 mod 对象获得相同的结果,您可能需要在每次创建随机森林时重新运行 set.seed()
函数。我认为有一种方法可以为整个 session 设置种子,但我不确定。这看起来是一个有用的帖子:Fixing set.seed for an entire session
旁注:在这里,您没有指定每棵树使用的变量数量,但在大多数情况下默认值就足够了(检查您用于默认值的每个随机森林函数的文档)。也许您在实际代码中这样做,但没有将其包含在您的示例中,但我认为值得一提。
希望这有帮助!
编辑:我尝试使用除第一次观察(马自达 RX4)之外的所有数据来训练随机森林,然后仅对该观察使用预测函数,我认为这更好地说明了我的观点。尝试运行这样的东西:
library(randomForest)
set.seed(123)
mod <- randomForest(mpg2 ~ ., mtcars[-1,], ntree = 200)
predict(mod, mtcars[1,], type = "prob")
关于R随机森林不一致的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51865353/
我们正在运行 MarkLogic 9.0-11 版本 3 节点集群,并且 MarkLogic 安装在“/var/opt/MarkLogic/”目录中,我们创建了“/var/opt/MarkLogic/
我有一片任意高度的森林,大致像这样: let data = [ { "id": 2, "name": "AAA", "parent_id": null, "short_name": "A" },
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 7 年前。 Improve
我有一个巨大的深度字典,代表森林(许多非二叉树),我想处理森林并创建一个包含森林所有可能关系的文本文件,例如给定字典: {'a': {'b': {'c': {}, 'd': {}}, 'g': {}}
在我的 Android 应用程序中,我包含了谷歌地图。现在我想获取有关您周围地区的信息。例如,你是在公园/森林/海滩……所以我基本上想要一个用“水”回答输入坐标 53°33'40.9"N 10°00'
如果我有下表: Member_Key Member_Name col1 Mem1 col2 Mem2 col3 Mem3 col4
继续我的老问题: Writing nested dictionary (forest) of a huge depth to a text file 现在我想把森林遍历写成BFS风格:我有一个巨大的深
我有一个多域环境(事件目录林),例如subdomain1.mydomain.com, subdomain2.mydomain.com 其中 mydomain.com 是根 AD 域 (GC) 和 su
我想知道是否有可能在 Google map 或 Bing Mag 2D/3D map 上恢复地形类型(山脉、森林、水域、平原等...) 。为了根据玩家在现实世界中的位置生成 map !我认为可用 AP
我是一名优秀的程序员,十分优秀!