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 konzentrieren wir uns auf ** "Unkorreliert" **.
Aus der vorherigen Erklärung: "Ich habe von Unkorrelation gehört, aber warum?" Und "Wie verwenden Sie sie?", "Welche Art der Verarbeitung wird mathematisch mit Unkorrelation durchgeführt?" Der Artikel soll die Frage "?" Beantworten.
Wenn Sie es diesmal gut verstehen möchten, müssen Sie verschiedene Dinge wie Matrix, Kovarianz, Eigenwertvektor usw. verstehen. Die Mathematik ging nicht zu weit ins Detail, ** Ich habe versucht, den Umriss zu verstehen **.
Es scheint, dass Unkorrelation beim maschinellen Lernen selten allein verwendet wird. Wenn überhaupt, scheint es in der Hauptkomponentenanalyse verwendet zu werden.
Erstens gibt Kapitel 2 einen Überblick über die Unkorrelation, und Kapitel 3 führt tatsächlich die Unkorrelation durch. Abschließend werde ich in Kapitel 4 erklären, wie man die Unkorrelation mathematisch versteht.
Wie der Name schon sagt, ist es **, die Korrelation zwischen jeder Variablen ** zu beseitigen. Was ist falsch an der hohen Korrelation zwischen den einzelnen Variablen?
Aus der Schlussfolgerung ** "Weil die Varianz des partiellen Regressionskoeffizienten groß wird und die Genauigkeit des Modells tendenziell instabil ist" **.
Ich weiß es überhaupt nicht. Ich werde etwas mehr erklären.
Beispielsweise wird die Formel für ein Regressionsmodell üblicherweise wie folgt ausgedrückt:
$ Y = A_1x_1 + A_2x_2 + ・ ・ + b $
Geben Sie hier die tatsächlichen Daten in $ y $ (Zielvariable) und $ x_1 $ oder $ x_2 $ (erklärende Variable) ein, um den partiellen Regressionskoeffizienten $ a_1 $ oder $ a_2 $ und den konstanten Term $ b $ zu ermitteln. Ist eine multiple Regressionsanalyse.
Wie man die Streuung dieses partiellen Regressionskoeffizienten erhält (das Bild, wie stark der partielle Regressionskoeffizient verschiedene Werte annimmt), ist verwirrend, wenn er detailliert geschrieben ist. Wenn Sie also nur die Schlussfolgerung schreiben, ** " (1-Korrelationskoeffizient) "ist im Molekül der Formel zur Berechnung der Dispersion des partiellen Regressionskoeffizienten ** enthalten.
Mit anderen Worten, ** je größer die Korrelation ist, desto kleiner ist das Molekül und desto größer ist infolgedessen die Streuung des partiellen Regressionskoeffizienten = der partielle Regressionskoeffizient nimmt tendenziell verschiedene Werte an = die Genauigkeit des Modells wird instabil **
Das ist die Theorie.
Wie wir in (1) gesehen haben, sollte eine Variable mit hoher Korrelation nicht gelöscht werden.
Denn ** "hohe Korrelation zwischen Variablen" bedeutet einfach, dass "Variablen eine lineare Beziehung haben" **.
→ Wenn Sie es also einfach löschen, können Sie andere wichtige Informationen löschen, die die Variable möglicherweise tatsächlich enthält **.
Was hier erscheint, ist Unkorrelation.
Wir werden das Modell erstellen, nachdem die Korrelation jeder Variablen beseitigt wurde.
Ich denke, es ist schwierig, ein Bild zu bekommen, also versuchen wir es tatsächlich.
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 einzige wichtige Unkorrelation ist (ⅶ) **, daher ist es eine gute Idee, zuerst dort nachzuschauen.
※wichtiger Punkt※ ・ Dieses Mal konnte ich keine Variable finden, die als erklärende Variable nicht korreliert sein sollte. Variablen, die nichts mit Modellbau zu tun haben, sind nicht korreliert.
Bitte beachten Sie, dass dies nur ein Kapitel ist, um zu erkennen, dass "die Unkorrelation auf diese Weise erfolgt".
-Es gab eine Site, die in den Kickstarter-Projekten, die ich immer im Beispiel meines Artikels verwende, nur unkorreliert war, also habe ich diese als Referenz verwendet. https://ds-blog.tbtech.co.jp/entry/2019/04/27/Kaggle%E3%81%AB%E6%8C%91%E6%88%A6%E3%81%97%E3%82%88%E3%81%86%EF%BC%81_%EF%BD%9E%E3%82%B3%E3%83%BC%E3%83%89%E8%AA%AC%E6%98%8E%EF%BC%92%EF%BD%9E
#numpy,Pandas importieren
import numpy as np
import pandas as pd
import seaborn as sns
#Importieren, um Datumsdaten zu verarbeiten
import datetime
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)
Es tut mir leid für die Schlussfolgerung, aber da ich danach verwendet verpfändet verwenden werde, wird nur diese Variable für fehlende Werte verarbeitet.
df["usd pledged"] = df["usd pledged"].fillna(df["usd pledged"].mean())
Lassen Sie uns die Korrelation jeder Variablen überprüfen.
sns.heatmap(df.corr())
Lassen Sie uns nun "pleged" und "used pleded" unkorrelieren, die in hohem Maße zwischen Variablen korrelieren.
Die Dekorrelation selbst ist in Ordnung, wenn Sie den Code wie folgt schreiben. Ich glaube jedoch nicht, dass Sie die Bedeutung verstehen, aber dieses Mal lesen Sie bitte "Das ist es" und lesen Sie Kapitel 4, "Verständnis aus der Mathematik".
#Df nur verpfändet und verwendet pleged_In verpfändet aufbewahren
df_corr = pd.DataFrame({'pledged' : df['pledged'], 'usdpledged' : df['usd pledged']})
#Finden Sie Dispersion / Co-Dispersion
cov = np.cov(df_corr, rowvar=0)
#Ersetzen Sie den Eigenvektor der Verteilungs-Co-Verteilungsmatrix durch S.
_, S = np.linalg.eig(cov)
#Daten sind nicht korreliert *.T steht für Inversion
pledged_decorr = np.dot(S.T, df_corr.T).T
Damit ist die Unkorrelation abgeschlossen. Lassen Sie uns als Test den Korrelationskoeffizienten zwischen verpfändet und verwendet zufrieden überprüfen.
print('Korrelationskoeffizient: {:.3f}'.format(np.corrcoef(pledged_decorr[:, 0], pledged_decorr[:, 1])[0,1]))
In diesem Fall wird "Korrelationskoeffizient: 0,000" angezeigt. Ich konnte erfolgreich entkorrelieren!
Lassen Sie uns nun sehen, wie dieses Kapitel die Unkorrelation tatsächlich mathematisch behandelt. Wie eingangs erwähnt, ist es notwendig, an "Matrix" und "Eigenwert / Eigenvektor" zu denken, um die Unkorrelation zu verstehen.
Wenn Sie es schwierig finden, können Sie es überspringen, und die Erklärung selbst ist nicht detailliert, aber grob gesagt wird sie auf diese Weise erklärt.
Wenn es einige erklärende Variablen gibt, seien sie $ \ boldsymbol {x_1} $, $ \ boldsymbol {x_2} $ ・ ・ ・ $ \ boldsymbol {x_n} $.
Die Verteilungs- / Mitverteilungsmatrix zwischen diesen Variablen kann wie folgt geschrieben werden.
Der blaue Rahmen zeigt die gemeinsame Verteilung von zwei Kombinationen jeder Variablen, und der rote Rahmen zeigt die Verteilung jeder Variablen.
Diese Dispersions- / Co-Dispersionsmatrix wird durch ** Ausführen eines als Diagonalisierung bezeichneten Prozesses ** in Folgendes umgewandelt!
Ich glaube nicht, dass ich mir sicher bin. Wichtig hierbei ist, dass ** der blaue Rahmen (Co-Dispersion) alle 0 ** ist.
** Durch Diagonalisierung kann die Kovarianz auf 0 reduziert werden, was genau der unkorrelierten Verarbeitung entspricht **.
Warum ist es nicht korreliert, wenn die Kovarianz zwischen den einzelnen Variablen 0 ist?
Um dies zu verstehen, erinnern wir uns an die Korrelationskoeffizientenformel. Wenn der Korrelationskoeffizient r ist, wird r wie folgt abgeleitet.
** (Korrelationskoeffizient r) = (Kovarianz) / (Standardabweichung von $ x $) ・ (Standardabweichung von $ y $) **
Aus dieser Gleichung können wir sehen, dass ** die Kovarianz 0 ist, das heißt, das Molekül ist 0, also ist der Korrelationskoeffizient 0 **.
Aus diesem Grund wird ** die Kovarianz zwischen jeder Variablen durch Diagonalisierung auf 0 gesetzt, und der Korrelationskoeffizient wird auf 0 gesetzt, um eine Unkorrelation zu erreichen **.
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