Czy mieszanie danych jakościowych i ciągłych dla SVM (Support Vector Machines) jest w porządku?

14

Mam taki zestaw danych

+--------+------+-------------------+
| income | year |        use        |
+--------+------+-------------------+
|  46328 | 1989 | COMMERCIAL EXEMPT |
|  75469 | 1998 | CONDOMINIUM       |
|  49250 | 1950 | SINGLE FAMILY     |
|  82354 | 2001 | SINGLE FAMILY     |
|  88281 | 1985 | SHOP & HOUSE      |
+--------+------+-------------------+

Osadzam go w przestrzeni wektorowej formatu LIBSVM

+1 1:46328 2:1989 3:1
-1 1:75469 2:1998 4:1
+1 1:49250 2:1950 5:1
-1 1:82354 2:2001 5:1
+1 1:88281 2:1985 6:1

Wskaźniki funkcji:

  • 1 to „dochód”
  • 2 to „rok”
  • 3 to „use / COMMERCIAL EXEMPT”
  • 4 to „use / CONDOMINIUM”
  • 5 to „use / SINGLE FAMILY”
  • 6 to „use / SHOP & HOUSE”

Czy można trenować maszynę wektorów nośnych (SVM) z mieszanką danych ciągłych (rok, dochód) i kategorycznych (wykorzystanie) takich jak ten?

Seamus Abshere
źródło
3
Powinieneś przeliterować „SVM”, przynajmniej raz.
Peter Flom - Przywróć Monikę
1
Upewnij się, że skalujesz te dane!
Patrick Caldon

Odpowiedzi:

7

Tak! Ale może nie tak, jak myślisz. W swoich badaniach często tworzę cechy jakościowe z ciągle cenionych za pomocą algorytmu takiego jak partycjonowanie rekurencyjne . Zazwyczaj używam tego podejścia z implementacją SVMLight maszyn wektorów wsparcia, ale użyłem go również z LibSVM. Musisz upewnić się, że przypisujesz podzielone cechy jakościowe do określonego miejsca w wektorze funkcji podczas treningu i klasyfikacji, w przeciwnym razie twój model skończy się chaotycznie.

Edycja: to znaczy, kiedy to zrobiłem, przypisuję pierwsze n elementów wektora do wartości binarnych związanych z wyjściem partycjonowania rekurencyjnego. W binarnym modelowaniu obiektów po prostu masz gigantyczny wektor zer i jedynek, więc wszystko wygląda tak samo dla modelu, chyba że wyraźnie wskażesz, gdzie są różne funkcje. Jest to prawdopodobnie zbyt specyficzne, ponieważ wyobrażam sobie, że większość implementacji SVM zrobi to samodzielnie, ale jeśli lubisz programować, może być coś do przemyślenia!

Kyle.
źródło
1
dzięki Kyle, czy możesz być trochę bardziej szczegółowy? Co masz na myśli: „przypisz podzielone cechy podzielone na partycje w określone miejsce”?
Seamus Abshere
@SeamusAbshere Nie ma problemu! Zredagowałem moją odpowiedź, aby rozwiązać ten problem!
Kyle.
Wydaje mi się, że słyszałem, że libsvm robi to, o czym mówisz automatycznie - jakieś myśli?
Seamus Abshere
@SeamusAbshere Myślę, że masz rację, ale nie wiem na pewno. Teraz, gdy się nad tym zastanawiam, nie jestem pewien, jak mogłoby to działać w jakikolwiek inny sposób.
Kyle.
Ośmielony odpowiedzią @ Kyle'a napisałem bibliotekę Ruby ( VectorEmbed ), która automatycznie wykonuje tę konwersję (osadzanie), zarówno dla danych jakościowych (przy użyciu skrótów Murmur32), jak i ciągłych danych. Wyprowadza pliki w formacie libsvm.
Seamus Abshere