Die Eingabedaten werden unter Verwendung der folgenden linearen Diskriminanzfunktion in zwei Klassen klassifiziert.
f(x)=g(w^{T}x+\theta)\\
Hier,\theta = x_Wenn Sie es auf 0 setzen\\
=g(\sum _{i=0}^{d}w_ix_i)
Nichtlineare Aktivierungsfunktion: g(a) = \left\{
\begin{array}{ll}
+1 & (a \geq 0) \\
-1 & (a \lt 0)
\end{array}
\right.
Gewicht: w=(w_0,w_1,...,w_{d})、 \\
Eingabedaten: x=(x_0=\theta,x_1,x_2,...,x_{d})、
\\d: Anzahl der Dimensionen,
vorspannen:\theta(Willkürliche Nummer)
f(x) \Wenn geq 0, x\in C_{1}
f(x) \Wenn es 0 ist, x\in C_{2}
C_1:Klasse 1, C._2:Klasse 2
Von den obigen wird der Prozess zum Bestimmen des Parameters von weight_w_ als "Lernen" bezeichnet. Bias_θ_ (Bias-Parameter) kann standardmäßig verwendet werden, wird jedoch manuell angepasst (abgestimmt), um bessere Ergebnisse zu erzielen. Diejenigen, die manuell eingestellt werden, wie diese Vorspannung, werden im Allgemeinen als Parameter (Hyperparameter oder Abstimmungsparameter) bezeichnet, und das Anpassen der Parameter wird manchmal als Parameterabstimmung bezeichnet.
~ Parameterbeispiel ~ "Wenn Sie die Parameter mit einem einfachen Perzeptron einstellen, erhalten Sie einige Ergebnisse."
Darüber hinaus gibt es verschiedene Abstimmungsmethoden, z. B. eine Methode, bei der eine Person einfach manuell versucht, eine Rastersuche und eine Zufallsstichprobe.
Es kann für linear trennbare Probleme bei Zweiklassenproblemen verwendet werden. Grob gesagt ist ein linear trennbares Problem ein Problem, bei dem ein Satz der Klasse 1 und ein Satz der Klasse 2 bei zwei Dimensionen durch eine einzige gerade Linie getrennt werden können. Verallgemeinernd wird die Fähigkeit, eine Menge der Klasse 1 und eine Menge der Klasse 2 im _n_dimensionalen Raum auf einer n-1-dimensionalen Superebene zu trennen, auch als lineare Trennung bezeichnet. Die folgende Abbildung zeigt ein Beispiel für einen Fall, in dem eine lineare Trennung möglich ist, und einen Fall, in dem eine lineare Trennung nicht möglich ist.
Ein häufiges Beispiel für eine bestimmte Anwendung eines überwachten Lernalgorithmus wie Perceptron ist die Ermittlung von Spam-E-Mails. Grob gesagt wird Spam-Mail nach dem folgenden Verfahren beurteilt.
Der Merkmalsvektor muss aus qualitativen Daten quantifiziert werden, wobei die Merkmale der Daten gut verbleiben. Dies kann die Genauigkeit erheblich verändern und ist eine sehr wichtige Aufgabe. Ein spezielles Beispiel für die Methode zur Erstellung von Merkmalsvektoren ist unten angegeben.
[Beispiel: Methode zur Erstellung von Feature-Vektoren] Ich möchte feststellen, ob es sich um Spam des Betreffs handelt, auch wenn die folgenden Daten vorliegen.
・ Betreff der Spam-Mail: Mein Freund starb im Kampf mit Oarikui ・ Betreff der regulären E-Mail: Antrag auf Änderung der Besprechungszeit
Eine Technik, die im Bereich der Verarbeitung natürlicher Sprache häufig verwendet wird, ist eine Technik, die als morphologische Analyse bezeichnet wird. MeCab und Cabocha sind bekannte Werkzeuge für die morphologische Analyse. Durch morphologische Analyse kann der Eingabesatz in morphologische Elemente unterteilt werden (die kleinste Einheit, die in der Sprache eine Bedeutung hat). Infolgedessen wird der folgende Satz vervollständigt. (Da es sich um eine morphologische Analyse einer Person handelt, die nicht gut Japanisch kann, kann die Genauigkeit nicht garantiert werden.)
・ Betreff der Spam-Mail: Freund / ist / kämpft / tot / tot / ・ Regelmäßiger E-Mail-Betreff: Besprechung / Zeit / Änderung / Von / Anfrage /
Als nächstes wird ein morphologisches Wörterbuch unter Verwendung der obigen Daten erstellt. Infolgedessen sieht das Wörterbuch folgendermaßen aus:
Wörterbuch\in\{Freund,Aber,Oarikui,Wann,Kampf,tot,ich bin fertig,Treffen,Zeit,Veränderung,von,Anfrage\}
Schließlich wird unter Verwendung des zuvor erstellten Wörterbuchs ein Merkmalsvektor wie unten gezeigt erstellt.
Spam-Mail-Feature-Vektor x_1=\{1,1,1,1,1,1,1,0,0,0,0,0\},Lehreretikett t=\{-1\}
Normaler Mail-Feature-Vektor x_2=\{0,0,0,0,0,0,0,1,1,1,1,1 \},Lehreretikett t=\{+1\}
Wie der Merkmalsvektor erstellt wird, wird das Vorhandensein / Fehlen (1: Ja, 0: Nein) des Erscheinungsbilds des im Wörterbuch enthaltenen Wortes im Array gespeichert. Diese Methode wird als Bag-Of-Words-Methode bezeichnet. In einigen Fällen wird es basierend auf der Häufigkeit erstellt, mit der ein Wort erscheint, und nicht darauf, ob ein Wort erscheint oder nicht. Zusätzlich gibt es als Erweiterung eine Gewichtungsmethode namens Tf-idf. Dies wird verwendet, um die Wichtigkeit von Wörtern zu verringern, die in vielen Dokumenten vorkommen, und um die Wichtigkeit von Wörtern zu erhöhen, die nur in bestimmten Dokumenten vorkommen. Obwohl die Lehrerbezeichnung festgelegt ist, werden im Allgemeinen 0 und 1 angewendet, wenn sie in einem Wahrscheinlichkeitsmodell verwendet werden, und -1 und 1, die mit Aktivierungsfunktionen wie Perceptron kompatibel sind, werden häufig angewendet.
Das Obige ist das Verfahren zum Erstellen eines Merkmalsvektors.
Darüber hinaus kann die Begründung, dass es in einem linear trennbaren Problem verwendet werden kann, durch den "Perceptron-Konvergenzsatz" erklärt werden. Siehe unten für den Beweis. http://ocw.nagoya-u.jp/files/253/haifu%2804-4%29.pdf
Das Konzept der Lernmethode ist einfach: Wenn Sie einen Fehler machen, aktualisieren Sie den Wert von w mithilfe der unten beschriebenen Formel und setzen Sie die Aktualisierung fort, bis keine Fehler mehr vorliegen. Die Trainingsdatenreihe ist wie folgt definiert.
X=\{X_1,X_2,...,X_M\} \\
M:Die Anzahl der Daten
Hier wird ein Satz falsch klassifizierter Trainingsdaten wie folgt ausgedrückt.
X_n=\{x_1,x_2,...,x_n\}
Ich möchte das Gewicht w so finden, dass _f (x) _> 0 für Daten der Klasse 1 und _f (x) _ <0 für Daten der Klasse 2 ist. In diesem Fall erfüllen alle Daten unter Verwendung der Lehrerbezeichnung t = {+ 1, -1} die folgenden Anforderungen.
w^Tx_it_i>0
Die folgende Fehlerfunktion E (・), die korrekt klassifizierten Daten einen Fehler von 0 zuweist, kann berücksichtigt werden.
E(w) =-\sum_{n \in X} w^Tx_nt_n
Wenn Sie den Wert von w festlegen, um dies zu minimieren (0 zu werden), können Sie gut klassifizieren. Um dies zu minimieren, wird ein stochastisches Gradientenabstiegsverfahren verwendet. Bei der probabilistischen Gradientenabstiegsmethode wird w durch die folgende Berechnung aktualisiert, wenn die Fehlerfunktion aus der Summe von Datenpunkten wie _E (w) _ besteht, wenn Daten n angegeben werden.
w^{(r+1)}=w^{(r)}-\mu \nabla E_n \\
r: Anzahl der Wiederholungen,\mu: Lernratenparameter\\
w^{(r)}:Gewicht w nach Aktualisierung der Zeiten
Aus dem Obigen kann die Aktualisierungsformel wie folgt abgeleitet werden.
w^{(r+1)}=w^{(r)}-\mu \nabla E(w) \\
=w^{(r)}+\mu x_nt_n
In dem Bereich, in dem Daten abhängig vom Wert von w falsch klassifiziert werden, unabhängig davon, ob der Wert von t +1 oder -1 ist, ist der Fehler von falsch klassifizierten Daten _E (w) _ Beitrag ist eine lineare Funktion. Abhängig vom Wert von w ist der Beitrag der Daten zum Fehler _E (w) _ in dem Bereich, in dem die Daten korrekt klassifiziert sind, 0. Daher ist _E (w) _ eine unterteilte lineare Funktion. Daher wird der Gradient von _E (w) _ wie folgt berechnet.
E(w) = \frac{\partial E(w)}{\partial w} \\
=x_nt_n
Der folgende Code ist ein Code, der von Perceptron für UND-Operationen gelöst werden sollte, die weder entworfen noch schlampig sind. Der Lernzustand ist nun eingezeichnet. Es mag scheinen, als sollte es eine Klasse oder eine Methode sein, aber bitte verstehen Sie. Ich werde es umschreiben, wenn ich Lust dazu habe. Zum Ausführen müssen Sie die Bibliotheken numpy und matplotlib installieren.
# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
#Inaktivierungsfunktion g(x)Methode von
def predict(w,x):
out = np.dot(w,x)
if out >= 0:
o = 1.0
else:
o = -1.0
return o
#Methode zum Plotten
def plot(wvec,x1,x2):
x_fig=np.arange(-2,5,0.1)
fig = plt.figure(figsize=(8, 8),dpi=100)
ims = []
plt.xlim(-1,2.5)
plt.ylim(-1,2.5)
#Handlung
for w in wvec:
y_fig = [-(w[0] / w[1]) * xi - (w[2] / w[1]) for xi in x_fig]
plt.scatter(x1[:,0],x1[:,1],marker='o',color='g',s=100)
plt.scatter(x2[:,0],x2[:,1],marker='s',color='b',s=100)
ims.append(plt.plot(x_fig,y_fig,"r"))
for i in range(10):
ims.append(plt.plot(x_fig,y_fig,"r"))
ani = animation.ArtistAnimation(fig, ims, interval=1000)
plt.show()
if __name__=='__main__':
wvec=[np.array([1.0,0.5,0.8])]#Anfangswert des Gewichtsvektors, angemessen
mu = 0.3 #Lernkoeffizient
sita = 1 #Vorspannungskomponente
#UND-Funktionsdaten(Die hintere Reihe ist die Vorspannungskomponente:1)
x1=np.array([[0,0],[0,1],[1,0]]) #Klasse 1(Berechnungsergebnis ist 0)Matrixgenerierung
x2=np.array([[1,1]]) #Klasse 2(Das Berechnungsergebnis ist 1)Matrixgenerierung
bias = np.array([sita for i in range(len(x1))])
x1 = np.c_[x1,bias] #Verketten Sie die Verzerrung auf das Ende von Daten der Klasse 1
bias = np.array([sita for i in range(len(x2))])
x2 = np.c_[x2,bias] #Verketten Sie die Verzerrung auf das Ende von Daten der Klasse 2
class_x = np.r_[x1,x2] #Matrixverkettung
t = [-1,-1,-1,1] #UND-Funktionsbezeichnung
# o:Fragen Sie nach der Ausgabe
o=[]
while t != o:
o = [] #Initialisieren
#Lernphase
for i in range(class_x.shape[0]):
out = predict(wvec[-1], class_x[i,:])
o.append(out)
if t[i]*out<0: #Wenn die Ausgabe und die Lehrerbezeichnung unterschiedlich sind
wvectmp = mu*class_x[i,:]*t[i] #Änderungsbetrag w
wvec.append(wvec[-1] + wvectmp) #Gewichtsaktualisierung
plot(wvec,x1,x2)
・ SVM ・ Mehrschichtiges Perzeptron
Mustererkennung und maschinelles Lernen
Erste Mustererkennung
http://home.hiroshima-u.ac.jp/tkurita/lecture/prnn/node20.html
https://speakerdeck.com/kirikisinya/xin-zhe-renaiprmlmian-qiang-hui-at-ban-zang-men-number-2
http://tjo.hatenablog.com/entry/2013/05/01/190247
http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi1ppt/iwasaki.pdf
http://ocw.nagoya-u.jp/files/253/haifu%2804-4%29.pdf
Recommended Posts