【问题标题】:Constantly getting different predictions for a small data set when using KNN (k = 2) in R在 R 中使用 KNN (k = 2) 时,不断得到对小数据集的不同预测
【发布时间】:2016-02-28 01:06:57
【问题描述】:

考虑以下训练集的回归问题:

我想预测每个对象的 2 最近邻预测 - 但是,每次调用 knn 函数时,我都会得到不同的预测。应该是这样吗?这是我正在使用的代码:

library(class)
test <- train <- matrix(c(-1, 0, 2, 3),,1)
cl <- c(0, 1, 2, 1)
knn(train, test, cl, k=2)

输出:

> knn(train, test, cl, k=2)
[1] 1 1 2 2
Levels: 0 1 2
> knn(train, test, cl, k=2)
[1] 0 0 1 2
Levels: 0 1 2
> knn(train, test, cl, k=2)
[1] 1 1 1 2
Levels: 0 1 2
> knn(train, test, cl, k=2)
[1] 0 0 1 2
Levels: 0 1 2

非常感谢任何澄清。

【问题讨论】:

    标签: r algorithm knn


    【解决方案1】:

    Inknn 领带是随机断开的,按照您的设置方式,您将始终在投票中拥有一个正确的(完全匹配)和一个错误的标签(最近的匹配),因此结果始终是随机的在实际标签和错误标签之间进行选择。

    您可以通过多次运行实验并查看结果来凭经验看到这一点 - 每行将以大致相同的比例有两个不同的结果。

    【讨论】:

    • 嗯,有道理。我正在完成我书中的一个练习,该练习告诉我针对每个对象(在 R 中)绘制每个对象的 2-最近邻预测。它不提供解决方案,但我是否正确假设对于这个特定场景会有多个正确的情节?
    • 好吧,所有的情节都是正确的;)。但是,是的,在如此小的训练集上,每次调用的预测都会有所不同,因为k=2 会有联系,所以你会得到不同的图。
    • 酷。出于好奇,如果我在纸上而不是 R 上做这个,我的结果还会有很大差异吗?我还会随机挑选标签吗?机器学习不是我研究的东西,所以我对算法并不完全熟悉(还),但我确实计划明天更深入地研究它。
    • 这取决于你决定如何打破关系。 alg 只取最近的行(通过 euclid dist),查看它们的标签并选择最频繁的行。对于k=2,您始终有两个标签,因此它们要么相同(因此是明显的赢家)或不一样。如果不是,那么您必须做出一些决定——假设如果您决定始终采用较小的数字,那么您将获得一致的结果 – 但您也更有可能预测较小的数字。 R 只是随机选择一个,所以结果中没有特定的偏差。
    【解决方案2】:

    尽管代码不起作用,但我的猜测是有一个平局,在这种情况下它会随机选择,这就是为什么您每次使用它都会看到不同的结果。在这种情况下选择 k=3 会停止所有的关系,并且每次都给你相同的答案。

    【讨论】:

    • 抱歉,现在检查一下编辑。我设置了 k = 3 仍然得到不同的结果,我不确定出了什么问题
    • k=3 无济于事:最后两行总是会得到 1,因为唯一出现两次(因此可以直接获胜)的标签是 1 并且只有最后一行两行足够接近,可以选择两者。前两行总是有 3 个不同的标签,因此总是在其中随机选择。
    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 2017-11-01
    • 1970-01-01
    • 2017-04-03
    • 2017-08-14
    • 2012-01-03
    • 2016-10-15
    • 2016-06-12
    相关资源
    最近更新 更多