2012-11-10 19 views
8

Podczas gdy libsvm dostarcza narzędzi do skalowania danych, z Scikit-Learn (który powinien być oparty na libSVM dla klasyfikatora SVC) Nie znajduję sposobu na skalowanie moich danych.Skalowanie danych w scikit-learn SVM

Zasadniczo chcę użyć 4 funkcji, z których 3 mają zakres od 0 do 1, a ostatni to "duża" wysoce zmienna liczba.

Jeśli dołączę czwartą funkcję do biblioteki libSVM (używając skryptu easy.py, który automatycznie skaluje moje dane), otrzymuję bardzo dobre wyniki (dokładność 96%). Jeśli dołączę czwartą zmienną w Scikit-Dowiedz się, że dokładność spada do ~ 78% - ale jeśli ją wykluczę, otrzymuję takie same wyniki, jakie uzyskuję w libSVM, gdy wykluczam tę funkcję. Dlatego jestem pewien, że jest to problem braku skalowania.

Jak mogę replikować programowo (tj. Bez wywoływania skali svm) proces skalowania SVM?

Odpowiedz

6

Trzeba tę funkcjonalność w sklearn.preprocessing:

>>> from sklearn import preprocessing 
>>> X = [[ 1., -1., 2.], 
...  [ 2., 0., 0.], 
...  [ 0., 1., -1.]] 
>>> X_scaled = preprocessing.scale(X) 

>>> X_scaled           
array([[ 0. ..., -1.22..., 1.33...], 
     [ 1.22..., 0. ..., -0.26...], 
     [-1.22..., 1.22..., -1.06...]]) 

Dane będą następnie zero średniej i wariancji jednostkowej.

+0

Dobrze wiedzieć, dzięki. Czy powinienem ustandaryzować dane testowe razem z danymi pociągu i pokroić je później, czy też powinienem sam wykonywać tylko dane testowe? – luke14free

+3

Jest to wspomniane w [dokumentacji] (http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling). Sądzę, że powinieneś zrobić to osobno, inaczej dane treningowe będą miały wpływ na próbki testowe. Za pomocą klasy 'Scaler' można obliczyć średnie i standardowe odchylenie danych treningowych, a następnie zastosować te same transformacje do danych testowych. – Maehler

+8

Do tego celu powinieneś użyć 'Scaler', a nie funkcji wolnostojącej' scale'. Skaler może być podłączony do 'Pipeline', np. 'scaling_svm = Pipeline ([(" skaler ", Scaler()), (" svm ", SVC (C = 1000))))". –