2016-06-30 7 views
1

hier ist zwei Methoden zur Normalisierung:python sklearn: was ist der Unterschied zwischen "sklearn.preprocessing.normalize (X, norm = 'l2')" und "sklearn.svm.LinearSVC (penalty = 'l2')"

1: dies ist in der Datenvorverarbeitung werden: sklearn.preprocessing.normalize (X, norm = 'l2')

2: die andere Methode ist in dem Klassifizieren Methode verwendet: sklearn.svm. LinearSVC (Penalty = 'l2')

ich möchte wissen, was ist der Unterschied zwischen ihnen? Und müssen die zwei Schritte in einem vollständigen Modell verwendet werden? ist es richtig, dass nur eine Methode ausreicht?

Antwort

2

Diese 2 sind verschiedene Dinge und normalerweise brauchen Sie beide, um ein gutes SVC-Modell zu machen.

1) Die erste bedeutet, dass, um die X-Daten zu skalieren (normalisiert) -Matrix Sie mit der L2-Norm der einzelnen Spalten zu unterteilen müssen, die gerade diese: sqrt(sum(abs(X[:,j]).^2)), wobei j jede Spalte in der Datenmatrix ist, X. Dies stellt sicher, dass keiner der Werte jeder Spalte zu groß wird, was es für einige Algorithmen schwierig macht, zu konvergieren.

2) Unabhängig davon, wie skalierten (und kleine Werte) Ihre Daten sind, kann es immer noch Ausreißern oder einige Funktionen (j) sein, die viel zu dominant und Ihr Algorithmus (LinearSVC()) vertrauen kann über ihnen während es nicht sollte. Dies ist, wo L2 Regularisierung ins Spiel kommt, das sagt, abgesehen von der Funktion, die der Algorithmus minimiert, wird ein Preis auf die Koeffizienten angewendet werden, so dass sie nicht zu groß werden. Mit anderen Worten, die Koeffizienten des Modells werden zusätzliche Kosten für die SVR-Kostenfunktion. Wie viel kostet ? wird durch den C (L2) -Wert als C*(beta[j])^2

entschieden. Zusammenfassend wird zuerst gesagt, mit welchem ​​Wert jede Spalte der X-Matrix geteilt wird. Wie viel Gewicht ein Koeffizient die Kostenfunktion belastet, ist der zweite.