## Petit exemple de Percepton - Y.C¶

In [160]:
%matplotlib inline
from numpy import *


# Perceptron simple¶

In [161]:
X = random.randn(100,2)

In [163]:
# Avec 'list comprehension':
y = array([1 if dot(ex,[3,2])>0 else -1 for ex in X])

# ou la meme chose avec une boucle for:
# y = []
# for ex in X:
#     if dot(ex,[3,2]) > 0:
#         y.append(1)
#     else:
#         y.append(-1)

In [164]:
X[:10] , y[:10]

Out[164]:
(array([[-1.10337514,  0.56440917],
[-1.19692193,  0.82374498],
[ 0.99301882,  0.10008746],
[ 0.57469877, -0.65705228],
[ 1.27769748, -0.71771736],
[ 0.68261423, -1.50562944],
[-0.0973167 ,  1.55392975],
[ 1.48548657, -1.18423599],
[ 2.63523079, -0.07771188],
[-1.86743191,  0.75247071]]),
array([-1, -1,  1,  1,  1, -1,  1,  1,  1, -1]))

In [165]:
def affiche(X,y):
Xpos = X[y > 0]
Xneg = X[y < 0]

import matplotlib.pyplot as plt
plt.scatter(Xpos[:,0],Xpos[:,1],c='blue')
plt.scatter(Xneg[:,0],Xneg[:,1],c='red')

affiche(X,y)

In [166]:
def phi(ex):
return ex

In [167]:
def perceptron(T):
nexs  = len(X)
eta   = 0.2
natts = len(phi(X[0]))

w = zeros( natts )
for k in range(T):
i = random.randint(0,nexs)
ex= phi( X[i] )
if y[i]*dot(w,ex) <= 0:
w = w + eta*y[i]*ex
print "erreur de classif"
else:
print "ok"

return w

In [168]:
perceptron(30)

erreur de classif
ok
ok
erreur de classif
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok


Out[168]:
array([ 0.28215454,  0.12848044])


# Perceptron avec transformation des donnees¶

In [169]:
def phi(ex):
return array( [1.0] + list(ex) + [i*j for i in ex for j in ex] )

phi([2,3])

Out[169]:
array([ 1.,  2.,  3.,  4.,  6.,  6.,  9.])

In [170]:
# je definis un cercle de rayon 1. Tous les exemples dans le cercle sont positifs.
y = array([1 if (ex[0]**2+ex[1]**2) < 1 else -1 for ex in X])

In [171]:
affiche(X,y)

In [173]:
w = perceptron(40)

erreur de classif
erreur de classif
ok
erreur de classif
erreur de classif
erreur de classif
erreur de classif
ok
erreur de classif
ok
erreur de classif
ok
ok
ok
ok
ok
erreur de classif
ok
ok
ok
erreur de classif
ok
ok
ok
erreur de classif
erreur de classif
ok
ok
ok
ok
ok
ok
ok
ok
erreur de classif
ok
ok
ok
ok
ok



## Voici ce que le classifieur a appris¶

In [174]:
y_pred = array([-1 if dot(w,phi(ex)) <= 0 else 1 for ex in X])

affiche(X,y_pred)