[PYTHON] Einführung in das maschinelle Lernen mit Simple Perceptron

1. Was ist einfaches Perceptron?

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.

1.1. Wofür kann es verwendet werden?

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. senkeibunri.png

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.

  1. Nehmen Sie zwei Klassen an, Spam-Mail und reguläre Mail.
  2. Erstellen Sie als Nächstes aus beiden E-Mails einen Merkmalsvektor (oder eine Merkmalsmenge oder -identität) und ein Lehreretikett (Spam oder normales Etikett).
  1. Geben Sie den Merkmalsvektor und die Lehrerbezeichnung in den Lernenden ein (diesmal das einfache Perzeptron) und führen Sie das Lernen durch.
  2. Beurteilen Sie anhand des vollständigen mathematischen Modells (diesmal des linearen Diskriminanzfunktionsmodells).

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

2. Perceptron-Lernen (probabilistischer Algorithmus für den steilsten Abstieg)

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 

3. Python-Implementierung

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. output.gif

# 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)

4. Typischer Algorithmus, der Simple Perceptron erweitert

・ SVM ・ Mehrschichtiges Perzeptron

5. Referenzen

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

Einführung in das maschinelle Lernen mit Simple Perceptron
Eine Einführung in das maschinelle Lernen
Eine Einführung in Python für maschinelles Lernen
Einführung in das maschinelle Lernen
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Algorithmus für maschinelles Lernen (einfaches Perzeptron)
[Super Einführung] Maschinelles Lernen mit Python - Von der Umgebungskonstruktion bis zur Implementierung von Simple Perceptron-
Einführung in das maschinelle Lernen Schreiben von Notizen
Einführung in die Bibliothek für maschinelles Lernen SHOGUN
Einführung in das maschinelle Lernen: Funktionsweise des Modells
Eine Einführung in die Objektorientierung - Geben Sie einem Objekt ein Kind.
Mit dem Ziel, ein Ingenieur für maschinelles Lernen zu werden, der MOOCs aus Vertriebspositionen verwendet
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Maschinelles Lernen _ Machen Sie einfaches Perzeptron nichtlinear
Kostenlose Version von DataRobot! ?? Einführung in "PyCaret", eine Bibliothek, die maschinelles Lernen automatisiert
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Eine grobe Einführung in die neuronale maschinelle Übersetzungsbibliothek
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Einfacher Code, der in Kaggles Titanic: Maschinelles Lernen aus Katastrophen eine Punktzahl von 0,81339 ergibt
[Lernmemorandum] Einführung in vim
Einführung in Private TensorFlow
Eine super Einführung in Linux
Erstellen Sie eine maschinelle Lernumgebung
Einführung in Deep Learning ~ Lernregeln ~
Eine Einführung in die Python-Programmierung
Einführung in die Bayes'sche Optimierung
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Tag 68 [Einführung in Kaggle] Random Forest war einfach.
Einführung in das maschinelle Lernen mit scikit-learn-Von der Datenerfassung bis zur Parameteroptimierung
So generieren Sie einen öffentlichen Schlüssel aus einem privaten SSH-Schlüssel
Maschinelles Lernen mit Nogisaka 46 und Keyakizaka 46 Teil 1 Einführung
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Ein Beispiel für einen Mechanismus, der eine Vorhersage von HTTP aus dem Ergebnis des maschinellen Lernens zurückgibt
[Maschinelles Lernen] Verstehen der linearen einfachen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
Eine Einführung in Mercurial für Nicht-Ingenieure
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, dass Standardisierung zu einem Durchschnitt von 0 und einer Standardabweichung von 1 führt.
[Maschinelles Lernen] Unkorrelation aus der Mathematik verstehen
[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)
Einführung in die Python-Grundlagen des maschinellen Lernens (unbeaufsichtigtes Lernen / Hauptanalyse)
Vor der Einführung in das maschinelle Lernen. ~ Techniken, die für anderes maschinelles Lernen als maschinelles Lernen erforderlich sind ~
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
[Einführung] Von der Installation von Kibana bis zum Start
Algorithmus für maschinelles Lernen (Einzelregressionsanalyse)
Einführung in Deep Learning ~ Codierungsvorbereitung ~
Inverse Analyse des maschinellen Lernmodells
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 1
Konvertieren Sie eine Zeichenfolge in ein Bild
Ab Ubuntu 20.04 Einführung in die Umgebungskonstruktion
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API
Eine leichte Einführung in die Objekterkennung
So bekommen Sie einen Ingenieur aus Ihren 30ern