[PYTHON] [Maschinelles Lernen] Verstehen der linearen multiplen Regression sowohl aus Scikit-Lernen als auch aus Mathematik

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 ** Sie können sehen, dass es in der Erklärung von "Ich kenne den Hintergrund nicht, aber ich habe dieses Ergebnis" deutlich schwach ist **.

In diesem Artikel zielen ** 2 bis 3 auf "Ich mag die Theorie, also werde ich zuerst versuchen, Scicit-Learn zu verwenden" und 4 und später auf "Den Hintergrund aus der Mathematik verstehen" **.

2. Was ist lineare (multiple) Regression?

Da es einige Überschneidungen mit der obigen linearen einfachen Regression gibt, lesen Sie bitte auch den Artikel über lineare einfache Regression. [Maschinelles Lernen] Verstehen der linearen einfachen Regression aus Scikit-Learn und Mathematik

(1) Was ist Regression?

** Zahlen vorhersagen. ** Beim maschinellen Lernen gibt es andere "Klassifikationen". Wenn Sie jedoch numerische Werte wie "●● Kreis" und "△ Kg" vorhersagen möchten, können Sie Regression verwenden.

(2) Was ist lineare Regression?

Es kann einige Missverständnisse geben, "Was Sie wollen ($ = y )" und "Was Sie denken, beeinflussen, was Sie wollen Wenn ( = x $) "eine lineare Beziehung hat, wird die Methode zum Finden von $ y $ unter Verwendung des linearen Merkmals als lineare Regression bezeichnet.

Die lineare einfache Regression hatte ein $ x $, während die lineare multiple Regression mehrere $ x $ hat.

Ich denke, es ist schwer zu verstehen, deshalb gebe ich Ihnen ein konkretes Beispiel.
Spezifisches Beispiel
Sie sind eine selbständige Eisdiele und möchten unbedingt den Verkauf von Eis in Ihrem Geschäft ** vorhersagen können, um Ihre Verkaufsaussichten zu stabilisieren. Ich werde. キャプチャ8.PNG

Sie haben sich verzweifelt gefragt, was sich auf den Verkauf von Eis in Ihrem Geschäft auswirkt. In dem Artikel über lineare einfache Regression haben wir angenommen, dass es die "Temperatur" war, die den Verkauf von Eis beeinflusste, aber wenn Sie darüber nachdenken, haben Sie wirklich eine Eisdiele betrieben. Schließen Sie dann, dass "nur die Temperatur" den Umsatz wirklich beeinflusst?

Vielleicht nicht nur die Temperatur, sondern auch das Verkehrsaufkommen auf den Straßen der Eisdiele an diesem Tag, und das ist der Einfluss der Mitarbeiter, die zusammenarbeiten. Wie Sie sehen können, gibt es normalerweise ** mehrere erklärende Variablen, die sich auf die Zielvariable auswirken (Eisverkäufe) **, und in einigen Fällen Zehntausende.

Wenn Sie also versuchen, "einige erklärende Variablen ($ = x )" und "objektive Variablen (Eisverkäufe ( = y $))" wie unten gezeigt zu veranschaulichen, werden die erklärenden Variablen und objektiven Variablen (Eis) Sie können sehen, dass es einige gibt, die wahrscheinlich eine gerade Form haben (= $ ax + b $) (= linear), und einige, die nicht so relevant sind.


Umsatz- und Temperaturstreudiagramm
キャプチャ1.PNG


Streukarte von Umsatz und Verkehrsaufkommen
キャプチャ2.PNG


Streudiagramm des Umsatzes und der Anzahl der Mitarbeiter, die an diesem Tag in der Schicht waren
キャプチャ3.PNG

In dieser Abbildung können Sie "Temperatur" und "Anzahl der Mitarbeiter" als erklärende Variablen verwenden, die wahrscheinlich eine lineare Beziehung zum Umsatz haben, und nicht "Verkehrsaufkommen". Hier werden wir es später als Beispiel verwenden, sodass wir auch "Verkehrsaufkommen" in die erklärenden Variablen aufnehmen werden.

Als Nächstes verwenden wir scicit-learn, um ein Modell für maschinelles Lernen zu erstellen, das den Eisverkauf anhand von Temperatur, Verkehrsaufkommen und Anzahl der Mitarbeiter berechnet.

3. Lineare Regression mit Scicit-Learn

(1) Import der erforderlichen Bibliotheken

Importieren Sie Folgendes, um eine lineare Regression durchzuführen.

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

(2) Datenaufbereitung

Stellen Sie die Temperatur, das Verkehrsaufkommen, die Anzahl der Mitarbeiter und den Eisverkauf wie unten gezeigt ein.

data = pd.DataFrame({
    "temprature":[8,10,6,15,12,16,20,13,24,26,12,18,19,16,20,23,26,28],
    "car":[100,20,30,15,60,25,40,20,18,30,60,10,8,25,35,90,25,55],
    "clerk":[3,5,4,6,6,7,12,8,12,10,7,7,8,6,6,10,12,13],
    "sales(=y)":[30,35,28,38,35,40,60,34,63,65,38,40,41,43,42,55,65,69]
    })

(3) Modellbau

(I) Datenformung

Zunächst werden wir die Form der Daten anordnen, um das Modell zu erstellen.

y = data["sales(=y)"].values
X = data.drop("sales(=y)", axis=1).values  #Bedeutet, andere Spalten als Verkäufe als X zu definieren

Dieses Mal ist es kein Artikel über Python-Grammatik, daher werde ich die Details weglassen, aber ich werde X und y in einer Form für lineare Regression mit Scikit-Learn anordnen.

(Ii) Modellbau

Es ist endlich die Modellbauordnung.

regr = LinearRegression(fit_intercept = True)
regr.fit(X,y)

Das war's für ein einfaches Modell. Wir werden ein lineares Regressionsmodell für eine Variable namens Regr erstellen! Es ist ein Bild davon, wie man eine Deklaration macht und das Regre in die nächste Zeile passt (= lernt).

(Iii) Versuchen Sie, die Steigung und den Abschnitt der geraden Linie zu ermitteln

Wie in "2. Was ist lineare (multiple) Regression?" Hinter den Kulissen suchen wir nach einer linearen Formel, die den Umsatz anhand des Verkehrsaufkommens und der Anzahl der Mitarbeiter vorhersagt. Wenn Sie es so lassen, wie es ist, werden Sie es nicht bemerken, also lassen Sie uns tatsächlich die Neigung und den Abschnitt löschen.

b = regr.intercept_
a1 = regr.coef_[0]
a2 = regr.coef_[1]
a3 = regr.coef_[2]

pd.DataFrame([b,a1,a2,a3],index = ["b","a1","a2","a3"])

Dann wird es wie folgt angezeigt. キャプチャ4.PNG

Mit anderen Worten können wir sehen, dass die Formel für diese lineare Regression $ y = 1.074159x_1 + 0.04694x_2 + 2.170663x_3 + 8.131467 $ lautet.

Nebenbei bemerkt betrug der Verkehrsaufkommenskoeffizient ($ x_2 ) ( = a_2 $), der in der ersten Abbildung wenig mit Verkäufen zu tun zu haben schien, 0,04694, was im Vergleich zu den beiden anderen Koeffizienten sehr gering ist. Sie können aus der Berechnung sehen. Mit anderen Worten, wir können wieder sehen, dass das Verkehrsaufkommen eine Variable ist, die bei der Berechnung von $ y $ keinen großen Einfluss (= unbedeutend) hat.

(6) In der realen Welt ...

Es macht keinen Sinn, ein Modell fertig zu stellen. In der realen Welt ist es notwendig, dieses Prognosemodell zu verwenden, um zukünftige Verkäufe zu prognostizieren. Sie haben die Temperatur, den erwarteten Verkehr und die Anzahl der Mitarbeiter für die nächsten drei Tage notiert. Speichern Sie es in einer Variablen namens z, wie unten gezeigt.

z = pd.DataFrame([[20,15,18],
                  [15,60,30],
                  [5,8,12]])

Was ich tun möchte, ist, die obigen zukünftigen Daten auf die lineare Formel anzuwenden, die durch früheres Lernen erhalten wurde, und Verkäufe vorherzusagen.

regr.predict(z)

In diesem Fall wird das Ergebnis als "([69.39068087, 92.18012508, 39.92573722])" angezeigt. Mit anderen Worten, der Umsatz von morgen wird ungefähr 694.000 Yen betragen, und übermorgen wird ungefähr 922.000 Yen betragen. Wenn Sie die Daten für den nächsten Monat erhalten können, haben Sie eine ungefähre Vorstellung vom Umsatz und Ihr Ziel wird erreicht.

Es gibt viele andere Details, aber ich denke, es ist gut, zuerst die orthodoxe lineare Regression zu implementieren.

4. Lineare (multiple) Regression aus der Mathematik verstehen

Übrigens, bis zu 3, verwenden Sie scikit-learn, um $ a $ und $ b $ von $ y = a_1x_1 + a_2x_2 + ・ ・ a + a_ix_i + b $ zu berechnen → Implementieren Sie den Ablauf der Umsatzprognose aus den Daten für die nächsten 3 Tage Ich versuchte zu. Hier möchte ich klarstellen, wie "Berechnen von $ a $ und $ b $" in diesem Fluss ** mathematisch berechnet wird.

(1) Grundkenntnisse (Grundvektor, lineare Algebra)

$ \ frac {∂c} {∂ \ boldsymbol {x}} = 0 ← Die Differenzierung einer Konstante durch x ergibt 0 $

\frac{∂(\boldsymbol{c}^T\boldsymbol{x})}{∂\boldsymbol{x}} = \boldsymbol{c}

$\frac{∂(\boldsymbol{x}^TC\boldsymbol{x})}{∂\boldsymbol{x}} = (C

(2) Mathematisches Verständnis

(I) Über die Formel der multiplen Regressionsanalyse

◆ Formel für die multiple Regressionsanalyse Wie in der ersten Hälfte erwähnt, wird die Formel für die multiple Regressionsanalyse im Allgemeinen wie folgt ausgedrückt.

** $ \ hat {y} = a_1x_1 + a_2x_2 + ・ ・ + a_mx_m + a_0 ・ 1 $ **

◆ In diesem Beispiel ... $ x_1 $ ist die Temperatur, $ x_2 $ ist das Verkehrsaufkommen, $ x_3 $ ist die Anzahl der Mitarbeiter, jede Zahl wird mit einem Koeffizienten $ a_1, a_2, a_3 $ multipliziert und schließlich wird die Konstante $ a_0.1 $ zum Verkauf hinzugefügt. Ich suche $ \ hat {y} $.

(Ii) Drücken Sie die Formel der multiplen Regressionsanalyse als Vektor aus

Das Folgende ist die Darstellung von $ x $ in der Formel für die multiple Regressionsanalyse in (i) als Vektor $ x $, dh $ \ boldsymbol {x} $. キャプチャ5.PNG

Da es diesmal drei erklärende Variablen gibt, beträgt sie bis zu $ x_3 $, wird jedoch im Allgemeinen wie oben ausgedrückt.

Beispielsweise sollten die Temperaturdaten von $ x_1 $ oben keine Daten enthalten, sondern die Temperaturdaten für mehrere Tage sollten darin gespeichert sein. Es wird durch die Matrix $ X $ unten dargestellt.

キャプチャ6.PNG

In ähnlicher Weise kann der Vektor $ a $, dh $ \ boldsymbol {a} $, wie folgt ausgedrückt werden.

$ \boldsymbol{a} = \begin{pmatrix} a_0\
a_1\
a_2\
a_3\
・ \
・ \
a_m \end{pmatrix} $

Mit anderen Worten, die Formel für die multiple Regressionsanalyse, die den ursprünglichen Umsatz vorhersagt, lautet $ \ hat {y} = a_1x_1 + a_2x_2 + ・ ・ + a_mx_m + a_0 ・ 1 $, also $ \ hat {y} = \ boldsymbol {X} \ boldsymbol Es kann als {a} $ ausgedrückt werden.

Wichtig ist, dass $ \ hat {y} $ und $ \ boldsymbol {X} $ aus den vorhandenen Daten ermittelt werden können. Ersetzen Sie also $ \ boldsymbol {a} $ durch diese, dh ** multiple Regressionsanalyse. Dies bedeutet, dass der Koeffizient jeder erklärenden Variablen in der Formel von berechnet werden kann **.

Lassen Sie uns von nun an $ \ boldsymbol {a} $ mithilfe dieser Formel analytisch (= manuell berechnet) finden. Die gleiche Berechnung wird hinter den Kulissen von Scikit-learn durchgeführt. (Streng anders, aber ich werde später darauf zurückkommen.)

(Iii) Berechnung der Fehlerfunktion

Wie im Artikel über lineare einfache Regression erwähnt, ist $ \ hat {y} = a_1x_1 + a_2x_2 + ・ ・ + a_mx_m + a_0 ・ Um $ a_1 $, $ a_2 $ und $ a_3 $ von 1 $ zu bestimmen, ** Setzen Sie gut $ a_1, a_2, a_3 $, damit die Differenz zwischen dem realen Umsatz $ y $ und dem vorhergesagten Wert $ \ hat {y} $ so gering wie möglich ist **.

Mal sehen, was es bedeutet, "gut" zu sein, während wir die Differenz (Fehlerfunktion) zwischen $ y $ und $ \ hat {y} $ berechnen.

\begin{align} E &= \sum_{i=1}^n ({y_i - \hat{y}})^{2}\\\ &= (y - \hat{y})^T(y - \hat{y})\\\ & = (y- \ boldsymbol {X} \ boldsymbol {a}) ^ T (y- \ boldsymbol {X} \ boldsymbol {a}) ← \ hat {y} mit \ boldsymbol {X} \ boldsymbol {a} Substitution \\\ &= (y^T - (\boldsymbol{X}\boldsymbol{a})^T)(y - \boldsymbol{X}\boldsymbol{a})\\\ &= (y^T - a^T\boldsymbol{X}^T)(y - \boldsymbol{X}\boldsymbol{a})←(\boldsymbol{X}\boldsymbol{a})^T = a^T\boldsymbol{X}^T\\\ & = y ^ Ty - y ^ T \ boldsymbol {X} \ boldsymbol {a} --a ^ T \ boldsymbol {X} ^ Ty + a ^ T \ boldsymbol {X} ^ T \ boldsymbol {X} \ boldsymbol {a } ← Erweitern Sie den Ausdruck um eine Ebene über \\\ & = y ^ Ty - 2y ^ T \ boldsymbol {A} + a ^ T \ boldsymbol {X} ^ T \ boldsymbol {X} \ boldsymbol {a} ← a ^ T \ boldsymbol {X} ^ Von Ty = y ^ T \ boldsymbol {X} \ boldsymbol {a} \end{align}

Um dieses $ E $ zu minimieren, differenzieren Sie $ E $ durch $ \ boldsymbol {a} $ und finden Sie $ \ boldsymbol {a} $ als 0. (Im Artikel über lineare einfache Regression wird erläutert, warum sie zu 0 differenziert.)

$ \begin{align} \ frac {∂E} {∂ \ boldsymbol {a}} & = \ frac {∂} {∂ \ boldsymbol {a}} (y ^ Ty) --2 \ frac {∂} {∂ \ boldsymbol {a}} ( y ^ T \ boldsymbol {X} \ boldsymbol {a}) + \ frac {∂} {∂ \ boldsymbol {a}} (a ^ T \ boldsymbol {X} ^ T \ boldsymbol {X} \ boldsymbol {a}) ← \ frac {∂} {∂ \ boldsymbol {a}} (y ^ Ty) wird 0 \
& = -2 \ boldsymbol {X} ^ Ty + [\ boldsymbol {X} ^ T \ boldsymbol {X} + (\ boldsymbol {X} ^ T \ boldsymbol {X}) ^ T] \ boldsymbol {a} ← Prämisse C im dritten Ausdruck des Wissens entspricht hier \ boldsymbol {X} ^ T \ boldsymbol {X} \
&= -2\boldsymbol{X}^Ty + 2\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{a} \end{align} $

Da diese Fehlerfunktion 0 wird,

$ \begin{align} -2\boldsymbol{X}^Ty + 2\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{a} = 0\
2\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{a} = 2\boldsymbol{X}^Ty\
\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{a} = \boldsymbol{X}^Ty\
\end{align} $

Mit anderen Worten, das $ \ boldsymbol {a} $, das Sie finden möchten, wird wie folgt berechnet.

\boldsymbol{a} = (\boldsymbol{X}^T\boldsymbol{X})^{-1} \boldsymbol{X}^Ty

(3) Entwicklung - Versuchen Sie, mit Python zu implementieren.

Das $ \ boldsymbol {a} $, das ich finden wollte, könnte in einer mathematischen Formel ausgedrückt werden, aber selbst mit dieser Menge an Präsentation kommt die multiple Regression möglicherweise nicht gut heraus (ich bin nicht gekommen).

Daher möchte ich hier die Python-Zahl verwenden, um die Formel für die multiple Regressionsanalyse aus der obigen Formel analytisch zu berechnen.

◆ Datensatz

(I) Import numpy

import numpy as np

(Ii) Datensatz Es ist vielleicht etwas schwer zu erkennen, aber die vertikale Spalte links von x gibt die Temperatur an, die zweite Spalte das Verkehrsaufkommen und die dritte Spalte die Anzahl der Mitarbeiter. y ist Umsatz.

x = np.matrix([[8,100,3],
              [10,20,5],
              [6,30,4],
              [15,15,6],
              [12,60,6],
              [16,25,7],
              [20,40,12],
              [13,20,8],
              [24,18,12],
              [26,30,10],
              [12,60,7],
              [18,10,7],
              [19,8,8],
              [16,25,6],
              [20,35,6],
              [23,90,10],
              [26,25,12],
              [28,55,13]])
y = np.matrix([[30],
              [35],
              [28],
              [38],
              [35],
              [40],
              [60],
              [34],
              [63],
              [65],
              [38],
              [40],
              [41],
              [43],
              [42],
              [55],
              [65],
              [69]])

(Iii) Multiple Regressionsanalyse Wie bereits gezeigt, ist $ \ boldsymbol {a} = (\ boldsymbol {X} ^ T \ boldsymbol {X}) ^ {-1} \ boldsymbol {X} ^ Ty $. Schreiben Sie also wie folgt.

(x.T * x)**-1 * x.T * y

Dann sehen Sie das Ergebnis so. Mit anderen Worten, wenn auf numpy berechnet, ist $ a_1 = 1,26, a_2 = 0,09, a_3 = 2,47 $. matrix([[1.26664688], [0.09371714], [2.47439799]])

Dies liegt daran, dass sich die numerischen Werte geringfügig von $ a_1, a_2, a_3 $ unterscheiden, die durch Scikit-Learn erhalten wurden, aber Scikit-Learn die Verzerrung (dh) bei der Berechnung dieser Zahl weiter berücksichtigt. Wenn Sie anfangen, so weit zu gehen, wird es komplizierter. Wenn Sie also die grundlegenden Berechnungen kennen, die Scicit-Learn hinter den Kulissen durchführt, ist es meiner Meinung nach am besten, dieses Niveau im Auge zu behalten.

5. Zusammenfassung

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 zu verstehen, wie sie hinter den Kulissen mit mathematischem Hintergrund funktionieren.

Ich denke, es gibt viele Inhalte, die schwer zu verstehen sind, aber ich hoffe, es hilft mir, mein Verständnis zu vertiefen, und ich denke, dass ich hier fester lernen muss, also habe ich es gestärkt, indem ich weiter studiert habe. Ich möchte einen Artikel posten.

Recommended Posts

[Maschinelles Lernen] Verstehen der linearen multiplen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
[Maschinelles Lernen] Verstehen der linearen einfachen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
[Maschinelles Lernen] Verständnis der logistischen Regression sowohl durch Scikit-Lernen als auch durch Mathematik
[Maschinelles Lernen] SVM sowohl aus Scikit-Lernen als auch aus Mathematik verstehen
[Maschinelles Lernen] Entscheidungsbäume aus Scikit-Lernen und Mathematik verstehen
[Maschinelles Lernen] Unkorrelation aus der Mathematik verstehen
Lineare Regression des maschinellen Lernens
Maschinelles Lernen: Überwacht - Lineare Regression
Anfänger des maschinellen Lernens versuchen eine lineare Regression
Algorithmus für maschinelles Lernen (multiple Regressionsanalyse)
Klassifikation und Regression beim maschinellen Lernen
Algorithmus für maschinelles Lernen (Verallgemeinerung der linearen Regression)
<Kurs> Maschinelles Lernen Kapitel 1: Lineares Regressionsmodell
Verständnis der Datentypen und des Beginns der linearen Regression
Algorithmus für maschinelles Lernen (Zusammenfassung und Regularisierung der linearen Regression)
[scikit-learn, matplotlib] Multiple Regressionsanalyse und 3D-Zeichnung
Überblick über maschinelle Lerntechniken, die aus Scikit-Learn gelernt wurden
Mit PyTorch viel regeln, von linearer multipler Regression bis hin zu logistischer Regression, mehrschichtigem Perzeptron und Autoencoder
Logistische Regression beim maschinellen Lernen
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Coursera Machine Learning Challenge in Python: ex1 (lineare Regression)
Praktisches maschinelles Lernen mit Scikit-Learn und TensorFlow-TensorFlow gab auf-
[Maschinelles Lernen] Zufällige Gesamtstruktur verstehen
Verstehe maschinelles Lernen ~ Ridge Regression ~.
Maschinelles Lernen und mathematische Optimierung
[Python] Lineare Regression mit Scicit-Learn
Überwachtes maschinelles Lernen (Klassifikation / Regression)
Stapelvorlage für maschinelles Lernen (Rückgabe)
Algorithmus für maschinelles Lernen (logistische Regression)
Robuste lineare Regression mit Scikit-Learn
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, dass Standardisierung zu einem Durchschnitt von 0 und einer Standardabweichung von 1 führt.
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, warum der Korrelationskoeffizient zwischen -1 und 1 liegt.
Newton-Methode für maschinelles Lernen (von 1 Variablen zu mehreren Variablen)
[Lesehinweis] Praktisches maschinelles Lernen mit Scikit-Learn, Keras und TensorFlow Kapitel 1
"Gauß-Prozess und maschinelles Lernen" Gauß-Prozessregression nur mit Python-Numpy implementiert
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Algorithmus für maschinelles Lernen (Einzelregressionsanalyse)
SVM versucht maschinelles Lernen mit Scikit-Learn
Organisation von Plattformen für maschinelles Lernen und tiefes Lernen
Maschinelles Lernen: Überwacht - Lineare Diskriminanzanalyse
(Maschinelles Lernen) Ich habe versucht, die Bayes'sche lineare Regression bei der Implementierung sorgfältig zu verstehen