R中knn中所有分类的概率

Probabilities of all classifications in knn in R

在 R 中使用包 class 中的 knn() 函数时,有一个名为 "prob" 的参数。如果我做到这一点,我就会得到该特定值被 class 化为 class 化为的概率。 我有一个数据集,其中 classifier 有 9 个级别。有什么方法可以获得所有 9 个级别的特定观察的概率?

据我所知knn()函数在class中只有return概率最高

但是,您可以使用 knnflex 程序包,它允许您使用 knn.probability return 所有概率级别(参见 here,第 9-10 页)。

我知道这里已经标记了一个答案,但这可以在不使用其他函数或包的情况下完成。

您可以做的是构建您的 knn 模型 knn_model 并检查其 "prob" 输出的属性,如此。

attributes(knn_model)$prob

这个问题还需要正确的回答。

如果需要最可能 class 的概率,那么 class 包仍然适合。线索是将参数 prob 设置为 TRUE 并将 k 设置为高于默认值 1 - class::knn(tran, test, cl, k = 5, prob = TRUE)k 必须高于默认值 1,以免每次观察的概率始终为 100%。

但是,如果您想获得每个 classes 的概率,我会推荐 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-07-20 创建