import scipy,pylab,numpy from numpy import * from scipy import * from pylab import * from urllib import urlopen from gzip import GzipFile from scipy.spatial import distance from scipy.spatial.distance import cdist data = random_sample((100,2)) labels = (data[:,0]*0.7+data[:,1]*0.4>0.5) sum(labels) # plotting the data points cla() d0 = data[labels==False] d1 = data[labels] plot(d0[:,0],d0[:,1],"bo") plot(d1[:,0],d1[:,1],"ro") savefig("tmp.png") print len(d0),len(d1) cla() d0 = data[labels==False] d1 = data[labels] xlim((0,1)); ylim((0,1)) plot(d0[:,0],d0[:,1],"bo") plot(d1[:,0],d1[:,1],"ro") plot([0.15,0.72],[1.0,0.0],"g") # guess savefig("tmp.png") print len(d0),len(d1) # augmenting the original vectors augmented = concatenate([ones((100,1)),data],axis=1) flipped = augmented.copy() flipped[labels==False] = -flipped[labels==False] # random initialization of weight vector a = random_sample((3)) a # perceptron learning for epoch in range(100): nchanged = 0 for i in range(len(flipped)): if dot(a,flipped[i])>0: continue a += flipped[i] nchanged += 1 print (epoch,nchanged), if nchanged==0: break print # result of learning d,a0,a1 = a print d,a0,a1 # plotting the learned decision boundary cla() d0 = data[labels==False] d1 = data[labels] xlim((0,1)); ylim((0,1)) plot(d0[:,0],d0[:,1],"bo") plot(d1[:,0],d1[:,1],"ro") plot([0,-d/a0],[-d/a1,0],"g") savefig("tmp.png") print len(d0),len(d1)