2015-10-16 24 views
11

Sto cercando di implementare SVM Classifier su dataset MNIST. Come i miei parametri sono 3 dimensionale il suo lancio il seguente errore:Python scikit-learn SVM Classifier "ValueError: Found array with dim 3. Expected <= 2"

ValueError: Found array with dim 3. Expected <= 2 

segue è il mio frammento di codice:

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) 

Does sklearn sostenere un classificatore multidimensionale?

+1

correlati: http://stackoverflow.com/questions/34972142/sklearn-logistic-regression-valueerror-found-array-with -dim-3-estimator-expec – michael

risposta

9

Il problema riguarda i dati di input.

È possibile utilizzare sklearn per caricare un set di dati e cifre:

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:]) 
+0

Grazie, convertito il mio set di dati in dimensioni inferiori come fatto per sklearn.datasets. –

15

Una delle possibilità per risolvere il problema sarebbe quello di rimodellare i dati di input in una matrice a 2 dimensioni.

Supponiamo che i dati di allenamento siano costituiti da 10 immagini rappresentate ciascuna come una matrice 3x3 e pertanto i dati di input sono tridimensionali.

[ [[1,2,3], [[1,2,3],   [ 
    [4,5,6], [4,5,6],   image 10 
    [7,8,9]] , [7,8,9]] , ... ,   ] ] 

Possiamo trasformare ciascuna immagine in una matrice di 9 elementi per convertire il set di dati in 2 dimensioni.

dataset_size = len(training_images) 
TwoDim_dataset = dataset.reshape(dataset_size,-1) 

Ciò trasformare i dati nella forma seguente:

[ [1,2,3,4,5,6,7,8,9] , [1,2,3,4,5,6,7,8,9] , ... , [image 10] ]