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).
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.)
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.
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" **.
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.
#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
df = pd.read_csv("ks-projects-201801.csv")
Aus dem Folgenden können Sie ersehen, dass es sich um den Datensatz von (378661, 15) handelt.
df.shape
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
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 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)
Führen Sie die Verarbeitung kategorialer Variablen mit pd.get_dummies durch.
df = pd.get_dummies(df,drop_first = True)
Es ist endlich Standardisierung. Lassen Sie uns vorher einen kurzen Blick auf die aktuellen Daten werfen.
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.
Die Ziel- und Tagesdaten wurden standardisiert!
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.
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.
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 | ||
2 | 15 | 390,000,000 | ||
3 | 30 | 410,000,000 | ||
4 | 20 | 405,000,000 | ||
5 | 40 | 395,000,000 |
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 $.
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.
■ Standardabweichung Zuerst suchen wir nach der Varianz und das Ergebnis ist ** $ a ^ 2σ ^ 2 $. (Standardabweichung ist $ aσ $) **
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
■ Standardabweichung Nach wie vor suchen wir zuerst nach Dispersion. Da die Varianz 1 ist, ist auch die Standardabweichung 1.
Mit dem Obigen kann aus der Formel bewiesen werden, dass der Durchschnitt jeder Variablen nach der Standardisierung 0 und die Standardabweichung 1 ist.
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