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

在Fashion MNIST上训练kNN模型遇维度错误,求解决方案

解决Fashion MNIST训练kNN的维度错误问题

错误原因

Scikit-learn的KNeighborsClassifier要求输入的特征数据是二维数组(形状为(n_samples, n_features)),但Fashion MNIST加载后的数据是三维的(样本数, 28, 28)——每个样本是28×28的图像矩阵,不符合模型的输入要求。

正确解决方案

必须将训练集和测试集的所有图像展平为一维特征向量(每个图像转为784维,28×28=784),且要保证训练集和测试集的展平操作完全一致。以下是修正后的完整代码:

from tensorflow import keras
from sklearn.neighbors import KNeighborsClassifier

# 加载数据集
(X_train, y_train), (X_test, y_test) = keras.datasets.fashion_mnist.load_data()

# 验证原始数据形状
assert X_train.shape == (60000, 28, 28)
assert X_test.shape == (10000, 28, 28)
assert y_train.shape == (60000,)
assert y_test.shape == (10000,)

# 展平特征:将每个28x28的图像转为784维向量
# 使用reshape(-1, 28*28)自动推导样本数量,避免手动计算出错
X_train_flat = X_train.reshape(-1, 28 * 28)
X_test_flat = X_test.reshape(-1, 28 * 28)

# 验证展平后的形状是否符合要求
assert X_train_flat.shape == (60000, 784)
assert X_test_flat.shape == (10000, 784)

# 初始化并训练kNN模型
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train_flat, y_train)

# 对测试集进行预测
y_pred = knn.predict(X_test_flat)

你可能踩过的坑

  • 仅展平了训练集但未处理测试集:预测时测试集仍为三维,会触发同样的维度错误
  • 展平操作参数错误:比如误用reshape(28, 28, -1),导致维度顺序混乱,依然不符合模型要求
  • 可选优化:kNN对特征尺度敏感,可将像素值归一化到[0,1](比如X_train_flat = X_train_flat / 255.0),能小幅提升模型性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:40:22