La façon dont le perceptron prédit la sortie à chaque itération est en suivant l'équation:
yj=f[wTx]=f[w⃗ ⋅x⃗ ]=f[w0+w1x1+w2x2+...+wnxn]
Comme vous l'avez dit, votre poids contient un terme de biais . Par conséquent, vous devez inclure un dans l'entrée pour conserver les dimensions dans le produit scalaire.w⃗ w01
Vous commencez généralement par un vecteur de colonne pour les poids, c'est-à-dire un vecteur . Par définition, le produit scalaire nécessite que vous transposiez ce vecteur pour obtenir un vecteur de poids et pour compléter ce produit scalaire, vous avez besoin d'un vecteur d'entrée . C'est pourquoi a souligné le changement entre la notation matricielle et la notation vectorielle dans l'équation ci-dessus, afin que vous puissiez voir comment la notation vous suggère les bonnes dimensions.n×11×nn×1
N'oubliez pas que cela se fait pour chaque entrée que vous avez dans l'ensemble de formation. Ensuite, mettez à jour le vecteur de poids pour corriger l'erreur entre la sortie prévue et la sortie réelle.
En ce qui concerne la limite de décision, voici une modification du code d'apprentissage scikit que j'ai trouvé ici :
import numpy as np
from sklearn.linear_model import Perceptron
import matplotlib.pyplot as plt
X = np.array([[2,1],[3,4],[4,2],[3,1]])
Y = np.array([0,0,1,1])
h = .02 # step size in the mesh
# we create an instance of SVM and fit our data. We do not scale our
# data since we want to plot the support vectors
clf = Perceptron(n_iter=100).fit(X, Y)
# create a mesh to plot in
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min, m_max]x[y_min, y_max].
fig, ax = plt.subplots()
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# Put the result into a color plot
Z = Z.reshape(xx.shape)
ax.contourf(xx, yy, Z, cmap=plt.cm.Paired)
ax.axis('off')
# Plot also the training points
ax.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)
ax.set_title('Perceptron')
qui produit le tracé suivant:
Fondamentalement, l'idée est de prédire une valeur pour chaque point dans un maillage qui couvre chaque point et de tracer chaque prédiction avec une couleur appropriée en utilisant contourf
.