[PYTHON] Algorithmus für maschinelles Lernen (von der Klassifizierung in zwei Klassen bis zur Klassifizierung in mehreren Klassen)

Einführung

Schritt für Schritt zur Theorie, Implementierung in Python und Analyse mit scikit-learn über den Algorithmus, der zuvor in "Klassifikation des maschinellen Lernens" verwendet wurde. Ich werde mit lernen. Ich schreibe es zum persönlichen Lernen, daher möchte ich, dass Sie alle Fehler übersehen.

Bisher umfassen Klassifizierungsprobleme in zwei Klassen Simple Perceptron, Logistic Regression und Wir haben uns mit Support-Vektor-Maschinen (Basic und Advanced befasst. Da es sich jedoch nur um eine Klassifizierung mit zwei Klassen handelte, sollten Sie sie auf eine Klassifizierung mit mehreren Klassen ausweiten.

Anfangs dachte ich darüber nach, logistische Regression und Support-Vektor-Maschinen für mehrere Klassen zusammen zu schreiben, aber es war überraschend tiefgreifend, und es gibt viele Websites, die es nicht richtig geschrieben haben, sodass nur der theoretische Hintergrund in einem Artikel enthalten ist. Es ist geworden. Wie üblich waren die folgenden Seiten hilfreich. Vielen Dank.

2 Klassenklassifikation → Erweiterung auf Mehrklassenklassifikation

NAusgabe für jeden Feature-TypydamitcZiehen Sie in Betracht, die Typen zu klassifizieren. Zum Beispiel(Apfel|Orange|Banane)を分類するとか0〜9の数字を分類するとかそういう類のやつdamitすね。アルゴリズム自体が多クラス分類に対応しているものもあるんdamitすが、ロジスティック回帰やサポートベクターマシンなど2クラス分類器をこの分類問題に対応させるためのアプローチとしては、以下の手法が代表的damitす。

Lass uns in der richtigen Reihenfolge denken.

One-vs-Rest(All) One-vs-Rest (manchmal als One-vs-All geschrieben) ist, wie der Name schon sagt, eine Methode zur Aufteilung in eine Klasse und den Rest. Um beispielsweise die drei Klassen Apfel, Zitrus und Banane zu klassifizieren, werden drei Klassifizierer (Apfel-andere), (Mican-andere) und (Bananen-andere) erstellt, wie in der folgenden Abbildung gezeigt. multicalss_1.png

Tatsächlich gibt es einen Bereich, in dem sowohl Äpfel als auch Bananen an der Grenze jedes Klassifikators entnommen werden können. In einem solchen Fall muss jedoch anhand der Ausgangsstärke jedes Klassifikators entschieden werden, welcher verwendet werden soll.

Da Sie nur so viele Klassifizierer vorbereiten müssen, wie es Klassen gibt, ist der Rechenaufwand geringer als der im Folgenden erläuterte Eins-gegen-Eins.

One-vs-One Im Gegensatz zu One-vs-Rest können Sie zwei beliebige Klassen auswählen und in zwei Klassen einteilen. Für die Anzahl der Kombinationen ist unter der Annahme, dass die Anzahl der Klassen $ n $ beträgt, ein Klassifizierer vom Typ $ n C_2 $ erforderlich. Wenn Sie beispielsweise 10 Klassen klassifizieren, war es in Ordnung, wenn in One-vs-Rest 10 Klassifizierertypen vorhanden waren. In One-vs-One sind jedoch $ _ {10} C_2 = 45 $ Klassifizierertypen erforderlich. Es wird sein. Die endgültige Klassifizierung wird von der Mehrheit jedes Klassifizierers festgelegt. Wenn Sie die Kernel-Methode für das Modell anstelle der linearen Regression verwenden, können Sie diese möglicherweise verwenden.

In Bezug auf das Scikit-Learn-Dokument scheint es tatsächlich wie folgt behandelt zu werden.

Mehrklassen-Soft max

Mehrklassen-Softmax wird heutzutage häufig in neuronalen Netzen verwendet. Verwenden Sie die ** Softmax-Funktion **, um zu erfahren, welche Klasse das Modell am wahrscheinlichsten ausgibt. Bevor wir uns mit der Softmax-Funktion befassen, wollen wir zunächst über One-Hot-Codierung sprechen.

One-Hot Encoding Einfach ausgedrückt bezieht sich One-Hot-Codierung auf den Vektor ** nur einer ist 1 und der andere ist 0 **. Zum Beispiel eine bestimmte Merkmalsmenge

Obst
Apfel
Orange
Apfel
Banane

Nehme an, dass Schreiben Sie dies wie folgt um.

Obst_Apfel Obst_Orange Obst_Banane
1 0 0
0 1 0
1 0 1
0 0 1

Dieses Formular hat den Vorteil, dass es in die zuvor erwähnten One-vs-Rest (One) -Klassifikationen unterteilt werden kann und dass die Berechnung der unten beschriebenen Softmax-Funktion einfach ist. Sie können auch die Funktion get_dummies () von Pandas und die Klasse OneHotEncoder von sikit-learn verwenden.

Softmax-Funktion

Die Softmax-Funktion ist eine Funktion, die mehrere Ausgaben in eine Wahrscheinlichkeitsverteilung von 1 (100%) umwandelt. Die Softmax-Funktion hat die folgende Form.

y_i=\frac{e^{x_{i}}}{\sum_{j=1}^{n}e^{x_{j}}} \\
\sum_{i=1}^{n}y_i=1

$ y $ ist ein $ n $ -Dimensionsvektor, ebenso wie die Ausgabe. Wenn im vorherigen Beispiel (Apfel, Mikan, Banane) = [3,8,1] ausgegeben wird, ist die Ausgabe der Softmax-Funktion [0,7,99,2,0,1] und die Wahrscheinlichkeit von Mikan ist am höchsten. Wird sein. Übrigens ist die Zwei-Klassen-Klassifikation in der obigen Formel n = 2.

\begin{align}
y_1&=\frac{e^{x_{1}}}{e^{x_1}+e^{x_2}} \\
&=\frac{\frac{e^{x_{1}}}{e^{x_{1}}}}{\frac{e^{x_{1}}}{e^{x_{1}}}+e^{x_2-x_1}} \\
&=\frac{1}{1+e^{x_2-x_1}}
\end{align}

Es wird sein. Dies ist die Sigmoidfunktion selbst.

Differenzierung der Softmax-Funktion

Die Unterscheidung der Softmax-Funktion ist

\dfrac{\partial y_i}{\partial x_j}= 
\begin{cases}y_i(1-y_i)&i=j\\-y_iy_j&i\neq j\end{cases}

ist.

Mehrklassenklassifizierung nach Softmax-Funktion

Die Anzahl der Klassen sei $ c $ und die Eingabe sei $ \ boldsymbol {x} = (x_0, x_1, \ cdots, x_n) $ ($ x_0 $ ist Bias). Der Parameter sei $ \ boldsymbol {W} $ mit der Größe $ (n + 1) $ × $ c $.

\boldsymbol{z}=\boldsymbol{W}^T\boldsymbol{x}

Optimieren Sie $ \ boldsymbol {W} $ mit.

Suchen Sie dazu die ** Cross-Entropy-Error-Funktion $ E $ **, ähnlich der logistischen Regression. Unter der Annahme, dass die Wahrscheinlichkeitsfunktion $ l $ ist, kann $ l $ durch eine Wahrscheinlichkeitsverteilung für alle Klassen und alle Stichproben dargestellt werden. Sei $ \ varphi_ {ij} ^ {t_ {ij}} $ die Ausgabe der Softmax-Funktion der Klasse $ j $ im $ i $ -ten Sample.

l=\prod_{i=1}^{n}\prod_{j=1}^{c}\varphi_{ij}^{t_{ij}}

Wird sein. Ich möchte die Wahrscheinlichkeit maximieren, aber ich nehme den Logarithmus von $ l $ und multipliziere ihn mit -1, um ihn zu einer entropieübergreifenden Fehlerfunktion zu machen.

\begin{align}
E&=-\log(l) \\
&=-\log\left(\prod_{i=1}^{n}\prod_{j=1}^{c}\varphi_{ij}^{t_{ij}}\right) \\
&= -\frac{1}{n}\sum_{i=1}^{n}\sum_{j=1}^{c}t_{ij}\log\varphi_{ij}
\end{align}

Ist die Verlustfunktion. Die Differenzierung der Verlustfunktion ist

\begin{align}
\frac{\partial E}{\partial w} &= -\frac{1}{n}\sum_{i=0}^n(t_{il}-\varphi_{il})x_{ij} \\
&=-\frac{1}{n}\boldsymbol{x}^T(\boldsymbol{t}-\phi)
\end{align}

Es wird sein. (Berechnung weggelassen)

Danach können Sie den Parameter $ \ boldsymbol {W} $ mithilfe der Gradientenmethode finden, um $ E $ zu minimieren.

Zusammenfassung

Wir haben zusammengefasst, wie die Zwei-Klassen-Klassifizierung auf die Mehrklassen-Klassifizierung ausgedehnt werden kann. Eine besteht darin, einfach die Zwei-Klassen-Klassifizierung zu wiederholen. Die andere bestand darin, die Softmax-Funktion zu verwenden, um die Wahrscheinlichkeitsverteilung für jede Klasse zu ermitteln.

Es hat lange gedauert, weil es nicht viele Seiten gab, auf denen die Methoden in diesem Bereich detailliert zusammengefasst waren, wahrscheinlich weil sie nicht gut durchsucht wurden und die Klassifizierung mit der Softmax-Funktion ziemlich kompliziert war.

Ab dem nächsten Mal möchte ich es in Python-Code ablegen.

Recommended Posts

Algorithmus für maschinelles Lernen (von der Klassifizierung in zwei Klassen bis zur Klassifizierung in mehreren Klassen)
Klassifikation des maschinellen Lernens
Algorithmus für maschinelles Lernen (Implementierung einer Klassifizierung mit mehreren Klassen)
Einführung in das maschinelle Lernen
Einführung in das maschinelle Lernen mit Simple Perceptron
Eine Einführung in das maschinelle Lernen
Überwachtes maschinelles Lernen (Klassifikation / Regression)
Super Einführung in das maschinelle Lernen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Einführung in das maschinelle Lernen Schreiben von Notizen
[Maschinelles Lernen] Unkorrelation aus der Mathematik verstehen
Klassifikation und Regression beim maschinellen Lernen
Einführung in die Bibliothek für maschinelles Lernen SHOGUN
Sammeln von Daten zum maschinellen Lernen
[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)
[Hinweis] Websites zu KI / maschinellem Lernen / Python [von Zeit zu Zeit aktualisiert]
Einführung in das maschinelle Lernen: Funktionsweise des Modells
scikit-learn Verwendung der Zusammenfassung (maschinelles Lernen)
Verbessertes Lernen, um von null bis tief zu lernen
Notieren Sie die Schritte zum Verständnis des maschinellen Lernens
Mit dem Ziel, ein Ingenieur für maschinelles Lernen zu werden, der MOOCs aus Vertriebspositionen verwendet
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
Verwenden Sie die API-Gruppe A3RT für maschinelles Lernen aus Python
Ich habe Python 3.5.1 installiert, um maschinelles Lernen zu studieren
Maschinelles Lernen
Bildausrichtung: von SIFT bis Deep Learning
Zusammenfassung der Klassifizierung und Implementierung von Algorithmen für maschinelles Lernen
Wie man Coursera / Maschinelles Lernen genießt (Woche 10)
Eine Einführung in Python für maschinelles Lernen
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Textklassifizierung
EV3 x Pyrhon Maschinelles Lernen Teil 3 Klassifizierung
Versuchen Sie, Code aus 1 mit dem Framework Chainer für maschinelles Lernen (Mnist Edition) zu schreiben.
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1
Versuchen Sie, den Strombedarf durch maschinelles Lernen vorherzusagen
Deep Learning von Grund auf neu ① Kapitel 6 "Lerntechniken"
Maschinelles Lernen ab 0 für theoretische Physikstudenten # 1
Python & Machine Learning Study Memo ⑤: Klassifikation von Ayame
Maschinelles Lernen von Grund auf neu (maschinelles Lernen mit Kaggle)
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Überblick über maschinelle Lerntechniken, die aus Scikit-Learn gelernt wurden
Maschinelles Lernen ab 0 für theoretische Physikstudenten # 2
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 2
progate Python-Lernnotiz (von Zeit zu Zeit aktualisiert)
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Anordnung von selbst erwähnten Dingen im Zusammenhang mit maschinellem Lernen
[Keras] Ich habe versucht, das Problem der Klassifizierung des Donut-Typ-Bereichs durch maschinelles Lernen zu lösen. [Studie]
SVM (Mehrklassenklassifikation)
Summe von 1 bis 10
Python Machine Learning Programming Kapitel 1 bietet Computern die Möglichkeit, aus der Datenzusammenfassung zu lernen
Sammeln Sie Druckfehlerinformationen von Toshiyuki Sakamoto "Machen und verstehen! Einführung in den Ensemble-Lernalgorithmus"
[Python] Speichern Sie PDF von Google Colaboratory in Google Drive! -Lass uns Daten für maschinelles Lernen sammeln-
Betreutes Lernen (Klassifizierung)
[Memo] Maschinelles Lernen
Beispiel für maschinelles Lernen