在R中的包类中使用knn()函数时,会有一个名为“prob”的参数。如果我这样做,我会得到该特定值被分类为被归类为的任何概率。 我有一个数据集,其中分类器有9个级别。有什么方法可以让我获得所有9个级别的特定观察概率?
答案 0 :(得分:3)
据我所知knn()
中的class
函数只返回最高概率。
但是,您可以使用knnflex
包,该套餐允许您使用knn.probability
返回所有概率级别(请参阅here,第9-10页)。
答案 1 :(得分:1)
这个问题还需要正确回答。
如果需要最可能类的概率,那么 class
包仍然适用。线索是将参数 prob
设置为 TRUE 并将 k
设置为高于默认值 1 - class::knn(tran, test, cl, k = 5, prob = TRUE)
。 k
必须高于默认值 1,才能使每次观察的概率不总是 100%。
但是,如果您想获得每个类的概率,我会推荐带有 caret::knn3
的 predict
函数。
data(iris3)
train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])
cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))
# class package
# take into account k higher than 1 and prob equal TRUE
model <- class::knn(train, test, cl, k = 5, prob = TRUE)
tail(attributes(model)$prob, 10)
#> [1] 1.0 1.0 1.0 1.0 1.0 1.0 0.8 1.0 1.0 0.8
# caret package
model2 <- predict(caret::knn3(train, cl, k = 3), test)
tail(model2, 10)
#> c s v
#> [66,] 0.0000000 0 1.0000000
#> [67,] 0.0000000 0 1.0000000
#> [68,] 0.0000000 0 1.0000000
#> [69,] 0.0000000 0 1.0000000
#> [70,] 0.0000000 0 1.0000000
#> [71,] 0.0000000 0 1.0000000
#> [72,] 0.3333333 0 0.6666667
#> [73,] 0.0000000 0 1.0000000
#> [74,] 0.0000000 0 1.0000000
#> [75,] 0.3333333 0 0.6666667
由 reprex package (v2.0.0) 于 2021 年 7 月 20 日创建
答案 2 :(得分:0)
我知道这里已经标记了一个答案,但这可以在不使用其他功能或程序包的情况下完成。
您可以做的是构建您的knn模型knn_model
并检查出其“ prob”输出的属性,这样。
attributes(knn_model)$prob