Python scikit-learn SVM Classifier"ValueError:找到带有暗淡的数组3.预期<= 2"

Hit*_*ari 11 python svm scikit-learn

我试图在MNIST数据集上实现SVM分类器.由于我的参数是3维,因此抛出以下错误:

ValueError: Found array with dim 3. Expected <= 2
Run Code Online (Sandbox Code Playgroud)

以下是我的代码段:

import mnist
from sklearn import svm

training_images, training_labels = mnist.load_mnist("training", digits = [1,2,3,4])
classifier = svm.SVC()
classifier.fit(training_images, training_labels)
Run Code Online (Sandbox Code Playgroud)

sklearn是否支持多维分类器?

Zah*_*hra 15

解决问题的一个选择是将输入数据重新整形为二维数组.

假设您的训练数据由10个图像组成,每个图像都表示为3x3矩阵,因此您的输入数据是3维的.

[ [[1,2,3],   [[1,2,3],           [
   [4,5,6],    [4,5,6],            image 10 
   [7,8,9]] ,  [7,8,9]]  , ... ,           ] ]
Run Code Online (Sandbox Code Playgroud)

我们可以将每个图像转换为9个元素的数组,以便将数据集转换为2维.

dataset_size = len(training_images)
TwoDim_dataset = dataset.reshape(dataset_size,-1)
Run Code Online (Sandbox Code Playgroud)

这会将数据转换为以下形状:

[ [1,2,3,4,5,6,7,8,9]  ,  [1,2,3,4,5,6,7,8,9]  , ... ,  [image 10] ]
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 9

问题出在输入数据上.

您也可以sklearn用来加载数字数据集:

from sklearn.datasets import load_digits
from sklearn import svm

digits = load_digits()
X = digits.data
y = digits.target

classifier = svm.SVC()
classifier.fit(X[:1000], y[:1000])
predictions = classifier.predict(X[1000:])
Run Code Online (Sandbox Code Playgroud)