Kontinuierliche und binäre Daten mit linearer SVM mischen?

15

Also habe ich mit SVMs rumgespielt und ich frage mich, ob das eine gute Sache ist:

Ich habe eine Reihe von fortlaufenden Features (0 bis 1) und eine Reihe von kategorialen Features, die ich in Dummy-Variablen konvertiert habe. In diesem speziellen Fall codiere ich das Datum der Messung in eine Dummy-Variable:

Es gibt 3 Zeiträume, von denen ich Daten habe und für die ich 3 Merkmalsnummern reserviert habe:

20: 21: 22:

Je nachdem aus welchem ​​Zeitraum die Daten stammen, werden verschiedene Funktionen 1 zugewiesen. die anderen bekommen 0.

Funktioniert die SVM damit richtig oder ist dies eine schlechte Sache?

Ich benutze SVMLight und einen linearen Kernel.

user3010273
quelle
Das funktioniert gut.
Marc Claesen
Was Sie getan haben, ist gut genug. Ich habe hier eine etwas ausführliche Antwort gegeben - quora.com/Machine-Learning/…
TenaliRaman
@TenaliRaman posten Sie bitte keine Links zu Websites, für die Sie sich anmelden müssen, bevor Sie tatsächlich etwas lesen können.
Marc Claesen
@MarcClaesen Ich habe die Antwort unten repliziert.
TenaliRaman

Antworten:

8

SVMs verarbeiten sowohl binäre als auch kontinuierliche Variablen, solange Sie eine Vorverarbeitung durchführen: Alle Features sollten skaliert oder normalisiert werden. Nach diesem Schritt ist es aus der Perspektive der Algorithmen unerheblich, ob Features kontinuierlich oder binär sind: Bei Binärdateien werden Beispiele angezeigt, die entweder "weit" entfernt oder sehr ähnlich sind. für stetig gibt es auch die dazwischen liegenden Werte. Der Kernel spielt in Bezug auf die Art der Variablen keine Rolle.

iliasfl
quelle
1
und was wäre die beste normalisierungstechnik?
Shlomi Schwartz
23

Repliziere meine Antwort von http://www.quora.com/Machine-Learning/What-good-ways-to-handle-discrete-and-continuous-inputs-together/answer/Arun-Iyer-1

  • Begrenzte fortlaufende Features neu skalieren: Alle fortlaufenden Eingaben, die begrenzt sind, skalieren sie neu auf durch x = 2 x - max - min[1,1] .x=2xmaxminmaxmin
  • Alle stetigen Merkmale standardisieren : Alle stetigen Eingaben sollten standardisiert sein. Damit meine ich, dass für jedes stetige Merkmal der Mittelwert ( ) und die Standardabweichung ( σ ) berechnet werden und x = giltμσ .x=xμσ
  • Kategoriale / diskrete Features binarisieren: Stellen Sie alle kategorialen Features als mehrere boolesche Features dar. Anstatt beispielsweise ein Feature namens "Marriage_status" zu haben, müssen Sie drei boolesche Features haben - "married_status_single", "married_status_married", "married_status_divorced" und diese Features entsprechend auf 1 oder -1 setzen. Wie Sie sehen, fügen Sie für jedes kategoriale Merkmal k binäre Merkmale hinzu, wobei k die Anzahl der Werte ist, die das kategoriale Merkmal annimmt.

Jetzt können Sie alle Features in einem einzigen Vektor darstellen, von dem wir annehmen können, dass er in eingebettet ist, und Standardpakete für die Klassifizierung / Regression usw. verwenden.Rn

Anhang: Wenn Sie kernelbasierte Methoden verwenden, können Sie diese explizite Einbettung in R n vermeidenRn und sich darauf konzentrieren, benutzerdefinierte Kernel für Ihre Feature-Vektoren zu entwerfen. Sie können Ihren Kernel sogar in mehrere Kernel aufteilen und MKL-Modelle verwenden, um Gewichte darüber zu lernen. Möglicherweise möchten Sie jedoch eine positive Halbbestimmtheit Ihres Kernels sicherstellen, damit der Löser keine Probleme hat. Wenn Sie jedoch nicht sicher sind, ob Sie benutzerdefinierte Kernel entwerfen können, können Sie einfach dem früheren Ansatz zum Einbetten folgen.

TenaliRaman
quelle
Nun, dieser Artikel ist sehr interessant in Bezug auf kategoriale Merkmale. Es wird nicht gesagt, dass One-Hot-Codierung die beste Wahl für kategoriale Features ist.
Anzeigename
1
Dies ist eine ausgezeichnete Antwort. Ich habe den Link in @displayname comment gelesen und es ist ein nützlicher Vergleich. Aus dem Artikel geht hervor, dass die Binärkodierung die beste ist (nicht die in dieser Antwort beschriebene) und auch ganz einfach ist. Aus dem Link "Binär: Zuerst werden die Kategorien als Ordnungszahl kodiert, dann werden diese Ganzzahlen in Binärzahlen konvertiert Code, dann werden die Ziffern dieser Binärzeichenfolge in separate Spalten aufgeteilt. Dadurch werden die Daten in weniger Dimensionen codiert als bei einem Hot, aber mit einer gewissen Verzerrung der Abstände. "
Shelbypereira
Der von @displayname angegebene Artikel ist ein guter Artikel, sollte aber nicht zum Nennwert angenommen werden. Das Erste, woran man sich erinnern sollte, ist, dass fast alle ML-Methoden entweder mit Ähnlichkeits- oder Distanzmaß arbeiten. Die Wahl der Codierungsmethode hat direkten Einfluss darauf, wie die Abstände oder Ähnlichkeiten zwischen zwei Punkten gemessen werden. Eine 1-Hot-Codierung besagt, dass ein Objekt einer Kategorie nur sich selbst oder gleichwertig ähnelt und alle Kategorien in gleichem Abstand zueinander angeordnet sind. Es gibt jedoch Fälle, in denen bestimmte Kategorien näher liegen als andere. In diesem Fall kann eine andere Codierung hilfreich sein.
TenaliRaman