forcechemtech.com

  

Beste Artikel:

  
Main / Wie man Daten in Python normalisiert

So normalisieren Sie Daten in Python

Einige Algorithmen für maschinelles Lernen erzielen eine bessere Leistung, wenn Ihre Zeitreihendaten eine konsistente Skalierung oder Verteilung aufweisen. Zwei Techniken, mit denen Sie Ihre Zeitreihendaten konsistent neu skalieren können, sind Normalisierung und Standardisierung.

In diesem Tutorial erfahren Sie, wie Sie Normalisierung und Standardisierung neu skalieren können, um Ihre Zeitreihendaten in Python neu zu skalieren. Dieser Datensatz beschreibt die minimalen Tagestemperaturen über 10 Jahre 1981-1990 in der Stadt Melbourne, Australien. Die Einheiten sind in Grad Celsius angegeben und es gibt 3.650 Beobachtungen. Die Datenquelle wird als Australian Bureau of Meteorology angegeben.

Der Datensatz zeigt eine starke Saisonalitätskomponente und verfügt über ein schönes, feinkörniges Detail, mit dem gearbeitet werden kann. Bei der Normalisierung werden die Daten aus dem ursprünglichen Bereich neu skaliert, sodass alle Werte im Bereich von 0 bis 1 liegen. Die Normalisierung kann nützlich sein und ist in einigen Algorithmen für maschinelles Lernen sogar erforderlich, wenn Ihre Zeitreihendaten Eingabewerte mit unterschiedlichen Maßstäben aufweisen.

Dies kann für Algorithmen wie k-Nearest Nachbarn erforderlich sein, die Entfernungsberechnungen und lineare Regression sowie künstliche neuronale Netze verwenden, die Eingabewerte gewichten. Für die Normalisierung müssen Sie die minimalen und maximalen beobachtbaren Werte genau kennen oder schätzen können.

Möglicherweise können Sie diese Werte anhand Ihrer verfügbaren Daten schätzen. Wenn Ihre Zeitreihen nach oben oder unten tendieren, kann es schwierig sein, diese erwarteten Werte zu schätzen, und die Normalisierung ist möglicherweise nicht die beste Methode, um Ihr Problem zu lösen. Zum Beispiel könnten wir für die Temperaturdaten die beobachtbaren Min- und Max-Werte als 30 und -10 schätzen, die stark über- und unterschätzt werden.

Wir können dann jeden Wert wie 18 normalisieren. Sie können sehen, dass der resultierende Wert nicht im Bereich von 0 bis 1 liegt, wenn ein x-Wert außerhalb der Grenzen der Minimal- und Maximalwerte angegeben wird. Sie können dies überprüfen diese Beobachtungen, bevor Vorhersagen getroffen werden, und entfernen Sie sie entweder aus dem Datensatz oder beschränken Sie sie auf die vordefinierten Maximal- oder Minimalwerte.

Sie können Ihren Datensatz mit dem Scikit-Lernobjekt MinMaxScaler normalisieren. Bei Bedarf kann die Transformation invertiert werden. Dies ist nützlich, um Vorhersagen für die Berichterstellung oder das Plotten wieder in ihre ursprüngliche Skala umzuwandeln.

Für den Skalierer müssen Daten als Matrix aus Zeilen und Spalten bereitgestellt werden. Die geladenen Zeitreihendaten werden als Pandas-Reihe geladen. Es muss dann in eine Matrix aus einer Spalte mit 3.650 Zeilen umgeformt werden. Das umgeformte Dataset wird dann verwendet, um den Skalierer anzupassen, das Dataset wird normalisiert, und die Normalisierungstransformation wird invertiert, um die ursprünglichen Werte wieder anzuzeigen. Es gibt eine andere Art der Neuskalierung, die gegenüber neuen Werten, die außerhalb des Bereichs der erwarteten Werte liegen, robuster ist. Dies wird als Standardisierung bezeichnet.

Wir werden uns das als nächstes ansehen. Beim Standardisieren eines Datensatzes wird die Verteilung der Werte neu skaliert, sodass der Mittelwert der beobachteten Werte 0 und die Standardabweichung 1 beträgt. Wie bei der Normalisierung kann die Standardisierung nützlich sein und in einigen Algorithmen für maschinelles Lernen sogar erforderlich sein, wenn Ihre Zeitreihendaten Eingabewerte mit enthalten unterschiedliche Maßstäbe. Bei der Standardisierung wird davon ausgegangen, dass Ihre Beobachtungen zu einer Gaußschen Verteilungsglockenkurve mit einem gut erzogenen Mittelwert und einer Standardabweichung passen.

Sie können Ihre Zeitreihendaten weiterhin standardisieren, wenn diese Erwartung nicht erfüllt wird, aber möglicherweise keine zuverlässigen Ergebnisse erhalten. Dies umfasst Algorithmen wie Support Vector Machines, Linear and Logistic Regression und andere Algorithmen, die die Leistung von Gaußschen Daten annehmen oder verbessert haben. Die Standardisierung erfordert, dass Sie den Mittelwert und die Standardabweichung der beobachtbaren Werte genau kennen oder schätzen können.

Möglicherweise können Sie diese Werte anhand Ihrer Trainingsdaten schätzen. Wenn Sie den Code ausführen, erhalten Sie das folgende Diagramm, das eine Gaußsche Verteilung des Datensatzes zeigt, wie von der Standardisierung angenommen. Wir können eine mittlere Temperatur von 10 und eine Standardabweichung von etwa 5 schätzen.

Mit diesen Werten können wir den ersten Wert im Datensatz von 20 standardisieren. Die Schätzungen des Mittelwerts und der Standardabweichung eines Datensatzes können gegenüber neuen Daten robuster sein als das Minimum und das Maximum. Sie können Ihren Datensatz mit dem Scikit-Lernobjekt StandardScaler standardisieren.

Wenn Sie das Beispiel ausführen, werden die ersten 5 Zeilen des Datasets gedruckt, dieselben standardisierten Werte gedruckt und die Werte dann wieder in ihrer ursprünglichen Skala gedruckt. Haben Sie Fragen zur Neuskalierung von Zeitreihendaten oder zu diesem Beitrag?

Stellen Sie Ihre Fragen in den Kommentaren und ich werde mein Bestes tun, um zu beantworten. Entdecken Sie in meinem neuen E-Book, wie es geht: Es behandelt Tutorials zum Selbststudium und End-to-End-Projekte zu Themen wie: Laden von Daten, Visualisierung, Modellierung, Algorithmus-Optimierung und vielem mehr ... Ich gehe davon aus, dass dies wie ein Genuss für Daten funktioniert Sets, die Sie in den Speicher einpassen können… Aber was ist mit sehr großen Datenmengen, die einfach niemals in eine einzelne Maschine passen würden?

Würden Sie andere Techniken empfehlen? Ich lerne Python und Pandas. Warum müssen Sie die Serie umformen? Wir müssen im numpy-Array nur explizit die Anzahl der Zeilen und Spalten angeben, und sklearn gibt dann keine Warnung aus. Wie gehen Sie in Bezug auf dieses Thema normalerweise mit Variablen gemischten Typs um? E.

Ich führe zuerst eine Dummy-Codierung für kategoriale Variablen durch und mische sie dann mit den anderen Variablen, nachdem ich sie auf [0, 1] normalisiert habe. Ich bin mir nicht sicher, ob dies die beste Vorgehensweise ist. Andererseits lautet die gleiche Frage für die Anwendung von Clustering-Algorithmen: k-bedeutet, spektrale Clustering. Vielen Dank. Ich teste sie dann alle mit einer Reihe von Methoden und sehe, welche Darstellungen im Allgemeinen besser in der Lage sind, die Struktur des Problems aufzudecken. Währenddessen führe ich die traditionelle sorgfältige Analyse durch, aber diese automatisierte Methode ist oft schneller und führt zu nicht intuitiven Ergebnissen.

Ich konnte dies nicht mit dem Datensatz ausführen, wie er ist. In der CSV-Datei gibt es eine Fußzeile mit 3 Spalten und einige Daten enthalten Fragezeichen.

Nach dem Entfernen und Ersetzen funktioniert es jedoch. Danke für das nette Tutorial. Ich frage mich, wie Sie die Standardabweichung für Wiederholungsmessungen normalisieren würden. Müsste auch die Standardabweichung für jeden Tag normalisiert werden? Im Allgemeinen ist dies eine problemspezifische Frage, und Sie können den Zeitraum auswählen, in dem standardisiert oder normalisiert werden soll. Ich trainiere das Modell und führe meine Vorhersagen in Echtzeit aus.

Die Vorhersage für dieses Ereignis könnte dann gesättigt sein, was mir im Vergleich zur Beobachtung eine niedrigere Vorhersage gibt. Wie gehe ich damit um? Ich nehme an, eine Möglichkeit ist die Verwendung von e. Dann liegen meine Trainingsdaten jedoch in einem engeren Bereich, z. Natürlich kann ich das trotzdem ohne Analyse machen. Meine Frage bezieht sich auf e. Schließlich sind extreme Ereignisse oft sehr wichtig, um Vorhersagen treffen zu können. Die Standardisierung wird robuster sein.

Bei der Normalisierung müssen Sie die Grenzwerte der erwarteten Werte schätzen, um festzustellen, wann neue Eingabedaten diese Grenzwerte überschreiten, und um zu behandeln, ob ein Fehler gemeldet, abgeschnitten, eine Warnung ausgegeben, das Modell mit neuen Grenzwerten neu trainiert usw. Was ist, wenn die Daten sind stark asymmetrisch mit einem negativen oder positiven Versatz und daher weit davon entfernt, Gaußsch zu sein? Wenn ich eine NN wähle, gehe ich davon aus, dass meine Daten normalisiert werden sollten. Wenn ich die Daten standardisiere, werden sie immer noch verzerrt. Wenn Sie also ein NN verwenden, ist es besser, die Daten zu transformieren, um den Versatz zu entfernen.

Oder sind neuronale Netze mit verzerrten Daten eine schlechte Wahl? Beispielsweise berechnet die Standardisierungsmethode in Python den Mittelwert und die Standardabweichung unter Verwendung des gesamten von Ihnen bereitgestellten Datensatzes.

Infolgedessen wird die Skalierung auf diese Weise eine Vorausschau haben, da sowohl vergangene als auch zukünftige Daten zur Berechnung des Mittelwerts und des Standards verwendet werden. Wir müssen also einen Weg finden, um den Mittelwert und den Standard basierend auf den Daten zu berechnen, die wir zu einem bestimmten Zeitpunkt haben. Ja, Sie sind möglicherweise besser dran, die für die Skalierung erforderlichen Koeffizienten basierend auf dem Domänenwissen zu schätzen. Ich habe scipy 0 bereits heruntergeladen. Hallo Jason, danke für deine großartige Arbeit.

Ich habe eine Frage: Diese Datensätze werden in der Reihenfolge der Zeit aufgeteilt, sodass das Training vor der Validierung und vor dem Test erfolgt. Danke für die Antwort. Wahrscheinlich gibt es keine andere Standardmöglichkeit als Domänenwissen. Es wäre interessant, etwas Standard zu finden, aber es scheint unmöglich. Was ist, wenn alle meine Zeitreihen einen Aufwärtstrend aufweisen? Oder noch schlimmer, wenn die Hälfte meiner Zeitreihen einen Aufwärtstrend und die andere Hälfte einen Abwärtstrend aufweist?

Wäre es hilfreich, die Zeitreihen zu verschlechtern? Sollte ich jede Sequenz separat von allen anderen abwerten oder sie alle zusammen abwerten oder sie in Gruppen abwerten? Differenzierung verwenden: Wenn Sie jedoch auf diese Weise normalisieren, verwenden Sie Informationen aus der Zukunft, sodass das Modell überpasst. Was ist stattdessen damit: Ok, das macht Sinn. Verwenden Sie dasselbe gespeicherte Vorverarbeitungsmodell Ihrer Trainingsdaten oder erstellen Sie einen neuen MinMaxScaler mit den letzten N Zeilen?

Was ist, wenn sich die neuen Werte geringfügig von den Trainingswerten unterscheiden? Oder was ist mit diesem: Das war mein Punkt.

(с) 2019 forcechemtech.com