kNN算法仅预测一组

问题描述 投票:0回答:1

我正在尝试建立一个模型,以根据城市的发展水平预测城市的类型。我的意思是,第一组城市是最发达的城市,第六组城市是最不发达的城市。每个城市的数据中都有10个数字变量。

首先,我使用最大-最小归一化对其进行归一化。然后,我生成了训练和数据集。我有81个城市。训练和数据集的大小分别为20x10和61x10。我从他们排除了目标变量。然后我为它们制作了标签,作为训练标签和尺寸为61x1和20x1的测试标签。

然后我像这样运行knn函数

knn(train = Data.training, test = Data.test, cl = Data.trainLabels , k = 3)

其输出是这个

[1] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
Levels: 1 2 3 4 5 6

但是如果我将参数use.all设置为FALSE,则会得到此输出,并且每次运行代码时都会改变

[1] 1 4 2 2 2 3 5 4 3 5 5 6 5 6 5 6 4 5 2 2
Levels: 1 2 3 4 5 6

我找不到我的代码首先给出相同预测的原因,以及use.all与之相关的原因。

r machine-learning classification knn
1个回答
0
投票

knn documentation中所述:

use.all控制领带的处理。如果为true,则包括等于第k个最大距离的所有距离。如果为假,则选择等于kth的距离的随机选择以精确地使用k个邻居。

在您的情况下,所有点的距离相同,因此它们都以“最佳邻居”(use.all = True)获胜,或者算法随机选择k个获胜者(use.all = False)。

问题似乎在于您如何训练算法或数据本身。由于您没有发布数据样本,因此我无法提供帮助,但是建议您重新检查。您还可以手动计算一些距离,以查看发生了什么。

[此外,在将数据分成训练和测试集之前,请检查数据是否随机化。例如,假设数据集按标签(目标变量)排序。如果您使用前20个点来训练算法,则该算法很可能在训练阶段将永远看不到某些标签,因此在测试阶段对这些标签的效果将不佳。

© www.soinside.com 2019 - 2024. All rights reserved.