为什么我从 knn() 中的概率得到 "weird" 比例?

Why am I getting "weird" proportions from prob in knn()?

我正在尝试从鸢尾花数据集中预测物种 (3 类):

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

我已经创建了数值向量 tr 和 nw,我用它们对 iris 进行子集化,这样我就可以获得训练数据和新数据:

>knn5 <- knn(iris[tr, -5], iris[nw, -5], iris$Species[nw], k = 5, prob = TRUE)

>knn5

[1] versicolor virginica  virginica  versicolor virginica  setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa     versicolor virginica 
[16] setosa     setosa     setosa     virginica  setosa     setosa     virginica  versicolor virginica  virginica  versicolor setosa     versicolor versicolor setosa    
[31] versicolor setosa     virginica  setosa     versicolor versicolor versicolor setosa     versicolor versicolor virginica  virginica  virginica  setosa     versicolor
[46] setosa     versicolor versicolor setosa     versicolor
attr(,"prob")
 [1] 0.4000000 0.4000000 0.4000000 0.6000000 0.4000000 0.6000000 0.6000000 0.4000000 0.3333333 0.6000000 0.6000000 0.5000000 0.6000000 0.6000000 0.6000000 0.5000000
[17] 0.4000000 0.6000000 0.4000000 0.6000000 0.6000000 0.6000000 0.6000000 0.6000000 0.6000000 0.8000000 0.4000000 0.6000000 0.6000000 0.6000000 0.4000000 0.6000000
[33] 0.4000000 0.6000000 0.8000000 0.6000000 0.6000000 0.6000000 0.6000000 0.6000000 0.6000000 0.6000000 0.6000000 0.5000000 0.6000000 0.3333333 0.4000000 0.6000000
[49] 0.6000000 0.6000000
Levels: setosa versicolor virginica

我知道预测很糟糕,因为在 knn 中我为标签输入了错误的向量;我的问题不是那个。

我的问题是,为什么我得到 0.3333333 作为概率值?由于我们正在查看 5 个邻居,因此我希望我们只能获得 n/5.

形式的值

我最初的猜测是这些地方有平局;然而,我随后意识到 0.4000000 的值是必须存在关系的地方(因为我们只有 3 类,所以其他人必须投票给 0.4 和 0.2)。所以我不再确定我的猜测了。

我假设您使用的是 class 包中的 knn。请注意,它有一个参数 use.all 在文档中描述如下:

use.all

controls handling of ties. If true, all distances equal to the kth largest are included. If false, a random selection of distances equal to the kth is chosen to use exactly k neighbours.

虹膜数据包含一对完全重复的点

 iris[c(102,143),]
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
102          5.8         2.7          5.1         1.9 virginica
143          5.8         2.7          5.1         1.9 virginica

因此,如果这些点之一是第 5 个最近的邻居,则它们都是,并且将考虑 6 个点 - 而不仅仅是 5 个。