R语言构建KNN模型时出现train与class长度不一致报错如何解决
报错原因
class包knn()函数的cl参数要求传入训练集对应的分类标签向量,其长度必须和train参数传入的训练集样本行数完全一致,用于对应每条训练样本的真实所属类别。- 你当前代码直接将完整的训练集数据集
social(3列数据框结构)传入了cl参数:R中数据框的默认长度返回值为列数(即3),和训练集280行的样本量完全不匹配,因此触发长度不一致报错。 - 额外需要注意:你当前将包含标签列的完整训练集直接传入
train参数也不符合规范,会导致标签被当作特征参与运算,影响模型效果。
解决方法
- 从训练集
social中单独提取分类标签列,示例如下(将代码中的label替换为你实际的分类标签列名即可):
# 提取训练集标签向量 social_label <- social$label # 提取训练集特征列(剔除标签列) social_train_feature <- social[, !colnames(social) %in% "label"]
- 确认测试集
socialtest的列数、列顺序和social_train_feature完全一致。 - 运行修正后的knn代码:
library(class) predictedknn <- knn(train = social_train_feature, test = socialtest, cl = social_label, k = 3)
内容的提问来源于stack exchange,提问作者Venkatesh G
相关产品推荐
相关产品推荐

