Expérience d'apprentissage Perceptron apprise avec Python

1. Règles d'apprentissage de Perceptron

La règle d'apprentissage de Perceptron est une méthode pour trouver le poids d'une fonction discriminante linéaire par apprentissage. Le motif est représenté par un point unique sur l'espace des fonctions. Par exemple, lorsqu'on considère deux classes, est-il possible de séparer les points distribués dans l'espace des caractéristiques en deux par le superplan généré par la fonction discriminante linéaire? Afin de le séparer en deux, le poids de la fonction discriminante linéaire doit être ajusté. L'ajustement devient apprentissage. En d'autres termes, un superplan pour se séparer en deux est créé par apprentissage. Tout d'abord, soit la classe Ci (i = 1 ... c), x le motif d'entrée et le nombre de dimensions d. La fonction discriminante linéaire gi (x) de classe Ci est

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

Cette fois, par souci de simplicité, nous allons considérer deux classes, et laisser les classes être C₁ et C₂. De plus, lorsque gi (x) est le maximum, on suppose que la classe à laquelle appartient x est Ci. fait). A ce moment, lorsque le motif d'entrée est de classe C₁, g₁ (x)> g₂ (x). Et lorsque le motif d'entrée est de classe C₂, g₁ (x) <g₂ (x). Par conséquent, la fonction d'identification gi (x) est combinée en une seule.

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

De cette manière, le vecteur poids W est obtenu. La fonction discriminante linéaire, qui le remplace par g (x), sépare l'espace des caractéristiques de chaque classe par un superplan. Cependant, il est limité aux distributions linéairement séparables, car les règles d'apprentissage de Perceptron convergent lorsqu'elles sont linéairement séparables (Théorème de convergence de Perceptron).

2. Implémenté en Python

Premièrement, le vecteur de caractéristiques du modèle d'apprentissage pourrait être utilisé comme entrée du côté exécution, mais il a été défini à l'avance car les règles d'apprentissage de Perceptron ne peuvent être appliquées que si la distribution est linéairement identifiable. C'est comme suit. Classe C₁: x₁ = (1,1,1,1), x₂ = (1,0,1,1), x₃ = (1,1,0,1), x₄ = (1,1,1,0) Classe C₂: x₅ = (1,0,0,0), x₆ = (1,1,0,0), x₇ = (1,0,1,0), x₈ = (1,0,0,1) Le 0e élément de chaque vecteur de caractéristique est tout 1, qui est la valeur multipliée par ω₀ de la fonction discriminante linéaire g (x). En réalité, les trois éléments après le premier élément sont les vecteurs de caractéristiques, et l'espace des caractéristiques est également tridimensionnel (à proprement parler, le vecteur à quatre dimensions comprenant le premier élément est appelé le vecteur de caractéristiques étendu. À l'origine, le vecteur de caractéristiques ( (Sans extension) signifie le premier au dth vecteurs). Puisqu'il s'agit d'un espace d'entités tridimensionnel, il réussit si les deux classes sont séparées par un superplan bidimensionnel. Le coefficient d'apprentissage dans la règle d'apprentissage a été fixé à 1. Tout d'abord, les vecteurs de caractéristiques du modèle d'apprentissage sont répartis dans l'espace de caractéristiques comme suit. (Rouge: Classe C₁, Bleu: Classe C₂) image.png J'ai implémenté les règles d'apprentissage en Python. Le code est comme suit.

perceptron_learning.py


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

#Vecteur de fonction de modèle d'apprentissage
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]])

#Vecteur de poids
w = np.array([-5, 1, 1, 1])

#Règles d'apprentissage Perceptron
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


#Fonction discriminante linéaire
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)

#Paramètres de l'espace des fonctionnalités
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")

#Dessiner une fonction discriminante linéaire
ax.plot_surface(x1, x2, x3, cmap='BuGn')

i = 1

#Dessiner des modèles d'apprentissage
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

#Afficher l'espace des fonctionnalités
plt.show()

À la suite de l'exécution, l'espace des fonctionnalités est le suivant. image.png Comme le montre la figure ci-dessus, les points rouge et bleu sont séparés par la surface verte (superplan). Par conséquent, on peut voir que le poids a été obtenu par la règle d'apprentissage.

3. Références

[1] Kenichiro Ishii, Nobuyoshi Ueda, Eisaku Maeda, Hiroshi Murase. "Reconnaissance de modèle facile à comprendre 2ème édition". Ohm, 2019.

Recommended Posts

Expérience d'apprentissage Perceptron apprise avec Python
Apprendre Python avec ChemTHEATER 03
Apprendre Python avec ChemTHEATER 05-1
Apprendre Python avec ChemTHEATER 02
Apprendre Python avec ChemTHEATER 01
L'apprentissage automatique appris avec Pokemon
Apprentissage amélioré à partir de Python
Apprentissage automatique avec Python! Préparation
Commencer avec l'apprentissage automatique Python
Traitement itératif Python appris avec ChemoInfomatics
Apprentissage automatique par python (1) Classification générale
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Structure de données Python apprise avec la chimioinfomatique
apprentissage de python
Ramassage efficace du réseau avec Python
1. Statistiques apprises avec Python 1-1. Statistiques de base (Pandas)
Implémentation des règles d'apprentissage Perceptron en Python
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Perceptron multi-couches pour le Deep Learning (Deep Learning avec Python; Série MPS Yokohama Deep Learning)
[Python] Extensions réactives apprises avec RxPY (3.0.1) [Rx]
Apprentissage automatique avec python (2) Analyse de régression simple
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
1. Statistiques apprises avec Python 1-3. Calcul de diverses statistiques (statistiques)
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
[Python] Essayez facilement l'apprentissage amélioré (DQN) avec Keras-RL
Construction d'environnement AI / Machine Learning avec Python
FizzBuzz en Python3
Grattage avec Python
[Python] Note d'apprentissage 1
Notes d'apprentissage Python
Statistiques avec python
Grattage avec Python
Python avec Go
sortie d'apprentissage python
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Site d'apprentissage Python
Testé avec Python
Apprentissage Python jour 4
python commence par ()
Code source pour la séparation des sources sonores (série de pratiques d'apprentissage automatique) appris avec Python
avec syntaxe (Python)
Apprentissage en profondeur Python
apprentissage python (supplément)
Apprentissage profond × Python
Bingo avec python
Zundokokiyoshi avec python
notes d'apprentissage python
Excel avec Python