You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何相同训练测试数据下重复运行class::knn会得到不同结果?

KNN两次运行结果不一致的原因

核心原因是投票平局时的随机选择机制:当某个测试样本的k个近邻中,多个类别的得票数相等时,class包的knn()函数会随机挑选一个类别作为预测结果。这种随机性会导致相同输入下,两次运行的预测结果出现细微差异,最终反映在准确率的变化上。

比如你用k=5时,可能存在部分测试样本的近邻投票结果是2票A、2票B、1票C的情况,此时函数会在A和B中随机选一个,两次运行的随机选择结果可能不同,进而影响整体准确率。

解决办法

  • 固定随机种子:在代码开头或调用knn()前设置set.seed(),让随机选择的结果固定,这样两次运行就能得到一致的准确率。示例代码如下:
library(class)
set.seed(123) # 固定随机种子,数值可任意指定
train <- sample(150, 50)
iris_train <- iris[train, 1:4]
iris_test <- iris[-train, 1:4]
y_train <- iris[train, 5]
y_test <- iris[-train, 5]

knn.pred <- knn(iris_train, iris_test, y_train, k = 5)
mean(knn.pred == y_test)
knn.pred <- knn(iris_train, iris_test, y_train, k = 5)
mean(knn.pred == y_test)
  • 调整k值:选择能避免投票平局的k值,比如使用奇数k且确保多数类得票明确,减少随机选择的场景。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:50:31