为什么我会变得很奇怪"来自knn()的概率比例?

时间:2018-04-08 18:27:37

标签: r 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,我用它来对虹膜进行子集,这样我就可以得到训练数据和新数据:

>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)。所以我不再确定我的猜测了。

1 个答案:

答案 0 :(得分:1)

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

  

use.all

     

控制领带的处理。如果为真,则所有距离均等于   包括最大的第k个。如果为false,则随机选择   选择等于kth的距离恰好使用k个邻居。

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

 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分。