[PYTHON] [Maschinelles Lernen] Verstehen Sie aus der Mathematik, dass Standardisierung zu einem Durchschnitt von 0 und einer Standardabweichung von 1 führt.

1. Zweck

Wenn Sie maschinelles Lernen ausprobieren möchten, kann jeder Scicit-Learn usw. verwenden, um es relativ einfach zu implementieren. Um jedoch Ergebnisse bei der Arbeit zu erzielen oder Ihr Niveau zu verbessern ** "Ich kenne den Hintergrund nicht, aber ich habe dieses Ergebnis erhalten" ** Sie können sehen, dass es eindeutig schwach ist.

Dieses Mal werden wir uns mit der "Standardisierung" befassen, die in der Vorverarbeitung auftritt.

Aus der vorherigen Erklärung: "Ich habe von Standardisierung gehört, warum machst du das?" Und "Wie benutzt du sie mit Scikit-Learn?", "Standardisierung ist nur ein Prozess, der den Durchschnitt 0 und die Standardabweichung 1 macht". Der Zweck besteht jedoch darin, einen Artikel zu verfassen, der die Frage beantworten kann: "Ich möchte verstehen, welche Art von Berechnung tatsächlich aus mathematischen Formeln erfolgt."

Zunächst geben wir in Kapitel 2 einen Überblick über die Standardisierung, und in Kapitel 3 verwenden wir scikitlearn tatsächlich zur Standardisierung. Abschließend möchte ich in Kapitel 4 auf die Standardisierungsformel eingehen (ob die Standardisierung tatsächlich zu einem Durchschnitt von 0 und einer Standardabweichung von 1 führt).

2. Was ist Standardisierung?

(1) Was ist Standardisierung?

Zusammenfassend ist es ** der Prozess der Verarbeitung jeder Variablen, so dass sie in "Durchschnitt 0, Standardabweichung 1" ** passt.

Es wird häufig bei der Vorverarbeitung beim maschinellen Lernen verwendet.

Grob gesagt ist es ein Bild, das ** die Einheiten der einzelnen Daten ausrichtet **. Wenn beispielsweise Daten zu Umsatz und Temperatur vorliegen, sind die Skalen bei einem Umsatz von 100 Millionen Einheiten und einer maximalen Temperatur von etwa 40 (℃) völlig unterschiedlich. Konvertieren Sie diese beiden Daten also so, dass sie jeweils einen Durchschnitt von 0 und eine Standardabweichung von 1 aufweisen. Ich werde es tun. (Insbesondere nach der Standardisierung beträgt der Umsatz 0,4 und die Temperatur 0,1. * Die Werte sind angemessen.)

(2) Warum standardisieren?

Es scheint verschiedene Gründe zu geben, aber einer davon ist ** "Viele Algorithmen für maschinelles Lernen gehen davon aus, dass jede Variable dieselbe Skala hat" **.

Zum Beispiel wissen wir Menschen im Beispiel des Umsatzes (unter der Annahme von 400 Millionen Yen) und der Temperatur (unter der Annahme von 35 ° C), dass jede Daten "Umsatz" und "Temperatur" sind, also gibt es zwei. Auch wenn die Skala der Variablen (Skala der Einheit) unterschiedlich ist, können Sie sie ohne Beschwerden verstehen.

Da dem Computer so etwas jedoch nicht bekannt ist, kann er als bloßer Zahlenwert von "400.000.000" und "35" angesehen und beim maschinellen Lernen missverstanden werden.

Um solche nachteiligen Auswirkungen zu vermeiden, werden wir standardisieren, indem wir die Skala jeder Variablen im Voraus anpassen.

(3) Gibt es einen anderen Weg als die Standardisierung?

Zusätzlich zur Standardisierung gibt es eine Methode namens ** Normalisierung **, die der Skala jeder Variablen entspricht.

Ich werde diesmal nicht ins Detail gehen, aber es scheint, dass Standardisierung oft durchgeführt wird, weil ** "es nicht leicht von Ausreißern beeinflusst wird" und "es wird eine Normalverteilung, wenn es standardisiert wird" **.

3. Standardisiert mit scicit-learn

Als konkretes Beispiel nehme ich diesmal die Kickstarter-Projekte von kaggle, die ich immer als Beispiel benutze. https://www.kaggle.com/kemical/kickstarter-projects

Dieses Kapitel ist lang, aber ** die wesentliche Standardisierung ist nur (v) **, daher halte ich es für eine gute Idee, zuerst einen Blick darauf zu werfen.

(I) Importieren

#numpy,Pandas importieren
import numpy as np
import pandas as pd

#Importieren, um Datumsdaten zu verarbeiten
import datetime

#Import für Trainingsdaten und Testdatenaufteilung
from sklearn.model_selection import train_test_split

#Import zur Standardisierung
from sklearn.preprocessing import StandardScaler

#Import zur Überprüfung der Genauigkeit
from sklearn.model_selection import cross_val_score

#Import für logistische Regression
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import log_loss, accuracy_score, confusion_matrix

(Ii) Daten lesen


df = pd.read_csv("ks-projects-201801.csv")

(Iii) Bestätigung der Anzahl der Daten

Aus dem Folgenden können Sie ersehen, dass es sich um den Datensatz von (378661, 15) handelt.

df.shape

(Iv) Datenformung

◆ Anzahl der Rekrutierungstage

Ich werde die Details weglassen, aber da die Start- und Endzeit der Rekrutierung für die Cloud-Finanzierung in den Daten enthalten sind, werden wir diese in "Rekrutierungstage" umwandeln.

df['deadline'] = pd.to_datetime(df["deadline"])
df["launched"] = pd.to_datetime(df["launched"])
df["days"] = (df["deadline"] - df["launched"]).dt.days

◆ Informationen zur Zielvariablen

Ich werde die Details auch hier weglassen, aber es gibt andere Kategorien als Erfolg ("erfolgreich") und Misserfolg ("fehlgeschlagen") für die Zielvariable "state", aber dieses Mal werde ich nur Daten für Erfolg und Misserfolg verwenden.

df = df[(df["state"] == "successful") | (df["state"] == "failed")]

Ersetzen Sie dann Erfolg durch 1 und Misserfolg durch 0.

df["state"] = df["state"].replace("failed",0)
df["state"] = df["state"].replace("successful",1)

◆ Löschen Sie nicht benötigte Zeilen

Löschen Sie vor dem Erstellen des Modells die ID und den Namen, die Sie Ihrer Meinung nach nicht benötigen (dies sollte beibehalten werden, diesmal wird es jedoch entfernt), sowie die Variablen, die Sie erst nach der Cloud-Finanzierung kennen. ..

df = df.drop(["ID","name","deadline","launched","backers","pledged","usd pledged","usd_pledged_real","usd_goal_real"], axis=1)

◆ Verarbeitung von Kategorievariablen

Führen Sie die Verarbeitung kategorialer Variablen mit pd.get_dummies durch.

df = pd.get_dummies(df,drop_first = True)

(V) Standardisierung

Es ist endlich Standardisierung. Lassen Sie uns vorher einen kurzen Blick auf die aktuellen Daten werfen.

キャプチャ1.PNG

Wie im Beispiel am Anfang erwähnt, können Sie sehen, dass die Einheitenskalen "Ziel (Zielbetrag)" und "Tage (Rekrutierungszeitraum)" sehr unterschiedlich sind.

Lassen Sie uns dieses Mal diese beiden Variablen standardisieren.

stdsc = StandardScaler()
df["goal"] = stdsc.fit_transform(df[["goal"]].values)
df["days"] = stdsc.fit_transform(df[["days"]].values)

Lassen Sie uns danach die Daten erneut anzeigen.

キャプチャ2.PNG

Die Ziel- und Tagesdaten wurden standardisiert!

(V) Implementierung der logistischen Regression

Der Standardisierungsprozess selbst endet mit (V), aber um die Reihe von Flüssen zu erfassen, Wir bauen sogar ein logistisches Regressionsmodell auf.

#Unterteilt in Trainingsdaten und Testdaten
y = df["state"].values
X = df.drop("state", axis=1).values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)

#Aufbau eines logistischen Regressionsmodells
clf = SGDClassifier(loss = "log", penalty = "none",random_state=1234)
clf.fit(X_train,y_train)

#Überprüfen Sie die Genauigkeit anhand der Testdaten
clf.score(X_test, y_test)

Jetzt beträgt die Genauigkeit 0,665.

4. Standardisierung aus der Mathematik verstehen

Bisher haben wir scikit-learn zur Standardisierung verwendet, damit wir es vorerst implementieren können.

In diesem Kapitel möchten wir die Verarbeitung durch Standardisierung aus mathematischer Sicht verstehen.

(1) Standardisierungsformel

Lassen Sie uns hier ein konkretes Beispiel geben. Ein Beispiel für Temperatur und Umsatz, wie eingangs erwähnt.

Temperatur Verkäufe (Yen)
1 10 400,000,000
2 15 390,000,000
3 30 410,000,000
4 20 405,000,000
5 40 395,000,000

Beginnen wir mit der Schlussfolgerung. Die Standardisierung wird nach der folgenden Formel berechnet.

z =  \frac{x -u}{σ}

Ich bin mir nicht sicher. $ x $ ist der Wert jeder Variablen, $ u $ ist der Durchschnitt jeder Variablen und $ σ $ ist die Standardabweichung jeder Variablen.

Um es sehr grob auszudrücken: Der Durchschnitt wird von jedem Wert subtrahiert und durch die Standardabweichung jeder Variablen, dh den Grad der Streuung, dividiert. Es handelt sich also um ein Bild, in dem die in verschiedenen Bereichen gestreuten Daten zusammengetragen werden.

・ ・ Ich verstehe nicht besser. Lassen Sie uns tatsächlich den numerischen Wert finden.

■ Durchschnittlich $ u $ Da $ u $ ein Durchschnitt ist, beträgt der Durchschnitt aller fünf Temperaturdaten $ (10 + 15 + 30 + 20 + 40) / 5 = 23 $.

Wenn Sie den durchschnittlichen Umsatz berechnen, ist dies ebenfalls (400.000.000 + 390.000.000 + 410.000.000 + 405.000.000 + 395.000.000) / 5 = 400.000.000 $ Es wird sein.

■ Standardabweichung $ σ $ Ich werde den Berechnungsprozess weglassen, Die Standardabweichung der Temperatur beträgt ca. 12.

Die Standardabweichung des Umsatzes beträgt 7.905.694.

■ Wenn standardisiert ... Die folgenden Berechnungsergebnisse werden erhalten, und die standardisierten Temperaturspaltenwerte und die standardisierten Verkaufsspaltenwerte werden beim maschinellen Lernen verwendet.

Temperatur Verkäufe (Yen) 標準化したTemperatur Standardisierter Vertrieb
1 10 400,000,000 (10-23)/12 (400,000,000-400,000,000)/7905694
2 15 390,000,000 (15-23)/12 (390,000,000-400,000,000)/7905694
3 30 410,000,000 (30-23)/12 (410,000,000-400,000,000)/7905694
4 20 405,000,000 (20-23)/12 (405,000,000-400,000,000)/7905694
5 40 395,000,000 (40-23)/12 (395,000,000-400,000,000)/7905694

(2) Warum ist der Durchschnitt 0 und die Standardabweichung 1?

Die Standardisierungsformel wird als $ z = \ frac {x -u} {σ} $ beschrieben. Lassen Sie uns jedoch beweisen, dass der Durchschnitt 0 und die Standardabweichung 1 ist, wenn diese Berechnung durchgeführt wird.

Hier betrachten wir die Formel $ y = ax + b $.


Nicht standardisierter Mittelwert und Standardabweichung der Originalformel

Lassen Sie uns zunächst einfach den Durchschnitt und die Standardabweichung vor der Standardisierung ermitteln. Wie Sie sehen können, ist weder der Mittelwert noch die Standardabweichung 0 oder 1. ■ Durchschnitt Wie unten gezeigt, kann der Durchschnitt von ** $ y $ als $ aµ + b $ ** ausgedrückt werden. キャプチャ3.PNG

■ Standardabweichung Zuerst suchen wir nach der Varianz und das Ergebnis ist ** $ a ^ 2σ ^ 2 $. (Standardabweichung ist $ aσ $) ** キャプチャ4.PNG


Durchschnitt und Standardabweichung standardisierter Gleichungen

Als nächstes ermitteln wir den Durchschnitt und die Standardabweichung nach der Standardisierung. Das Konzept der Formeltransformation ist im Grunde dasselbe wie die Formeltransformation vor der Standardisierung.

Wenn Sie die Formel wie unten gezeigt transformieren, können Sie sehen, dass der Durchschnitt 0 und die Standardabweichung nach der Standardisierung 1 ist!

■ Durchschnitt キャプチャ5.PNG

■ Standardabweichung Nach wie vor suchen wir zuerst nach Dispersion. Da die Varianz 1 ist, ist auch die Standardabweichung 1. キャプチャ6.PNG

Mit dem Obigen kann aus der Formel bewiesen werden, dass der Durchschnitt jeder Variablen nach der Standardisierung 0 und die Standardabweichung 1 ist.

5. Schlussfolgerung

Wie war es? Mein Gedanke ist: "Ich kann nicht interpretieren, selbst wenn mir von Anfang an ein sehr komplizierter Code angezeigt wird. Daher ist mir die Genauigkeit kein einziges Mal wichtig. Deshalb werde ich versuchen, eine grundlegende Reihe von Flows mit Scicit-Learn usw. zu implementieren." Ich finde es sehr wichtig.

Sobald ich mich daran gewöhnt habe, halte ich es jedoch für sehr wichtig, aus mathematischer Sicht zu verstehen, wie sie hinter den Kulissen funktionieren.

Ich denke, es gibt viele Inhalte, die schwer zu verstehen sind, aber ich hoffe, es hilft, mein Verständnis zu vertiefen.

Recommended Posts

[Maschinelles Lernen] Verstehen Sie aus der Mathematik, dass Standardisierung zu einem Durchschnitt von 0 und einer Standardabweichung von 1 führt.
Einfacher Code, der in Kaggles Titanic: Maschinelles Lernen aus Katastrophen eine Punktzahl von 0,81339 ergibt
Ein Beispiel für einen Mechanismus, der eine Vorhersage von HTTP aus dem Ergebnis des maschinellen Lernens zurückgibt
Beachten Sie, dass ich den Algorithmus des maschinell lernenden Naive Bayes-Klassifikators verstehe. Und ich habe es in Python geschrieben.
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Berechnung der Standardabweichung und des Korrelationskoeffizienten in Python
[Maschinelles Lernen] SVM sowohl aus Scikit-Lernen als auch aus Mathematik verstehen
Installation von TensorFlow, einer Bibliothek für maschinelles Lernen von Google
Einführung in das maschinelle Lernen mit Simple Perceptron
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
[Maschinelles Lernen] Entscheidungsbäume aus Scikit-Lernen und Mathematik verstehen
Finden Sie den Durchschnitt / die Standardabweichung der Helligkeitswerte im Bild
[Maschinelles Lernen] Verständnis der logistischen Regression sowohl durch Scikit-Lernen als auch durch Mathematik
Started Python: Tauschen Sie das im SQL-Ergebnis erhaltene Array von Werten in den Listentyp aus und verwenden Sie es in IN einer anderen Abfrage
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe versucht, das überwachte Lernen des maschinellen Lernens auch für Serveringenieure auf leicht verständliche Weise zu verstehen 1
Ich habe versucht, das überwachte Lernen des maschinellen Lernens auch für Serveringenieure auf leicht verständliche Weise zu verstehen 2
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
[Maschinelles Lernen] Verstehen der linearen einfachen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, warum der Korrelationskoeffizient zwischen -1 und 1 liegt.
[Maschinelles Lernen] Verstehen der linearen multiplen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
Eine Geschichte über den Versuch von LT, die Verarbeitung natürlicher Sprache und die Abhängigkeitsanalyse in einem Augenblick von einem leeren Ort aus live zu codieren
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
[Maschinelles Lernen] Unkorrelation aus der Mathematik verstehen
Werden Sie bald KI-Ingenieur! Lernen Sie in wenigen Tagen umfassend Python / KI / Maschinelles Lernen / Deep Learning / Statistische Analyse!
Klassifikation und Regression beim maschinellen Lernen
Ich habe ein Buch geschrieben, in dem Sie maschinelle Lernimplementierungen und -algorithmen auf ausgewogene Weise lernen können.
Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten
Ein Memorandum mit Filterbefehlen, die Sie möglicherweise sofort vergessen
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Kostenlose Version von DataRobot! ?? Einführung in "PyCaret", eine Bibliothek, die maschinelles Lernen automatisiert
Liste der wichtigsten Wahrscheinlichkeitsverteilungen, die beim maschinellen Lernen und in der Statistik verwendet werden, sowie Code in Python
Implementierung eines Modells, das Wechselkurse (Dollar-Yen-Kurs) durch maschinelles Lernen vorhersagt
Ein Memorandum über Methoden, die häufig beim maschinellen Lernen mit Scikit-Learn (für Anfänger) verwendet werden.
Ein Memo zum Generieren dynamischer Klassenvariablen aus Wörterbuchdaten (dict), die in Python3 nur Standardtypdaten enthalten