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" **.
Ich komme aus einer privaten Literaturschule, daher bin ich nicht gut in Mathematik. Ich habe versucht, es so zu erklären, dass es selbst für diejenigen, die nicht so gut wie möglich in Mathematik sind, leicht zu verstehen ist. (Diesmal müssen wir jedoch die lineare Algebra kennen. Wenn Sie Schwierigkeiten haben, können Sie sie einfach weitergeben.)
Ich habe einen ähnlichen Artikel wie die Reihe "Verständnis aus der Mathematik" veröffentlicht, daher hoffe ich, dass Sie ihn auch lesen können. [Maschinelles Lernen] Verstehen der linearen einfachen Regression aus Scikit-Learn und Mathematik Maschinelles Lernen Verstehen der logistischen Regression sowohl durch Scikit-Lernen als auch durch Mathematik (https://qiita.com/Hawaii/items/ee2a0687ca451fe213be) [[Maschinelles Lernen] SVM sowohl aus Scikit-Lernen als auch aus Mathematik verstehen] (https://qiita.com/Hawaii/items/4688a50cffb2140f297d) [[Maschinelles Lernen] Verstehe aus der Mathematik, warum der Korrelationskoeffizient zwischen -1 und 1 liegt] (https://qiita.com/Hawaii/items/3f4e91cf9b86676c202f)
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
** 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.
Es kann einige Missverständnisse geben,
"Was Sie wollen ($ = y
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.
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
Umsatz- und Temperaturstreudiagramm
Streukarte von Umsatz und Verkehrsaufkommen
Streudiagramm des Umsatzes und der Anzahl der Mitarbeiter, die an diesem Tag in der Schicht waren
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.
Importieren Sie Folgendes, um eine lineare Regression durchzuführen.
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
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]
})
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.
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).
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.
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
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.
Ü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.
$ \ frac {∂c} {∂ \ boldsymbol {x}} = 0 ← Die Differenzierung einer Konstante durch x ergibt 0 $
$\frac{∂(\boldsymbol{x}^TC\boldsymbol{x})}{∂\boldsymbol{x}} = (C
◆ 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} $.
Das Folgende ist die Darstellung von $ x $ in der Formel für die multiple Regressionsanalyse in (i) als Vektor $ x $, dh $ \ boldsymbol {x} $.
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.
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.)
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.
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.
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.
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