ValueError:使用GaussianNB在scikit-learn(sklearn)中使用序列设置数组元素

时间:2018-07-25 05:33:17

标签: python-3.x image machine-learning scikit-learn classification

我正在尝试制作sklearn图像分类器,但无法将数据放入分类器中。

x_train = np.array(im_matrix)
y_train = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
clf = GaussianNB()
clf.fit(x_train, y_train)

clf.fit(x_train, y_train)处出现以下错误:

  

ValueError:设置具有序列的数组元素。

im_matrix是一个保存图像矩阵的数组:

for file in files:
        path = os.path.join(root, file)
        im_matrix.append(mpimg.imread(path))
x_train的

形状是(10,1) y_train的形状是(10,)

我想问题出在x_train的形状怪异:

array([array([[[227, 255, 233],
        [227, 255, 233],
        [227, 255, 233],
        ...,
        [175, 140, 160],
        [175, 140, 160],
        [175, 140, 160]],

       [[227, 255, 233],
        [227, 255, 233],
        [227, 255, 233],
        ...,
        [174, 139, 159],
        [174, 139, 159],
        [174, 139, 159]],

       [[227, 255, 233],
        [227, 255, 233],
        [227, 255, 233],
        ...,
        [173, 138, 158],
        [173, 138, 158],
        [173, 138, 158]],

       ...,

       [[199, 222, 253],
        [121, 142, 169],
        [ 13,  34,  55],
        ...,
        [ 31,  40,  49],
        [ 31,  40,  49],
        [ 32,  41,  50]],

       [[187, 206, 246],
        [ 80,  98, 134],
        [  0,  13,  41],
        ...,
        [ 36,  44,  63],
        [ 35,  43,  62],
        [ 35,  43,  62]],

       [[187, 206, 246],
        [ 80,  98, 134],
        [  0,  13,  41],
        ...,
        [ 36,  44,  63],
        [ 35,  43,  62],
        [ 35,  43,  62]]], dtype=uint8),

在这里已被多次询问,但我找不到解决方案。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

大多数(如果不是全部)scikit学习函数期望将形状为X的{​​{1}}作为输入2D array

查看文档:{​​{3}}

  

根据X,y拟合高斯朴素贝叶斯

     

参数:X:类似数组,形状(n_samples,n_features)

     

训练向量,其中n_samples是样本数,   n_features是特征的数量。

要解决您的问题,请使用图像的矢量表示形式,然后将每个矢量作为行放在(n_samples, n_features)矩阵中。

最后,使用此X来拟合x_train


如何矢量化图像?

使用类似这样的内容:

GaussianNB