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?
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
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
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))))". –