Ist es in Ordnung, kategoriale und kontinuierliche Daten für SVM (Support Vector Machines) zu mischen?

14

Ich habe einen Datensatz wie

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

Ich habe es in einen Vektorraum im LIBSVM-Format eingebettet

+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

Merkmalsindizes:

  • 1 ist "Einkommen"
  • 2 ist "Jahr"
  • 3 ist "use / COMMERCIAL EXEMPT"
  • 4 ist "use / CONDOMINIUM"
  • 5 ist "use / SINGLE FAMILY"
  • 6 ist "use / SHOP & HOUSE"

Ist es in Ordnung, eine Support Vector Machine (SVM) mit einer Mischung aus kontinuierlichen Daten (Jahr, Einkommen) und kategorialen Daten (Verwendung) wie diesen zu trainieren?

Seamus Abshere
quelle
3
Sie sollten "SVM" mindestens einmal buchstabieren.
Peter Flom - Wiedereinsetzung von Monica
1
Stellen Sie sicher, dass Sie diese Daten skalieren!
Patrick Caldon

Antworten:

7

Ja! Aber vielleicht nicht so, wie Sie es meinen. In meiner Forschung erstelle ich häufig kategoriale Features aus kontinuierlich bewerteten mithilfe eines Algorithmus wie der rekursiven Partitionierung . Normalerweise verwende ich diesen Ansatz bei der SVMLight- Implementierung von Support-Vektor-Maschinen, aber ich habe ihn auch bei LibSVM verwendet. Sie müssen sicherstellen, dass Sie Ihre partitionierten kategorialen Features während des Trainings und der Klassifizierung einer bestimmten Stelle in Ihrem Feature-Vektor zuweisen, da Ihr Modell sonst ziemlich unruhig wird.

Bearbeiten: Das heißt, wenn ich dies getan habe, ordne ich die ersten n Elemente des Vektors den Binärwerten zu, die mit der Ausgabe der rekursiven Partitionierung verbunden sind. Bei der Modellierung binärer Features haben Sie nur einen riesigen Vektor aus Nullen und Einsen, sodass für das Modell alles gleich aussieht, es sei denn, Sie geben ausdrücklich an, wo sich verschiedene Features befinden. Dies ist wahrscheinlich zu spezifisch, da ich mir vorstelle, dass die meisten SVM-Implementierungen dies von sich aus tun, aber wenn Sie Ihre eigenen programmieren möchten, ist dies möglicherweise eine Überlegung wert!

Kyle.
quelle
1
danke Kyle, kannst du etwas genauer sein? Was bedeutet "Zuweisen Ihrer partitionierten kategorialen Features zu einem bestimmten Ort"?
Seamus Abshere
@SeamusAbshere Kein Problem! Ich habe meine Antwort bearbeitet, um dies zu adressieren!
Kyle.
Ich habe das Gefühl, ich habe gehört, dass libsvm automatisch das tut, wovon Sie sprechen - irgendwelche Gedanken?
Seamus Abshere
@SeamusAbshere Ich stelle mir vor, Sie haben Recht, aber ich weiß es nicht genau. Jetzt, wo ich darüber nachdenke, bin ich mir nicht sicher, wie es anders funktionieren könnte.
Kyle.
Von @ Kyles Antwort ermutigt, habe ich eine Ruby-Bibliothek ( VectorEmbed ) geschrieben, die diese Konvertierung (Einbettung) automatisch sowohl für kategoriale (unter Verwendung von Murmur32-Hashes) als auch für kontinuierliche Daten durchführt. Es gibt libsvm-formatierte Dateien aus.
Seamus Abshere