r - kNN算法只预测一组
问题描述
我正在尝试制作一个模型,该模型将根据城市的发展水平预测城市群。我的意思是,第一组的城市是最发达的城市,第六组的城市是最不发达的城市。我在每个城市的数据中有 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
与它有什么关系。
解决方案
如knn 文档中所述:
use.all控制关系的处理。如果为真,则包括等于第 k 个最大距离的所有距离。如果为 false,则随机选择等于第 k 个距离的距离,以准确使用 k 个邻居。
在您的情况下,所有点的距离都相同,因此它们都以“最佳邻居”(use.all = True
)获胜,或者算法随机挑选 k 个获胜者(use.all = False
)。
问题似乎在于您如何训练算法或数据本身。由于您没有发布数据样本,我对此无能为力,但我建议您重新检查。您也可以手动计算一些距离,看看发生了什么。
此外,在将数据拆分为训练集和测试集之前,请检查您是否将数据随机化。例如,假设数据集按标签(目标变量)排序。如果您使用前 20 个点来训练算法,那么算法很可能在训练阶段永远不会看到某些标签,因此在测试阶段它会在那些标签上表现不佳。
推荐阅读
- android - Koin.error.NoBeanDefFoundException:未找到 ViewModel 类的定义。检查你的定义
- r - 使用 R 调用 FORTRAN exe 文件
- amazon-web-services - fargate 吊舱闲置成本计算
- javascript - 在 if 语句中包含多个条件而不重复
- javascript - Onclick 使用 jQuery 从 textarea 添加/删除特定字符串
- visual-studio - 当我在代码中时,是否有任何 vs 代码快捷方式可以按 Enter 并转到下一行?
- javascript - Github Actions 上的 Mocha 并行作业
- c# - 如何为 MemoryStream 中编写的内容提供 *.csv 扩展名?
- json - 如何在本机反应中以json格式获取excel文件数据
- javascript - 反应平滑滚动但不在初始化时