Perceptron-Lernexperiment mit Python

1. Perceptron-Lernregeln

Die Lernregel von Perceptron ist eine Methode zum Ermitteln des Gewichts einer linearen Diskriminanzfunktion durch Lernen. Das Muster wird durch einen einzelnen Punkt im Feature-Space dargestellt. Ist es beispielsweise bei der Betrachtung von zwei Klassen möglich, die im Merkmalsraum verteilten Punkte durch die durch die lineare Diskriminanzfunktion erzeugte Superebene in zwei zu trennen? Um es in zwei Teile zu trennen, muss das Gewicht der linearen Diskriminanzfunktion angepasst werden. Die Anpassung wird zum Lernen. Mit anderen Worten, durch Lernen wird eine Superplane zum Trennen in zwei Teile erzeugt. Zunächst sei die Klasse Ci (i = 1 ... c), x das Eingabemuster und die Anzahl der Dimensionen d. Die lineare Diskriminanzfunktion gi (x) der Klasse Ci ist

g_i(x) = ω₀+\sum_{j=1}^{d} ω_jx_j

Dieses Mal werden wir der Einfachheit halber zwei Klassen betrachten und die Klassen C₁ und C₂ sein lassen. Wenn gi (x) maximal ist, wird angenommen, dass die Klasse, zu der x gehört, Ci ist (abhängig von der linearen Unterscheidungsfunktion kann das Minimum auch das Unterscheidungsergebnis sein, daher ist hier die Präambel, dass das Maximum das Unterscheidungsergebnis ist. tat). Zu diesem Zeitpunkt, wenn das Eingabemuster Klasse C₁ ist, ist g₁ (x)> g₂ (x). Und wenn das Eingabemuster Klasse C₂ ist, ist g₁ (x) <g₂ (x). Daher wird die Identifikationsfunktion gi (x) zu einer kombiniert.

g(x) = g_1(x)-g_2(x)
     =ω'₀+\sum_{j=1}^{d} ω'_jx'_j

Auf diese Weise wird der Gewichtsvektor W erhalten. Die lineare Diskriminanzfunktion, die g (x) ersetzt, trennt den Merkmalsraum für jede Klasse durch eine Superebene. Es ist jedoch auf linear trennbare Verteilungen beschränkt, da die Lernregel von Perceptron lautet, dass die Gewichte konvergieren, wenn sie linear trennbar sind (Perceptrons Konvergenzsatz).

2. In Python implementiert

Erstens könnte der Merkmalsvektor des Lernmusters als Eingabe auf der Ausführungsseite verwendet werden, er wurde jedoch im Voraus festgelegt, da die Lernregeln von Perceptron nur angewendet werden können, wenn die Verteilung linear identifizierbar ist. Es ist wie folgt. Klasse C₁: x₁ = (1,1,1,1), x₂ = (1,0,1,1), x₃ = (1,1,0,1), x₄ = (1,1,1,0) Klasse C₂: x₅ = (1,0,0,0), x₆ = (1,1,0,0), x₇ = (1,0,1,0), x₈ = (1,0,0,1) Das 0. Element jedes Merkmalsvektors ist alle 1, was der mit ω₀ multiplizierte Wert der linearen Diskriminanzfunktion g (x) ist. In Wirklichkeit sind die drei Elemente nach dem ersten Element die Merkmalsvektoren, und der Merkmalsraum ist auch dreidimensional (genau genommen wird der vierdimensionale Vektor einschließlich des ersten Elements als erweiterter Merkmalsvektor bezeichnet. Ursprünglich ist der Merkmalsvektor ( (Ohne Erweiterung) bedeutet den ersten bis d-ten Vektor). Da es sich um einen dreidimensionalen Merkmalsraum handelt, ist es erfolgreich, wenn die beiden Klassen durch eine zweidimensionale Superebene getrennt sind. Der Lernkoeffizient in der Lernregel wurde auf 1 gesetzt. Zunächst werden die Merkmalsvektoren des Lernmusters wie folgt im Merkmalsraum verteilt. (Rot: Klasse C₁, Blau: Klasse C₂) image.png Ich habe die Lernregeln in Python implementiert. Der Code lautet wie folgt.

perceptron_learning.py


import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#Lernmuster-Merkmalsvektor
x = np.array([[1, 1, 1, 1], [1, 0, 1, 1], [1, 1, 0, 1], [1, 1, 1, 0], [1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 1, 0], [1, 0, 0, 1]])

#Gewichtsvektor
w = np.array([-5, 1, 1, 1])

#Perceptron-Lernregeln
while True:
	judge = 0
	count = 1;
	for data in x:
		print(w)
		if count <= x.shape[0]/2:
			if np.dot(data, w)<=0:
				w += data
				judge = 1
		else:
			if np.dot(data, w)>=0:
				w -= data
				judge = 1
		count += 1
	print()
	if judge == 0:
		break


#Lineare Diskriminanzfunktion
def f(x1, x2):
    return (w[1]*x1+w[2]*x2+w[0])/(-w[3])

x1, x2 = np.mgrid[-1:2:0.1, -1:2:0.1]
x3 = f(x1, x2)

#Einstellungen für den Funktionsbereich
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d", facecolor="w")
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_zlabel('x3')
ax.set_title("feature space")

#Zeichnen einer linearen Diskriminanzfunktion
ax.plot_surface(x1, x2, x3, cmap='BuGn')

i = 1

#Lernmuster zeichnen
for point in x:
	if i<=x.shape[0]/2:
		ax.scatter(point[1], point[2], point[3], c='red')
	else:
		ax.scatter(point[1], point[2], point[3], c='blue')
	i += 1

#Funktionsbereich anzeigen
plt.show()

Als Ergebnis der Ausführung ist der Merkmalsraum wie folgt. image.png Wie in der obigen Abbildung gezeigt, sind die roten und blauen Punkte durch die grüne Fläche (Superebene) getrennt. Daher ist ersichtlich, dass das Gewicht durch die Lernregel erhalten wurde.

3. Referenzen

[1] Kenichiro Ishii, Nobuyoshi Ueda, Eisaku Maeda, Hiroshi Murase. "Leicht verständliche Mustererkennung 2. Auflage". Ohm, 2019.

Recommended Posts

Perceptron-Lernexperiment mit Python
Python lernen mit ChemTHEATER 03
Python lernen mit ChemTHEATER 05-1
Python lernen mit ChemTHEATER 02
Python lernen mit ChemTHEATER 01
Maschinelles Lernen mit Pokemon gelernt
Verbessertes Lernen ab Python
Maschinelles Lernen mit Python! Vorbereitung
Beginnend mit maschinellem Python-Lernen
Iterative Verarbeitung von Python durch Chemoinfomatik gelernt
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
Python-Datenstruktur mit Chemoinfomatik gelernt
Python lernen
Effiziente Netzaufnahme mit Python
1. Mit Python 1-1 gelernte Statistiken. Grundlegende Statistiken (Pandas)
Implementierte Perceptron-Lernregeln in Python
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Multi Layer Perceptron für Deep Learning (Deep Learning mit Python; MPS Yokohama Deep Learning Series)
[Python] Mit RxPY (3.0.1) gelernte reaktive Erweiterungen [Rx]
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
[Shakyo] Begegnung mit Python zum maschinellen Lernen
1. Mit Python 1-3 gelernte Statistiken. Berechnung verschiedener Statistiken (Statistiken)
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
[Python] Probieren Sie mit Keras-RL ganz einfach erweitertes Lernen (DQN) aus
Aufbau einer KI / maschinellen Lernumgebung mit Python
FizzBuzz in Python3
Scraping mit Python
[Python] Lernnotiz 1
Python-Lernnotizen
Statistik mit Python
Scraping mit Python
Python mit Go
Python-Lernausgabe
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Python-Lernseite
Getestet mit Python
Python-Lerntag 4
Python beginnt mit ()
Quellcode für die Trennung von Tonquellen (Übungsreihe zum maschinellen Lernen), der mit Python gelernt wurde
mit Syntax (Python)
Python Deep Learning
Python-Lernen (Ergänzung)
Deep Learning × Python
Bingo mit Python
Zundokokiyoshi mit Python
Python-Lernnotizen
Excel mit Python