Mieszanie danych ciągłych i binarnych z liniowym SVM?

15

Więc bawiłem się SVM i zastanawiam się, czy to dobra rzecz:

Mam zestaw funkcji ciągłych (od 0 do 1) i zestaw cech kategorycznych, które przekonwertowałem na zmienne obojętne. W tym konkretnym przypadku koduję datę pomiaru w zmiennej zastępczej:

Są 3 okresy, z których mam dane i zarezerwowałem dla nich 3 numery funkcji:

20: 21: 22:

Zatem w zależności od okresu, z którego pochodzą dane, różne funkcje otrzymają 1 przypisany; inni otrzymają 0.

Czy SVM będzie działał poprawnie z tym, czy to źle?

Używam SVMLight i liniowego jądra.

użytkownik3010273
źródło
To działa dobrze.
Marc Claesen
To, co zrobiłeś, jest wystarczająco dobre. Dałem tutaj nieco szczegółową odpowiedź - quora.com/Machine-Learning/...
TenaliRaman
@TenaliRaman, proszę, nie publikuj linków do stron, które wymagają zalogowania się, zanim będziesz mógł cokolwiek przeczytać.
Marc Claesen
@MarcClaesen Powtórzyłem odpowiedź poniżej.
TenaliRaman

Odpowiedzi:

8

SVM będzie obsługiwał zarówno zmienne binarne, jak i ciągłe, o ile wykonasz wstępne przetwarzanie: wszystkie funkcje powinny być skalowane lub znormalizowane. Po tym kroku z punktu widzenia algorytmów nie ma znaczenia, czy cechy są ciągłe czy binarne: w przypadku plików binarnych widzi próbki, które są albo „daleko”, albo bardzo podobne; dla ciągłego są również wartości pośrednie. Jądro nie ma znaczenia w odniesieniu do rodzaju zmiennych.

iliasfl
źródło
1
i jaka byłaby najlepsza technika normalizacji?
Shlomi Schwartz
23

Replikując moją odpowiedź z http://www.quora.com/Machine-Learning/What-are-good-ways-to-handle-discrete-and-continuous-inputs-together/answer/Arun-Iyer-1

  • Przeskaluj ograniczone funkcje ciągłe: Wszystkie ograniczone ciągłe dane wejściowe, przeskaluj je do do x = 2 x - max - min[1,1] .x=2xmaxminmaxmin
  • Standaryzuj wszystkie funkcje ciągłe: wszystkie ciągłe dane wejściowe powinny być znormalizowane i mam na myśli to, że dla każdej funkcji ciągłej oblicz jej średnią ( ) i odchylenie standardowe ( σ ) i wykonaj x = x - μμσ .x=xμσ
  • Binarizacja cech jakościowych / dyskretnych: we wszystkich cechach jakościowych przedstaw je jako wiele cech boolowskich. Na przykład zamiast jednej funkcji o nazwie mariactwo_status, mają 3 funkcje boolowskie - married_status_single, married_status_married, married_status_divorced i odpowiednio ustawiają te funkcje na 1 lub -1. Jak widać, do każdej funkcji jakościowej dodajesz k funkcji binarnej, gdzie k jest liczbą wartości, które przyjmuje funkcja jakościowa.

Teraz możesz przedstawić wszystkie funkcje w jednym wektorze, co do którego możemy założyć, że są osadzone w i zacząć korzystać z gotowych pakietów do klasyfikacji / regresji itp.Rn

Rn

TenaliRaman
źródło
Cóż, ten artykuł jest dość interesujący pod względem cech jakościowych. Nie jest powiedziane, że kodowanie „na gorąco” jest najlepszym wyborem dla funkcji jakościowych.
nazwa wyświetlana
1
to doskonała odpowiedź, czytam link w komentarzu @displayname i jest to przydatne porównanie. Z artykułu wynika, że ​​kodowanie binarne jest najlepsze (nie gorąca opisana w tej odpowiedzi) i dość proste). Z linku „Binarny: najpierw kategorie są kodowane jako porządkowe, a następnie te liczby całkowite są konwertowane na binarne kod, a następnie cyfry z tego ciągu binarnego są dzielone na osobne kolumny. To koduje dane w mniejszej liczbie wymiarów niż jeden gorący, ale z pewnym zniekształceniem odległości. ”
shelbypereira,
Artykuł podany przez @displayname jest dobrym artykułem, ale nie powinien być traktowany jako wartość nominalna. Pierwszą rzeczą do zapamiętania jest to, że prawie wszystkie metody ML działają z miarą podobieństwa lub odległości. Wybór metody kodowania ma bezpośredni wpływ na sposób pomiaru odległości lub podobieństwa między dwoma punktami. Gorące kodowanie 1 mówi, że obiekt jednej kategorii jest podobny tylko do siebie lub równoważnie, umieszcza wszystkie kategorie w równej odległości od siebie. Są jednak przypadki, w których niektóre kategorie są bliższe niż inne. W takim przypadku może pomóc inne kodowanie.
TenaliRaman,