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 创建
在 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 创建