我试图从虹膜数据集预测物种(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)。所以我不再确定我的猜测了。
答案 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分。