2015-10-16 10 views
11

Próbuję zaimplementować klasyfikator SVM na podstawie zestawu danych MNIST. W moich parametrów są 3 wymiarowej jego rzucanie się następujący błąd:Python scikit-learn SVM Classifier "ValueError: Znaleziona tablica z dim 3. Oczekiwany <= 2"

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

Poniżej znajduje mój fragment kodu:

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) 

Czy sklearn wspierać wielowymiarową klasyfikator?

+1

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

Odpowiedz

9

Problem dotyczy danych wejściowych.

Można użyć sklearn załadować cyfrowy zbiór danych, a także:

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

Dzięki, Przekonwertowałem mój zestaw danych na mniejsze wymiary, jak to zrobiono dla sklearn.datasets. –

15

jedna opcja do mocowania problemu byłoby przekształcenia danych wejściowych w 2-wymiarowej tablicy.

Załóżmy, że Twoje dane treningowe składają się z 10 obrazów, z których każdy reprezentowany jest jako matryca 3x3, a zatem twoje dane wejściowe są trójwymiarowe.

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

Możemy zamienić każdy obraz w tablicę składającą się z 9 elementów, aby przekonwertować zestaw danych na 2-wymiarowe.

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

Byłoby to włączyć dane w następującym kształcie:

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