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

在R中运行Knn函数报错:train与class长度不一致的解决方法

解决KNN算法中train与class长度不一致的问题

错误根源

knn函数硬性要求训练集(train)的行数必须和类别标签参数(cl)的长度完全匹配。你的代码出现该错误,主要有两个可能:

  • 0.9*nrow(Knn_data)计算结果可能为非整数,sample函数会自动向下取整,但后续索引操作可能引发隐性长度不匹配;
  • Knn_data[ran,8]返回的是数据框列而非向量,结构上的差异也会导致函数判定长度不一致。

调整方案

  1. 将训练集大小转为整数
    先通过取整函数明确训练集的行数,避免浮点运算带来的误差:

    # 计算整数型训练集规模
    train_size <- floor(0.9 * nrow(Knn_data))
    ran <- sample(1:nrow(Knn_data), train_size)
    
  2. 确保类别标签为向量格式
    提取类别标签时添加drop=TRUE参数,强制返回向量而非数据框列:

    Knn_target_category <- Knn_data[ran, 8, drop=TRUE]
    

修正后的完整代码

# 确定整数训练集大小
train_size <- floor(0.9 * nrow(Knn_data))
ran <- sample(1:nrow(Knn_data), train_size)

# 数据归一化处理
nor <- function(x) { (x-min(x))/(max(x)-min(x))}
Knn_data_norm <- as.data.frame(lapply(Knn_data[,c(1,2,3,4,5,6,7)], nor))
summary(Knn_data_norm)

# 划分训练集与测试集
Knn_train <- Knn_data_norm[ran,]
Knn_test <- Knn_data_norm[-ran,]
Knn_target_category <- Knn_data[ran,8, drop=TRUE]
Knn_test_category <- Knn_data[-ran,8, drop=TRUE]

# 执行KNN算法
library(class)
pr <- knn(Knn_train, Knn_test, cl=Knn_target_category, k=3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:30:38