如何查看R中的最近邻?
首先,我要说的是,我没有R、KNN或数据科学方面的经验。我最近发现并一直在玩竞赛/教程 在本教程中,他们提供了一些示例代码,帮助您开始基本提交:如何查看R中的最近邻?,r,kaggle,R,Kaggle,首先,我要说的是,我没有R、KNN或数据科学方面的经验。我最近发现并一直在玩竞赛/教程 在本教程中,他们提供了一些示例代码,帮助您开始基本提交: # makes the KNN submission library(FNN) train <- read.csv("c:/Development/data/digits/train.csv", header=TRUE) test <- read.csv("c:/Development/data/digits/test.csv", he
# makes the KNN submission
library(FNN)
train <- read.csv("c:/Development/data/digits/train.csv", header=TRUE)
test <- read.csv("c:/Development/data/digits/test.csv", header=TRUE)
labels <- train[,1]
train <- train[,-1]
results <- (0:9)[knn(train, test, labels, k = 10, algorithm="cover_tree")]
write(results, file="knn_benchmark.csv", ncolumns=1)
#提交KNN
图书馆(FNN)
训练1)您可以获得给定行的最近邻,如下所示:
k <- knn(train, test, labels, k = 10, algorithm="cover_tree")
indices <- attr(k, "nn.index")
(您将获得10个最近的邻居,因为您选择了k=10
)。例如,如果仅使用训练和测试集的前1000行运行(以使计算更容易):
然后,您可以看到距离第20个训练点最近的10个点的标签,如下所示:
closest.labels = apply(indices, 2, function(col) labels[col])
closest.labels[20, ]
# [1] 0 0 0 0 0 0 0 0 0 0
dists = attr(k, "nn.dist")
dists[20, ]
# output:
# [1] 1238.777 1243.581 1323.538 1398.060 1503.371 1529.660 1538.128 1609.730
# [9] 1630.910 1667.014
这表示与第20行最近的所有10个点都在标记为0的组中knn
只需通过多数票选择标签(随机打破平局),但如果您愿意,您可以选择某种加权方案
ETA:如果您有兴趣在投票方案中对更接近的元素进行更重的加权,请注意,您还可以通过以下方式获得到每个k邻居的距离:
closest.labels = apply(indices, 2, function(col) labels[col])
closest.labels[20, ]
# [1] 0 0 0 0 0 0 0 0 0 0
dists = attr(k, "nn.dist")
dists[20, ]
# output:
# [1] 1238.777 1243.581 1323.538 1398.060 1503.371 1529.660 1538.128 1609.730
# [9] 1630.910 1667.014
非常好的回应,谢谢!我有几个问题。任何时候我试图打印索引
时,它都返回null,我应该做与您的示例不同的事情吗?你能推荐一些资源来研究更多关于创建自定义权重方案的信息吗?或者有人创造了一个我可以看到的例子?这很奇怪。如果您执行打印(k)
,您会得到什么?至于其他的加权方案——你会像我在谷歌上搜索“KNN加权”一样幸运。但是我在我的答案中写了更多关于权重的内容。好吧,为了澄清我实际上使用的是结果
,而不是k
。我想这没什么区别,但我想我应该把它扔出去。当我打印(结果)
时,它会打印出最终写入csv文件的1000个元素。看起来我做错了什么。我准确地复制/粘贴了您的代码,并且成功了。很抱歉造成混淆。对-您所做的只是一行结果