R语言使用KNN算法报错:'train'和'class'长度不一致问题求助
报错根本原因
你传入cl参数的是一个单列数据框,而非knn函数要求的一维向量:
R中数据框的length()返回值为列数,你传入的单列数据框长度被识别为1,和训练集20000行的样本量完全不匹配,因此触发长度不一致的报错。
修复方案
只需将标签列转为一维向量传入即可,两种常用实现方式如下:
方法1:base R 加drop参数
取列时添加drop = TRUE,自动将单列数据框转为向量:
predictions <- knn( train = x_train_auto, test = x_test_auto, cl = Df_census[in_train_census, 1, drop = TRUE], k = 25 )
方法2:显式转换为向量
提前将标签提取为向量后再传入:
# 提取训练集标签向量 train_labels <- as.vector(Df_census[in_train_census, 1]) # 运行knn predictions <- knn( train = x_train_auto, test = x_test_auto, cl = train_labels, k = 25 )
前置校验建议
每次运行前可先校验训练集样本量和标签长度是否匹配,提前规避这类问题:
cat("长度是否匹配:", nrow(x_train_auto) == length(train_labels), "\n")
返回TRUE再运行模型即可。
内容的提问来源于stack exchange,提问作者Jim Ryan
相关产品推荐
相关产品推荐

