使用Scikit Learn SGDClassifier触发only size-1 arrays报错如何解决?
问题解决方法
你遇到的报错核心是输入SGDClassifier的特征矩阵格式不符合要求:
你当前构造的X是一个单列的DataFrame,每一行的pixel_grayscale单元格存储的是长度为128*128的一维数组,整体结构是「样本数 × 1列,每列元素是数组」;而Scikit Learn要求所有模型输入的特征矩阵必须是二维数值矩阵,结构为「样本数 × 特征数,每个单元格是单独的数值」,格式不匹配触发了报错。
解决步骤
只需要修改特征矩阵X的构造逻辑,把存储数组的单列展开为二维矩阵即可,修改代码如下:
把原来的
X = extract[features]
替换为:
# 将每一行的像素数组合并为二维矩阵,形状为 [样本数, 128*128] import numpy as np X = np.stack(extract["pixel_grayscale"].values)
修改完成后可以先打印X的形状验证是否正确:
print(X.shape)
输出应为(你的总样本量, 16384)即为符合要求的格式,后续拆分训练集测试集、模型训练的代码无需改动即可正常运行。
可选优化
可以在pixel_grayscale函数中加判空逻辑,避免图片读取失败返回None导致后续数组构造报错:
def pixel_grayscale(file): file = file.split() if len(file) == 2 : image = imread("chi/"+file[0], as_gray=True) else : image = imread("muf/"+file[0], as_gray=True) # 新增判空逻辑 if image is None: raise ValueError(f"图片读取失败: {file[0]}") image = cv2.resize(image,(128,128), interpolation=cv2.INTER_CUBIC) return np.reshape(image,(128*128))
内容的提问来源于stack exchange,提问作者IA_Machine
相关产品推荐
相关产品推荐

