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 erhalten." Deutlich schwach ist.
Der Zweck dieses Artikels ist es, "zuerst zu versuchen, scicit-learn zu verwenden, weil die Theorie gut ist" in 2-3 und "den Hintergrund aus der Mathematik zu verstehen" in 4 und später.
Ich komme aus einer privaten Literaturschule, daher bin ich nicht gut in Mathematik. Ich habe versucht, es auf leicht verständliche Weise zu erklären, selbst für diejenigen, die nicht so gut wie möglich in Mathematik sind.
Ein ähnlicher Artikel wurde für Linear Simple Regression Ver veröffentlicht. Bitte lesen Sie ihn auch. [Maschinelles Lernen] Verstehen der linearen einfachen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
Die logistische Regression ist eine Art statistisches Regressionsmodell für Variablen, die der Bernoulli-Verteilung folgen. Quelle: [Wikipedia](https://ja.wikipedia.org/wiki/Logistic Return)
Ich weiß nicht, was es ist, um es einfach auszudrücken, es wird verwendet, um ** "die Wahrscheinlichkeit vorherzusagen, dass ein bestimmtes Ereignis eintreten wird" oder "basierend auf dieser Wahrscheinlichkeit zu klassifizieren" **. Daher wird die logistische Regression verwendet, wenn Sie mithilfe von maschinellem Lernen klassifizieren oder die Wahrscheinlichkeit vorhersagen möchten.
(Ich war sehr überrascht, die Wahrscheinlichkeit während des Studiums des maschinellen Lernens "vorhersagen" zu können.)
Wie führt diese logistische Regression eine Klassifizierung und Wahrscheinlichkeitsvorhersage durch? Ich werde die ausführliche Erklärung weglassen, weil ich zum Kapitel über Mathematik gehen werde, aber "Vorhersagen der Wahrscheinlichkeit, dass ein bestimmtes Ereignis eintreten wird" bedeutet, dass, wenn Sie die erforderlichen Informationen in die "Sigmoid-Funktion" unten eingeben, dieses Ereignis (als A bezeichnet) Dies bedeutet, dass die Eintrittswahrscheinlichkeit berechnet wird. Und wenn die Wahrscheinlichkeit 50% oder mehr beträgt, wird sie als A klassifiziert, und wenn die Wahrscheinlichkeit weniger als 50% beträgt, wird sie als nicht A klassifiziert.
[Sigmaid-Funktion]
Übrigens ist die Sigmoidfunktion wie folgt definiert.
y = \frac{1}{1 + e^{-(a_1x_1 + a_2x_2 + ... + b)}}
Als Ergebnis dieser Berechnung stellt das ausgegebene $ y $ die Wahrscheinlichkeit dar, mit der das Ereignis eintritt, und die logistische Regression berechnet diese Wahrscheinlichkeit.
Wenn beispielsweise der rote Punkt an der obigen Sigmoidfunktion angebracht ist, wird eine Eintrittswahrscheinlichkeit von 40% vorhergesagt, und da sie weniger als 50% beträgt, wird Ereignis A als nicht auftretend klassifiziert.
Obwohl es sich um die oben beschriebene "Klassifizierung" handelt, führt maschinelles Lernen hauptsächlich "Rückgabe (Vorhersage numerischer Werte)" oder "Klassifizierung" durch. Wie der Name schon sagt, wird die Klassifizierung verwendet, wenn Sie "A oder B" klassifizieren möchten.
Angenommen, Sie haben die durchschnittliche Gesamtpunktzahl der Landessprache und Mathematik von 15 Schülern von der Mittelschule bis zur Oberschule und die Daten darüber, ob der Schüler die freien Künste oder die Naturwissenschaften besucht.
Basierend auf diesen Daten möchte ich Daten aus der Landessprache und Mathematik eines anderen Schülers verwenden, um vorherzusagen, ob er in Zukunft in die freien Künste oder in die Naturwissenschaften wechseln wird.
Die Verteilung der durchschnittlichen Gesamtpunktzahl der Landessprache und Mathematik von 15 Schülern ist wie folgt.
Irgendwie scheint es eine Grenze zwischen dem blauen Punkt (Literatur) und dem orangefarbenen Punkt (Wissenschaft) zu geben.
Lassen Sie uns als Nächstes eine logistische Regressionsanalyse mit scikit-learn durchführen und ein Modell erstellen, das nach Literatur und Wissenschaft klassifiziert ist.
Importieren Sie Folgendes, um eine logistische Regression durchzuführen.
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import log_loss, accuracy_score, confusion_matrix
Stellen Sie die Ergebnisse für Japanisch, Mathematik und Literaturwissenschaft (Richtig für das Literatursystem, Falsch für das Wissenschaftssystem) als Daten ein, wie unten gezeigt.
data = pd.DataFrame({
"bunri":[False,True,False,True,True,False,True,False,True,False,False,True,False,False,False],
"Japanese_score":[45, 60, 52, 70, 85, 31, 90, 55, 75, 30, 42, 65, 38, 55, 60],
"Math_score":[75, 50, 80, 35, 40, 65, 42, 90, 35, 90, 80, 35, 88, 80, 90],
})
Lassen Sie uns die Ergebnisse und die Alphabetisierung von Japanisch und Mathematik veranschaulichen. Verwenden Sie Scicit-Learn nicht plötzlich, um die Merkmale zu erfassen, sondern versuchen Sie, Daten zu veranschaulichen.
y = data["bunri"].values
x1, x2 = data["Japanese_score"].values, data["Math_score"].values
#Plotdaten
plt.grid(which='major',color='black',linestyle=':')
plt.grid(which='minor',color='black',linestyle=':')
plt.plot(x1[y], x2[y], 'o', color='C0', label='bunkei')#Blauer Punkt: y ist wahr(=(Literatur)
plt.plot(x1[~y], x2[~y], '^', color='C1', label='rikei')#Orange Punkt: y ist falsch(=(Wissenschaft)
plt.xlabel("Japanese_score")
plt.ylabel("Math_score")
plt.legend(loc='best')
plt.show()
Es scheint, dass Sie klar zwischen Blau (Literatur) und Orange (Wissenschaft) unterscheiden können. (In der realen Welt ist es unwahrscheinlich, dass es so klar geteilt wird.) Lassen Sie uns ein logistisches Regressionsmodell erstellen.
Zunächst werden wir die Form der Daten anordnen, um das Modell zu erstellen.
y = data["bunri"].values#Es ist das gleiche wie das oben gezeigte, also können Sie es weglassen.
X = data[["Japanese_score", "Math_score"]].values
Dieses Mal handelt es sich nicht um einen Artikel zur Python-Grammatik, daher werde ich die Details weglassen, aber ich werde x und y in einer Form für die logistische Regression mit scikit-learn anordnen.
Es ist endlich die Modellbauordnung.
clf = SGDClassifier(loss='log', penalty='none', max_iter=10000, fit_intercept=True, random_state=1234, tol=1e-3)
clf.fit(X, y)
Das war's für ein einfaches Modell. Wir werden ein logistisches Regressionsmodell für eine Variable namens clf erstellen! Das Bild ist, dass das clf mit dem vorbereiteten X und y in der nächsten Zeile angepasst (= gelernt) wird.
Plötzlich kam der Wortparameter heraus, aber dies ist $ y = \ frac {1} {1 + e ^ {- (a_1x_1 + a_2x_2 + ... + b)}} $, der zu Beginn in der Sigmoid-Funktion beschrieben wurde. Bezieht sich auf $ a $ und $ b $. In diesem Beispiel gibt es zwei erklärende Variablen, die Landessprachenbewertung und die mathematische Bewertung, sodass sie als $ y = \ frac {1} {1 + e ^ {- (a_1x_1 + a_2x_2 + b)}} $ und $ a definiert werden kann $ Und $ b $ können mit scicit-learn wie unten gezeigt berechnet werden.
#Gewichte abrufen und anzeigen
b = clf.intercept_[0]
a1 = clf.coef_[0, 0]
a2 = clf.coef_[0, 1]
Dann wird b = 4,950, a1 = 446,180, a2 = -400,540 angezeigt, also $ y = \ frac {1} {1 + e ^ {- (446,180x_1 + (-400,540) x_2 + 4,950)} Sie können sehen, dass es sich um eine Sigmoid-Funktion namens} $ handelt.
Lassen Sie uns nun diese Grenze im obigen Streudiagramm veranschaulichen.
y = data["bunri"].values
x1, x2 = data["Japanese_score"].values, data["Math_score"].values
#Plotdaten
plt.grid(which='major',color='black',linestyle=':')
plt.grid(which='minor',color='black',linestyle=':')
plt.plot(x1[y], x2[y], 'o', color='C0', label='bunkei')#Blauer Punkt: y ist wahr(=(Literatur)
plt.plot(x1[~y], x2[~y], '^', color='C1', label='rikei')#Orange Punkt: y ist falsch(=(Wissenschaft)
plt.xlabel("Japanese_score")
plt.ylabel("Math_score")
plt.legend(loc='best')
#Zeichnen und Anzeigen von Rändern
#Lila: Grenzlinie
line_x = np.arange(np.min(x1) - 1, np.max(x1) + 1)
line_y = - line_x * w1 / w2 - w0 / w2
plt.plot(line_x, line_y, linestyle='-.', linewidth=3, color='purple', label='kyoukai')
plt.ylim([np.min(x2) - 1, np.max(x2) + 1])
plt.legend(loc='best')
plt.show()
Achten Sie auf diese Weise darauf, was Sie mit scicit-learn tun und womit es verbunden ist.
Es macht keinen Sinn, ein Modell fertig zu stellen. In der realen Welt ist es notwendig, dieses Vorhersagemodell zu verwenden, um die Alphabetisierung eines anderen Schülers vorherzusagen. Sie haben Informationen für weitere 5 Personen erhalten und die Daten aufgeschrieben. Speichern Sie es in einer Variablen namens z, wie unten gezeigt.
z = pd.DataFrame({
"Japanese_score":[80, 50, 65, 40, 75],
"Math_score":[50, 70, 55, 50, 40],
})
z2 = z[["Japanese_score", "Math_score"]].values
Was ich tun möchte, ist, die Daten eines anderen oben erwähnten Schülers auf das logistische Regressionsmodell anzuwenden, das durch Scicit-Learn früher erhalten wurde, und die Alphabetisierung vorherzusagen.
y_est = clf.predict(z2)
Auf diese Weise zeigt y_est das Ergebnis als "([True, False, True, False, True])" an. Mit anderen Worten, die erste Person hat 80 Punkte auf Japanisch und 50 Punkte auf Mathematik, so dass davon ausgegangen wird, dass es sich um ein literarisches System handelt.
Ihr Ziel wird erreicht, indem Sie die Alphabetisierung anhand Ihrer Landessprache und Ihrer Mathematikergebnisse vorhersagen.
Zeigen wir auch die eingangs erwähnte "Wahrscheinlichkeit, ein literarisches System zu sein" an.
clf.predict_proba(z2)
Wenn Sie es so schreiben, werden die Wahrscheinlichkeit, ein literarisches System zu sein, und die Wahrscheinlichkeit, kein literarisches System zu sein, für zwei Spalten angezeigt. Ich habe dieses Beispiel jedoch so einfach verständlich gemacht, dass das Ergebnis wie folgt angezeigt wird und die Wahrscheinlichkeit klar in 0% oder 100% unterteilt ist.
[0., 1.], [1., 0.], [0., 1.], [1., 0.], [0., 1.]
Übrigens habe ich bis zu 3 versucht, den Ablauf des Aufbaus eines logistischen Regressionsmodells mithilfe von Scicit-Learn → Illustration → Vorhersage der Alphabetisierung von weiteren 5 Schülern zu implementieren. Hier möchte ich klarstellen, wie das logistische Regressionsmodell dieses Flusses mathematisch berechnet wird.
Verwenden Sie für den Logarithmus des Produkts Folgendes.
Wie in 2. "◆ Über die Sigmoidfunktion (Sigmoidfunktion)" erwähnt, ist die Sigmoidfunktion eine Funktion zum Ausdrücken eines bestimmten Ereignisses mit Wahrscheinlichkeit und hat die folgende Form.
Diese blaue Funktion ist auch wie folgt definiert.
y = \frac{1}{1 + e^{-(a_1x_1 + a_2x_2 + ... + b)}}
Die obigen $ a_1 $, $ a_2 $ und $ b $ sind sogenannte Parameter, und ihre Positionen sind die gleichen wie $ a $ und $ b $ der linearen Funktion $ y = ax + b $. Und $ x_1 $ und $ x_2 $ sind sogenannte erklärende Variablen. In diesem Fall beträgt die Punktzahl in der Landessprache $ x_1 $ und die mathematische Punktzahl $ x_2 $.
Wenn Sie sich für diese $ a_1 $, $ a_2 $ und $ b $ als ** gute Zahlen ** entscheiden, beträgt die Landessprache und die Mathematik-Punktzahl des neu erworbenen Schülers $ x_1 $ und $ x_2 $. Wenn Sie es eingeben, kann die Wahrscheinlichkeit, ein literarisches System zu werden (oder die Wahrscheinlichkeit, ein wissenschaftliches System zu werden), als $ y $ berechnet werden.
Mit anderen Worten, ** Bei der logistischen Regression des maschinellen Lernens werden diese Parameter $ a $ und $ b $ berechnet, um die Sigmoidfunktion ** zu berechnen.
Ich denke, es ist schwer, das Bild zu verstehen, wenn es nur Sätze sind. Berechnen wir also, indem wir ab dem nächsten Jahr bestimmte numerische Werte anwenden.
Der unter "Daten vorbereiten" festgelegte "Daten" ist tabellarisch organisiert. Was passiert, wenn die Sigmoid-Funktion ganz rechts verwendet wird, wird zusammengefasst. Dieses Mal werde ich versuchen, die "Wahrscheinlichkeit, ein literarisches System zu sein" zu finden. Setzen Sie also das literarische System auf 1 und das Wissenschaftssystem auf 0 (wenn Sie umgekehrt die Wahrscheinlichkeit finden möchten, ein Wissenschaftssystem zu sein, setzen Sie das Wissenschaftssystem auf 1 und das Literatursystem auf 0).
Schüler | Punktzahl in der Landessprache | Mathematische Partitur | Literatur(0: Wissenschaft 1:Literarisches System) | Sigmaid-Funktion |
---|---|---|---|---|
1. Person | 45 | 75 | 0 | |
Zweite Person | 60 | 50 | 1 | |
・ ・ ・ | ・ ・ ・ | ・ ・ ・ | ・ ・ ・ | ・ ・ ・ |
15. Person | 60 | 90 | 0 |
Wie finden Sie nun die Parameter $ a $ ($ a_1 $ und $ a_2 $ in diesem Beispiel) und $ b $? Die Quintessenz ist, dass Sie ** die Wahrscheinlichkeit, eine literarische Person zu sein, vom 1. bis zum 15. multiplizieren und $ a_1 $, $ a_2 $ und $ b $ finden können, die das Produkt maximieren **.
Dies wird als wahrscheinlichste Schätzung bezeichnet.
◆ Was ist die wahrscheinlichste Schätzung? Es wird als "saiyuusui teryo" gelesen und bedeutet "höchstwahrscheinlich" Schätzung. → Es ist kompliziert, aber Sie können es als "die beste Zahl" interpretieren.
◆ Multiplizieren wir Das Multiplizieren der Wahrscheinlichkeit, eine literarische Person zu sein, von der 1. Person zur 15. Person ergibt Folgendes (nennen wir es L).
L = [1 - \frac{1}{1 + e^{-(45a_1 + 75a_2 + b)}}] × [\frac{1}{1 + e^{-(60a_1 + 50a_2 + b)}}]× ・ ・\\
× [1 - \frac{1}{1 + e^{-(60a_1 + 90a_2 + b)}}]
◆ In logarithmischen Wert konvertieren, um den Maximalwert von L zu ermitteln Möglicherweise erhalten Sie ein Bild, aber L wird mit 15 Personen multipliziert. Dies ist sehr schwer zu berechnen, wenn die Daten für Millionen von Menschen sind, daher werde ich sie logarithmisch korrigieren.
logL = log[1 - \frac{1}{1 + e^{-(45a_1 + 75a_2 + b)}}] + log[\frac{1}{1 + e^{-(60a_1 + 50a_2 + b)}}] +・ ・\\
log[1 - \frac{1}{1 + e^{-(60a_1 + 90a_2 + b)}}]
◆ Parameter suchen Wie man die Parameter $ a_1 $, $ a_2 $ und $ b $ findet, die $ logL $ maximieren, kann nicht analytisch berechnet werden (= manuell berechnet). scikit-learn verwendet ** "probabilistische Gradientenmethode" **, um die optimalen Parameter zu berechnen.
Wenn Sie also verstehen, dass die Theorie dahinter so etwas tut, ist es in Ordnung, wenn Sie die von scicit-learn bereitgestellte für die eigentliche Berechnung verwenden.
In "(iii) Versuchen Sie, Parameter auszugeben", $ b $ = 4.950, $ a_1 $ = 446.180, $ a_2 $ = -400.540, also ** wollte ich $ y = \ frac {1 finden } {1 + e ^ {- (446.180x_1 + (-400.540) x_2 + 4.950)}} $ ist eine Sigmoidfunktion **.
Diese Sigmoidfunktion ($ y = \ frac {1} {1 + e ^ {- (446.180x_1 + (-400.540) x_2 + 4.950)}}
** ◆ Warum können wir einen "guten" Parameter erhalten, indem wir den Maximalwert von L ermitteln? ** Ich habe Parameter $ a $ und $ b $ ausgegeben, die $ L $ und $ logL $ maximieren, aber warum kann ich die optimalen Parameter erhalten, wenn $ L $ und $ logL $ maximiert sind? ..
Siehe unten, um ein Bild zu erhalten. Sie haben nur drei Daten zur Hand und versuchen aus diesen drei Daten "grob ein blaues Diagramm der gesamten Normalverteilung zu erstellen". Welches der beiden blauen Diagramme unten weist mit größerer Wahrscheinlichkeit eine allgemeinere Normalverteilung auf?
Offensichtlich ist die Grafik links wahrscheinlicher. Dies liegt daran, dass die Verteilung rechts der Berg mit der höchsten Häufigkeit des Auftretens ist und keine Daten vorliegen. Dies ist ein intuitives Verständnis, aber mathematisch ist die Grafik links sicherer.
Das Folgende ist die obige Normalverteilung mit der hinzugefügten Wahrscheinlichkeit. Obwohl es sich um ein Maß handelt, habe ich die Wahrscheinlichkeit geschrieben, dass der rote Punkt, der sich auf dieser Normalverteilung befindet, mit dieser Wahrscheinlichkeit auftritt.
Das Multiplizieren der Wahrscheinlichkeiten der Verteilung auf der linken Seite (die dieselbe Bedeutung wie $ L $ hat) ergibt 0,14 x 0,28 x 0,38 = 0,014896. Ähnlich auf der rechten Seite 0,01 x 0,03 x 0,09 = 0,000027.
Auf diese Weise ist der Graph, der die ursprüngliche Verteilung korrekt darstellt, umso näher, je größer der Wert der Multiplikation der Wahrscheinlichkeiten ist.
Daher ist es notwendig, die Parameter $ a_1 $, $ a_2 $ und $ b $ zu finden, damit der Wert von $ L $, der das Produkt der Wahrscheinlichkeit des menschlichen Systems ist, und $ logL $, der sein Logarithmus ist, so groß wie möglich sind.
** ◆ Unterschied zwischen Sigmoidfunktion und Logistikfunktion ** Es ist in Ordnung zu verstehen, dass die spezielle Form der logistischen Funktion eine Sigmoidfunktion ist.
Logistische Funktion: $ {N = {\ frac {K} {1+ \ exp {K (t_ {0} -t)}}} N = {\ frac {K} {1 + \ exp {K (t_ { 0} -t)}}} $ Die Sigmoidfunktion bezieht sich auf die Funktion, wenn $ K = 1 $ und $ t_0 = 0 $ oben ist.
Referenz-URL: Wikipedia https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B0%E3%83%A2%E3%82%A4%E3%83%89%E9%96%A2%E6%95%B0
** ◆ Verwirrungsmatrix **
Ich habe es diesmal nicht verwendet, weil ich ein sehr leicht verständliches Beispiel gegeben habe, aber im Allgemeinen verwende ich einen Index namens Verwirrungsmatrix als Methode zur Überprüfung der Genauigkeit.
Wir werden die Referenz-URL auflisten. Wenn Sie interessiert sind, versuchen Sie es bitte.
Referenz-URL
https://note.nkmk.me/python-sklearn-confusion-matrix-score/
Was haben Sie gedacht. Die logistische Regression ist für mich sehr schwer zu verstehen, daher kann es schwierig sein, sie zu verstehen, wenn ich sie einmal gelesen habe. Wir hoffen, dass Sie durch mehrmaliges Lesen Ihr Verständnis verbessern können.
Recommended Posts