Frage:
Ist es eine gute Praxis, Daten für maschinelles Lernen immer zu skalieren / zu normalisieren?
Juan Antonio Gomez Moriano
2016-01-07 10:09:44 UTC
view on stackexchange narkive permalink

Mein Verständnis ist, dass, wenn einige Features unterschiedliche Wertebereiche haben (stellen Sie sich beispielsweise vor, ein Feature ist das Alter einer Person und ein anderes das Gehalt in USD), sich negativ auf Algorithmen auswirkt, da das Feature mit größeren Werten verwendet wird Mehr Einfluss, ist es eine gute Praxis, die Daten IMMER einfach zu skalieren / zu normalisieren?

Wenn die Werte dann bereits ähnlich sind, hat die Normalisierung nur geringe Auswirkungen, aber wenn die Werte Sind sehr unterschiedliche Normalisierungen helfen, aber es fühlt sich zu einfach an, um wahr zu sein :)

Vermisse ich etwas? Gibt es Situationen / Algorithmen, in denen es tatsächlich wünschenswert ist, einige Funktionen absichtlich andere überwiegen zu lassen?

Siehe auch: http://stats.stackexchange.com/questions/89809/is-it-important-to-scale-data-before-clustering
Sieben antworten:
#1
+54
one_observation
2016-01-07 10:53:13 UTC
view on stackexchange narkive permalink

Das Wichtigste zuerst, ich glaube nicht, dass es viele Fragen der Form "Ist es eine gute Praxis, beim maschinellen Lernen immer X zu sein" gibt, bei denen die Antwort endgültig sein wird. Immer? Immer immer? Über parametrische, nicht parametrische, Bayes'sche, Monte-Carlo-, sozialwissenschaftliche, rein mathematische und Millionen-Feature-Modelle hinweg? Das wäre schön, nicht wahr?

Konkret gibt es hier einige Möglichkeiten: Es kommt nur darauf an.

Manchmal ist Normalisierung gut:

1) Mehrere Algorithmen, insbesondere SVMs, können bei normalisierten Daten manchmal viel schneller konvergieren (obwohl ich mich genau daran nicht erinnern kann).

2) Wenn Ihr Modell empfindlich auf die Größe reagiert und die Einheiten zweier verschiedener Merkmale unterschiedlich und beliebig sind. Dies ist wie in dem von Ihnen vorgeschlagenen Fall, in dem etwas mehr Einfluss erhält, als es sollte.

Aber natürlich sind nicht alle Algorithmen in der von Ihnen vorgeschlagenen Weise abhängig von der Größe. Lineare Regressionskoeffizienten sind identisch, wenn Sie Ihre Daten skalieren oder nicht, da proportionale Beziehungen zwischen ihnen betrachtet werden.

Manchmal wird normalisiert schlecht:

1) Wenn Sie Ihre Koeffizienten interpretieren möchten und sie sich nicht gut normalisieren. Regression auf so etwas wie Dollar gibt Ihnen ein aussagekräftiges Ergebnis. Eine Regression des Anteils des maximalen Dollars in der Stichprobe ist möglicherweise nicht möglich.

2) Wenn tatsächlich die Einheiten Ihrer Funktionen von Bedeutung sind und die Entfernung einen Unterschied macht! Zurück zu SVMs - Wenn Sie versuchen, einen Max-Margin-Klassifikator zu finden, sind die Einheiten, die in diesen 'Max'-Bereich fallen, von Bedeutung. Skalierungsfunktionen für Clustering-Algorithmen können das Ergebnis erheblich verändern. Stellen Sie sich vier Cluster um den Ursprung vor, die sich jeweils in einem anderen Quadranten befinden und alle gut skaliert sind. Stellen Sie sich nun vor, die y-Achse wird auf das Zehnfache der Länge der x-Achse gedehnt. Anstelle von vier kleinen Quadranten-Clustern erhalten Sie das lange gequetschte Baguette mit Daten, das entlang seiner Länge in vier Teile geschnitten wird! (Und der wichtige Teil ist, dass Sie vielleicht beides bevorzugen!)

In der sicher unbefriedigenden Zusammenfassung lautet die allgemeinste Antwort, dass Sie sich ernsthaft fragen müssen, was mit den Daten Sinn macht. und Modell, das Sie verwenden.

Vielen Dank für die Antwort, aber hier ist eine andere Frage: Sie sagen, dass in Regressionsmodellen, die beispielsweise das Gehalt (1000-100000) und das Alter (10-80) normalisieren, nicht viel helfen (insbesondere, weil man die Bedeutung von verliertZahlen ...), aber wenn ich das nicht normalisiere, wird es passieren, dass das Gehalt das Alter überwiegt, nicht wahr?
Was meinst du mit überwiegen?Ich gehe davon aus, dass Gehalt und Alter hier beide unabhängige Variablen sind.Wenn Sie sie normalisieren, werden nur die Einheiten ihrer Koeffizienten geändert.Aber zum Beispiel, weil es klarer als eine Normalisierungskonstante ist, lassen Sie uns durch 1000 teilen. Aber dann bedeutet Ihr Koeffizient nur Änderung pro - \ $ 1000-Änderung im Gegensatz zu Änderung pro - \ $ 1-Änderung.Die Zahlen sind unterschiedlich, aber Sie sollten immer darüber nachdenken, was Ihre Koeffizienten bedeuten - Sie können einfach nicht mit den Zahlen allein aufhören.
Indem ich sie normalisiere, meine ich, eine Funktion wie Skala in r zu verwenden, wie Daten $ age <-Skala (Daten $ Alter) und Daten $ Gehalt <- Skala (Daten $ Gehalt).Letztendlich lernt man bei der Verwendung einer logistischen Regression nur die Parameter für einen Vektor, richtig?Wenn ein solcher Vektor einige Variablen enthält, deren Werte in einem viel größeren Bereich liegen als andere, wäre das kein Problem?Ich habe mit und ohne skalierte Daten für die logistische Regression gespielt und die Skalierung scheint zu helfen ... Vermisse ich etwas?
_Normalizing_, ich verstehe - Sie haben das Wort _outweigh_ verwendet, und ich verstehe immer noch nicht, wie Sie es verwenden.Und wieder scheint die Skalierung "zu helfen" - was meinst du?Hilfe _how_?
Möglicherweise ist es mein Englisch :).Was ich damit meine ist, dass angesichts der Tatsache, dass eine Variable (Gehalt) einen größeren Bereich als die andere (z. B. Alter) hat, das Alter für die Durchführung von Vorhersagen nur eine sehr geringe Bedeutung hat, während das Gehalt der bestimmende Faktor ist, und das istnicht immer wünschenswert.Mit "scheint zu helfen" meine ich, dass beim Versuch eines Modells, das mit / ohne skalierte Werte trainiert wurde, das skalierte Modell besser verallgemeinert wird (unter Verwendung des Kreuzvalidierungssatzes).Ich hoffe das klärt sich :)
@JuanAntonioGomezMoriano: Das stimmt nicht: Lineare Modelle sind gegenüber linearen Transformationen ihrer Prädiktoren unveränderlich.Nur wenn Sie Koeffizientenschätzungen entsprechend ihrer Größe bestrafen, spielt dies eine Rolle (ein Fall von Sophologist's 2. Punkt).Siehe [Wenn Sie eine multiple Regression durchführen, wann sollten Sie Ihre Prädiktorvariablen zentrieren und wann sollten Sie sie standardisieren?] (Http://stats.stackexchange.com/q/29781/17230).Wenn die Skalierung von Prädiktoren zu * überhaupt * Änderungen * der Vorhersagen führt, hat dies mit numerischen Problemen in Ihrem Anpassungsalgorithmus zu tun.
"Lineare Regressionskoeffizienten sind identisch, wenn Sie Ihre Daten skalieren oder nicht".Dies gilt für die Skalierung von Ein- und Ausgängen um einen einzigen konstanten Wert.Eine separate Skalierung jedes Features (oder der Ausgabe) würde jedoch die Koeffizienten ändern.
Eine Sache, die noch niemand erwähnt hat, ist die Auswirkung der Differenzskalen unabhängiger Variablen auf den "Achsenabschnitt" des Modells.Es kann definitiv zu negativen Abschnitten kommen, die schwer zu interpretieren sind (eher einer Führungskraft erklären).
#2
+19
Amir
2016-01-07 10:56:06 UTC
view on stackexchange narkive permalink

Nun, ich glaube, eine geometrischere Sichtweise hilft bei der besseren Entscheidung, ob Normalisierung hilft oder nicht. Stellen Sie sich vor, Ihr interessierendes Problem hat nur zwei Funktionen und sie variieren unterschiedlich. Dann werden die Datenpunkte geometrisch verteilt und bilden ein Ellipsoid. Wenn die Merkmale jedoch normalisiert sind, sind sie konzentrierter und bilden hoffentlich einen Einheitskreis und machen die Kovarianz diagonal oder zumindest nahe an der Diagonale. Dies ist die Idee hinter Methoden wie der Batch-Normalisierung der Zwischendarstellungen von Daten in neuronalen Netzen. Bei Verwendung von BN steigt die Konvergenzgeschwindigkeit erstaunlich an (möglicherweise 5-10 Mal), da der Gradient den Gradienten leicht dabei helfen kann, das zu tun, was sie tun sollen, um den Fehler zu reduzieren.

Im nicht normalisierten Fall Gradient- Basierend auf Optimierungsalgorithmen wird es sehr schwierig sein, die Gewichtsvektoren in Richtung einer guten Lösung zu bewegen. Die Kostenfläche für den normalisierten Fall ist jedoch weniger langgestreckt, und gradientenbasierte Optimierungsmethoden sind viel besser und weichen weniger voneinander ab.

Dies ist sicherlich der Fall bei linearen Modellen und insbesondere bei solchen, deren Kostenfunktion ein Maß für die Divergenz der Modellausgabe und des Ziels ist (z. B. lineare Regression mit MSE-Kostenfunktion), dies ist jedoch möglicherweise nicht unbedingt der Fall Fall in den nichtlinearen. Die Normalisierung schadet den nichtlinearen Modellen nicht. Wenn Sie dies nicht für lineare Modelle tun, kann dies schaden.

Das folgende Bild kann [grob] als Beispiel für eine längliche Fehleroberfläche angesehen werden, bei der es den gradientenbasierten Methoden schwer fallen könnte, die Gewichtsvektoren zu unterstützen Bewegen Sie sich in Richtung der lokalen Optima.

enter image description here

Die Normalisierung schadet jedoch nicht den nichtlinearen Modellen, aber wenn sie nicht für lineare Modelle ausgeführt wird, schadet dies. Ich finde diesen Satz schwer zu verstehen.Ist es (grob gesprochen) für nichtlineare Modelle irrelevant, ob die Daten normalisiert sind?Wenn Sie dies nicht für lineare Modelle tun, wird etwas kaputt gehen. Können Sie dies jedoch für nichtlineare Modelle besser angeben?Versuchen Sie vielleicht zu vermeiden, positive und negative Ausdrücke in diesem einen Satz zu mischen.
In linearen Modellmerkmalen führen große Bereiche zu einer hohen Varianz des Modells und können daher unnötig wichtig werden.Zum Beispiel haben diese Merkmale in PCA viel größere Eigenwerte als andere.In nichtlinearen Modellen (hängt von vielen Faktoren ab) ist dies jedoch möglicherweise nicht der Fall, da das Modell die Darstellung der Daten durch die Nichtlinearitäten möglicherweise vollständig ändert.Es ist also nicht so einfach zu analysieren, was in einem nichtlinearen Modell vor sich geht und wie sich nicht normalisierte Features auf die Ausgabe auswirken.
Der Effekt der Normalisierung in nichtlinearen Modellen ist also im Grunde schwer vorherzusagen und sollte von Fall zu Fall entschieden werden.
Wahr.Obwohl empirisch festgestellt wurde, dass Normalisierung auch in nichtlinearen Modellen hilfreich ist.
Vielen Dank für diese Klarstellung.Dies hat mir geholfen, Ihre Antwort besser zu verstehen.
Können Sie eine Erklärung hinzufügen, was Ihr zweites Diagramm bedeutet?
@JuanAntonioGomezMoriano Das ist Konvergenz (Annäherung an lokale Minima)
Was ist die X- und Y-Achse?
Die X-Achse ist die Anzahl der Iterationen der Y-Achse, die die Konvergenz darstellt
#3
+7
Vihari Piratla
2016-01-07 12:36:25 UTC
view on stackexchange narkive permalink

Lassen Sie mich Ihnen die Geschichte erzählen, wie ich die Bedeutung der Normalisierung gelernt habe.

Ich habe versucht, handgeschriebene Ziffern zu klassifizieren (dies ist eine einfache Aufgabe, Merkmale zu klassifizieren, die aus handgeschriebenen Bildern extrahiert wurden Ziffern) mit Neuronalen Netzen als Aufgabe für einen Kurs zum maschinellen Lernen.
Wie jeder andere begann ich mit einer Bibliothek / einem Werkzeug für Neuronale Netze, fütterte sie mit den Daten und begann mit den Parametern zu spielen. Ich habe versucht, die Anzahl der Schichten, die Anzahl der Neuronen und verschiedene Aktivierungsfunktionen zu ändern. Keiner von ihnen lieferte erwartete Ergebnisse (Genauigkeit um 0,9).

Der Täter? Die Skalierungsfaktoren in der Aktivierungsfunktion = $ \ frac {s} {1 + e ^ {- s.x}} $ - 1. Wenn der Parameter s i> nicht festgelegt ist, aktiviert die Aktivierungsfunktion entweder jede Eingabe oder macht jede Eingabe in jeder Iteration ungültig. Was offensichtlich zu unerwarteten Werten für Modellparameter führte. Mein Punkt ist, dass es nicht einfach ist, s i> zu setzen, wenn die Eingabe x über große Werte variiert.

Wie einige der anderen Antworten bereits darauf hingewiesen haben, ist das "gut" Die Praxis, ob die Daten normalisiert werden sollen oder nicht, hängt von den Daten, dem Modell und der Anwendung ab. Durch die Normalisierung werfen Sie tatsächlich einige Informationen über die Daten weg, z. B. die absoluten Maximal- und Minimalwerte. Es gibt also keine Faustregel.

#4
+4
arielf
2016-01-08 02:51:51 UTC
view on stackexchange narkive permalink

Wie andere sagten, ist die Normalisierung nicht immer anwendbar. z.B. aus praktischer Sicht.

Um Features auf einen gemeinsamen Bereich wie [0,1] skalieren oder normalisieren zu können, müssen Sie den kennen min / max (oder mean / stdev , je nachdem, welche Skalierungsmethode Sie anwenden) für jedes Feature. IOW: Sie müssen alle Daten für alle Funktionen haben, bevor Sie mit dem Training beginnen.

Viele praktische Lernprobleme bieten Ihnen nicht alle Daten a priori, so dass Sie einfach nicht normalisieren können. Solche Probleme erfordern einen Online-Lernansatz.

Beachten Sie jedoch, dass einige Online-Algorithmen (im Gegensatz zum Batch-Lernen), die jeweils aus einem Beispiel lernen, eine Annäherung an die Skalierung unterstützen /Normalisierung. Sie lernen die Skalen und kompensieren sie iterativ. vowpal wabbit normalisiert beispielsweise standardmäßig iterativ die Skalierung (es sei denn, Sie deaktivieren die automatische Skalierung explizit, indem Sie einen bestimmten Optimierungsalgorithmus wie naive --sgd erzwingen)

#5
+2
probabilityislogic
2018-09-29 03:29:07 UTC
view on stackexchange narkive permalink

Durch Skalieren / Normalisieren wird Ihr Modell geringfügig geändert. Meistens entspricht dies der Anwendung einer affinen Funktion. Sie haben also $ Z = A_X + B_XXC_X $ span> wobei $ X $ span> Ihre "Eingabe- / Originaldaten" sind. (eine Zeile für jedes Trainingsbeispiel, eine Spalte für jedes Feature). Dann sind $ A_X, B_X, C_X $ span> Matrizen, die typischerweise Funktionen von $ X $ span> sind. Die Matrix $ Z $ span> geben Sie in Ihren ML-Algorithmus ein.

Angenommen, Sie möchten eine neue Stichprobe vorhersagen. Sie haben jedoch nur $ X_ {new} $ span> und nicht $ Z_ {new} $ span>. Sie sollten die Funktion $ Z_ {new} = A_X + B_XX_ {new} C_X $ span> anwenden. Verwenden Sie also denselben $ A_X, B_X, C_X $ span> aus dem Trainingsdatensatz, anstatt sie neu zu schätzen. Dadurch haben diese Matrizen dieselbe Form wie andere Parameter in Ihrem Modell.

Obwohl sie in Bezug auf die vorhergesagten Werte, die Sie aus dem Trainingsdatensatz erhalten, häufig gleichwertig sind, werden für Vorhersagen sicherlich keine neuen Daten verwendet. Ein einfaches Beispiel, das für $ 1 $ span> neue Beobachtung vorhergesagt wird. Wenn Sie dies standardisieren (Mittelwert subtrahieren, durch sd dividieren), wird immer Null zurückgegeben.

#6
+1
Steven Scott
2018-09-29 02:06:16 UTC
view on stackexchange narkive permalink

Bei Modellen für maschinelles Lernen, die Koeffizienten enthalten (z. B. Regression, logistische Regression usw.), ist der Hauptgrund für die Normalisierung die numerische Stabilität.Wenn eine Ihrer Prädiktorspalten mit 10 ^ 6 multipliziert wird, wird der entsprechende Regressionskoeffizient mathematisch mit 10 ^ {- 6} multipliziert und die Ergebnisse sind dieselben.

Computergestützt werden Ihre Prädiktoren häufig durch den Lernalgorithmus transformiert (z. B. wird die Matrix X der Prädiktoren in einer Regression zu X'X), und einige dieser Transformationen können zu einem Verlust der numerischen Genauigkeit führen, wenn X sehr groß oder sehr klein ist.Wenn Ihre Prädiktoren auf der Skala von 100 liegen, spielt dies keine Rolle.Wenn Sie Sandkörner, astronomische Einheiten oder Suchanfragen modellieren, ist dies möglicherweise der Fall.

#7
  0
Ayush
2016-05-30 04:02:17 UTC
view on stackexchange narkive permalink

Ich habe versucht, das Problem der Gratregression mithilfe des Gradientenabfalls zu lösen. Jetzt ohne Normalisierung habe ich eine geeignete Schrittgröße eingestellt und den Code ausgeführt. Um sicherzustellen, dass meine Codierung fehlerfrei war, habe ich dasselbe Ziel auch in CVX codiert. Jetzt brauchte CVX nur noch wenige Iterationen, um zu einem bestimmten optimalen Wert zu konvergieren, aber ich habe meinen Code für die beste Schrittgröße ausgeführt, die ich durch 10.000 Iterationen finden konnte, und ich war nahe am optimalen Wert von CVX, aber immer noch nicht genau.

Nachdem ich den Datensatz normalisiert und meinem Code und CVX zugeführt hatte, war ich überrascht zu sehen, dass die Konvergenz jetzt nur noch 100 Iterationen dauerte und der optimale Wert, auf den der Gradientenabstieg konvergierte, genau dem von CVX entsprach.
Auch der Betrag der "erklärten Varianz" nach Modell nach der Normalisierung war größer als der ursprüngliche. Gerade durch dieses naive Experiment wurde mir klar, dass ich mich hinsichtlich des Regressionsproblems für eine Normalisierung der Daten entscheiden würde. Übrigens bedeutet Normalisierung hier, durch Mittelwert zu subtrahieren und durch Standardabweichung zu dividieren.

Um mich bei der Regression zu unterstützen, lesen Sie bitte diese relevante Frage und Diskussion dazu:
Wenn Sie eine multiple Regression durchführen, wann sollten Sie dies tun? Zentrieren Sie Ihre Prädiktorvariablen &, wann sollten Sie sie standardisieren?

Was Sie Normalisierung nennen, heißt Standardisierung.Siehe https://en.wikipedia.org/wiki/Feature_scaling#Standardization


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...