2013-03-15 10 views
9

Ich benutze libSVM. meine Merkmalswerte Sagen in folgendem Format sind:svm Skalierung Eingabewerte

      instance1 : f11, f12, f13, f14 
         instance2 : f21, f22, f23, f24 
         instance3 : f31, f32, f33, f34 
         instance4 : f41, f42, f43, f44 
         .............................. 
         instanceN : fN1, fN2, fN3, fN4 

Ich denke, es gibt zwei Skalierung angewendet werden können.

  1. skalieren Sie jeden Instanzvektor so, dass jeder Vektor eine Null-Mittelwert- und Einheitsvarianz hat.

    ((f11, f12, f13, f14) - mean((f11, f12, f13, f14)). /std((f11, f12, f13, f14)) 
    
  2. skalieren Sie jede Spalte der oben genannten Matrix auf einen Bereich. zum Beispiel [-1, 1]

Nach meinen Versuchen mit RBF-Kernel (libSVM) fand ich, dass die zweite Skalierung (2) die Ergebnisse um etwa 10% verbessert. Ich habe den Grund nicht verstanden, warum (2) mir bessere Ergebnisse liefert.

Kann mir jemand erklären, was der Grund für die Anwendung der Skalierung ist und warum die zweite Option bessere Ergebnisse liefert?

+0

Bevor Sie versuchen, dies zu beantworten ... Ist jede Spalte in der gleichen Reihe? zum Beispiel sind fn1 und fnm [0,100]? – Pedrom

+0

nein es könnte irgendeine Reichweite sein. zum Beispiel die erste Spalte stellt das Alter dar, und die zweite stellt das Gehalt usw. dar. – user570593

+0

Gut, abhängig davon, wie Sie den Mittelwert und die Standardabweichung berechnen, könnten sie durch den größten Bereich verzerrt sein. Auf der anderen Seite glaube ich nicht, dass es garantiert ist, dass dieser Maßstab im Bereich [-1,1] liegen würde, was der numerische freundliche Bereich für RBF auf libSVM ist. – Pedrom

Antwort

15

Die Standardmaßnahme ist, dass jede Dimension (oder Attribut oder Spalte (in Ihrem Beispiel)) null Mittelwert und Einheitsvarianz hat.

Dies bringt jede Dimension der SVM in die gleiche Größenordnung. Von http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf:

Der Hauptvorteil der Skalierung ist Attribut in größeren numerischen Bereichen diejenigen in kleineren numerischen Bereichen zu vermeiden, zu dominieren. Ein weiterer Vorteil ist die Vermeidung von numerischen Schwierigkeiten bei der Berechnung. Da Kernwerte normalerweise von abhängen, sind die inneren Produkte von Merkmalsvektoren, z. der lineare Kern und das Polynom können große numerische Werte zu numerischen Problemen führen. Wir empfehlen linear Skalierung jedes Attributs auf den Bereich [-1, + 1] oder [0,1].

+1

Ja, das Skalieren von Spalten ist der normale Weg, dies zu tun. Die Skalierung von Zeilen macht keinen Sinn: Wenn Ihre beiden Merkmale Alter (in Jahren) und Gehalt (in Tausenden von Dollar) wären, würde ein 15-Jähriger, der $ 15.000 verdient, und ein 60-Jähriger, der $ 60.000 verdient, gemacht werden genau identisch erscheinen! – Dougal

3

Ich glaube, dass es auf Ihre ursprünglichen Daten viel kommt.

Wenn Ihre Originaldaten einige Extremwerte für einige Spalten haben, dann verlieren Sie meiner Meinung nach eine gewisse Definition, wenn Sie linear skalieren, zum Beispiel im Bereich [-1,1].

Angenommen, Sie haben eine Spalte, in der 90% der Werte zwischen 100 und 500 liegen, und in den restlichen 10% sind die Werte so niedrig wie -2000 und so hoch wie +2500.

Wenn Sie diese Daten linear skalieren, dann werden Sie haben:

-2000 -> -1 ## <- The min in your scaled data 
+2500 -> +1 ## <- The max in your scaled data 

100 -> -0.06666666666666665 
234 -> -0.007111111111111068 
500 -> 0.11111111111111116 

Man könnte argumentieren, dass die Unterscheidbarkeit zwischen dem, was ursprünglich 100 und 500 in den skalierten Daten im Vergleich kleiner ist, was es war in die ursprünglichen Daten.

Am Ende, ich glaube, es kommt sehr auf die Besonderheiten Ihrer Daten und ich glaube, die 10% verbesserte Leistung ist sehr zufällig, werden Sie sicherlich keinen Unterschied dieser Größenordnung in jedem Datensatz sehen Sie beide Skalierung versuchen Methoden auf.

Zur gleichen Zeit, in dem Papier in der Verknüpfung in der anderen Antwort aufgelistet, können Sie deutlich sehen, dass die Autoren empfehlen, Daten linear skaliert werden.

Ich hoffe jemand findet das nützlich!

+0

Ja. Sie können cap/floor verwenden, um Extremwerte zu entfernen, und dann eine Transformation anwenden, die den Datenbereich erweitert, in dem die meisten Diskriminierungen auftreten. Ich habe reale Beispiele gesehen, wo dies die Dinge sehr verbessert. –