gpt4 book ai didi

r - 如何查看R中的最近邻居?

转载 作者:行者123 更新时间:2023-12-03 20:18:46 25 4
gpt4 key购买 nike

首先让我说我一般没有 R、KNN 或数据科学方面的经验。我最近发现 Kaggle并且一直在玩Digit Recognition比赛/教程。

在本教程中,他们提供了一些示例代码来帮助您开始进行基本的提交:

# 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)

我的问题是:
  • 如何查看已选择的最近邻居
    特定的测试行?
  • 如何修改选择了这十个中的哪一个
    我的 results ?

  • 这些问题可能太宽泛了。如果是这样,我欢迎任何可以为我指明正确道路的链接。

    非常可能我在这里说了一些没有意义的话。如果是这种情况,请纠正我。

    最佳答案

    1)您可以像这样获得给定行的最近邻居:

    k <- knn(train, test, labels, k = 10, algorithm="cover_tree")
    indices <- attr(k, "nn.index")

    然后,如果您希望 10 个最近邻的索引排在训练集中的第 20 行:
    print(indices[20, ])

    (您将获得 10 个最近的邻居,因为您选择了 k=10 )。例如,如果您只使用训练集和测试集的前 1000 行(以使其计算更容易):
    train <- read.csv("train.csv", header=TRUE)[1:1000, ]
    test <- read.csv("test.csv", header=TRUE)[1:1000, ]

    labels <- train[,1]
    train <- train[,-1]

    k <- knn(train, test, labels, k = 10, algorithm="cover_tree")
    indices = attr(k, "nn.index")

    print(indices[20, ])
    # output:
    # [1] 829 539 784 487 293 882 367 268 201 277

    这些是 1000 个训练集中最接近测试集第 20 行的索引。

    2)这取决于你所说的“修改”是什么意思。对于初学者,您可以像这样获得每行最接近的 10 个标签中的每一个的索引:
    closest.labels = apply(indices, 2, function(col) labels[col])

    然后你可以看到离第 20 个训练点最近的 10 个点的标签,如下所示:
    closest.labels[20, ]
    # [1] 0 0 0 0 0 0 0 0 0 0

    这表明离第 20 行最近的所有 10 个点都在标记为 0 的组中。 knn只需通过多数票选择标签(随机打破关系),但如果您愿意,您可以选择某种加权方案。

    ETA:如果您有兴趣在投票方案中更重地加权较近的元素,请注意,您还可以像这样获得与 k 个邻居中的每一个的距离:
    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

    关于r - 如何查看R中的最近邻居?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153255/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com