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

训练集30000样本测试集5000样本仅2000标签如何归一化适配KNN

KNN分类样本数不匹配报错解决方法

报错根因

该ValueError: Found input variables with inconsistent numbers of samples报错,常见触发场景有两类:

  • 数据归一化处理逻辑出错,导致data_train_norm和label_train的样本维度不匹配,或是训练集、测试集赋值混淆
  • 你导入了accuracy_score但未贴出对应调用代码,大概率是计算准确率时,传入了全量5000条测试集的预测结果,和只有2000条的测试标签做匹配,触发维度校验失败

具体处理步骤

1. 校验数据集维度

先运行以下代码核对各数据的维度,排除归一化导致的维度异常:

print(data_train_norm.shape) # 正常应为(30000, 784)
print(label_train.shape) # 正常应为(30000,)
print(data_test_norm.shape) # 正常应为(5000, 784)
print(label_test.shape) # 正常应为(2000,)

如果维度不符合预期,检查归一化逻辑:必须用训练集单独拟合归一化器,再分别转换训练集、测试集,不能合并两类数据集做归一化,正确归一化示例代码如下:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# 仅用训练集拟合归一化规则
data_train_norm = scaler.fit_transform(data_train)
# 测试集直接复用训练集的归一化规则转换
data_test_norm = scaler.transform(data_test)

2. 适配不完整的测试标签计算准确率

由于只有前2000条测试数据有标签,计算准确率时仅提取对应数量的预测结果即可:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

knn = KNeighborsClassifier(n_neighbors=10)
knn.fit(data_train_norm, label_train)
# 全量预测5000条测试数据,无标签的3000条结果可保留后续使用
knn_label_pred = knn.predict(data_test_norm)
# 仅取前2000条有标签的预测结果计算准确率
acc = accuracy_score(label_test, knn_label_pred[:2000])
print(f"模型分类准确率:{acc:.4f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:36:05