R中所有分类的概率

时间:2015-05-07 13:08:13

标签: r knn

在R中的包类中使用knn()函数时,会有一个名为“prob”的参数。如果我这样做,我会得到该特定值被分类为被归类为的任何概率。 我有一个数据集,其中分类器有9个级别。有什么方法可以让我获得所有9个级别的特定观察概率?

3 个答案:

答案 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::knn3predict 函数。

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