这是与iris
数据集相关的一些虚拟代码,它产生了我遇到的问题。
iris <- read.csv("~/Rdata/iris.csv")
library(randomForest)
fit <- randomForest(Species ~ ., data=iris)
iris$guess <- predict(fit, type="prob")
View(iris)
您会看到新的GUESS
列长度为450条记录,而iris
只有150条记录长度。但预测似乎是正确的,如果我从代码中删除type="prob"
,这个问题就会消失。
答案 0 :(得分:1)
type
?predict.randomForest
参数的解释表明,对于type='prob'
,您将收到不同潜在响应类别的预测概率矩阵。
当您单独查看predict
结果时,您会看到这一点:
head(predict(fit, type="prob"), 10)
# setosa versicolor virginica
# 1 1.0000000 0.000000000 0
# 2 1.0000000 0.000000000 0
# 3 1.0000000 0.000000000 0
# 4 1.0000000 0.000000000 0
# 5 1.0000000 0.000000000 0
# 6 1.0000000 0.000000000 0
# 7 1.0000000 0.000000000 0
# 8 1.0000000 0.000000000 0
# 9 0.9945355 0.005464481 0
# 10 1.0000000 0.000000000 0
由于有3个类别(物种)和150个观测值,因此有450个预测值。当您对data.frame进行此预测矩阵时,R会从中删除维度并将其添加为单个长列。
如果您将type
保留为默认'response'
,则R将返回具有最高预测概率的类。例如,比较:
levels(iris$Species)[apply(predict(fit,type="prob"), 1, which.max)]
与
predict(fit)