我正在尝试制作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),
在这里已被多次询问,但我找不到解决方案。任何帮助将不胜感激
答案 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