#author:xinxinzhang
import numpy as np def loadData(): #加载数据 X=np.mat([[3,3], [4,3], [1,1]]) Y=[1,1,-1] return X,Y def Gram(X): #计算Gram矩阵 m,n=np.shape(X) G=[None]*m for i in range(m): G[i]=[0]*m for j in range(m): G[i][j]=int(np.dot(X[i],X[j].T)) #G=[xi*xj] return np.mat(G) def perceptron_pair(G,X,Y): #感知机对偶算法 m, n = np.shape(X) alpha=np.zeros(m) #初始化alpha,b b=0 isfind=False while not isfind: for i in range(m): s=0 for j in range(m): s+=alpha[j]*Y[j]*G[j,i] s+=b if Y[i]*s<=0: #误分条件 alpha[i]+=1 #更新alpha,b b+=Y[i] print(alpha,b) break elif i == m - 1: #直到没有误分数据 print(alpha,b) #打印alpha,b isfind=True X,Y=loadData() G=Gram(X) # print('G',G) perceptron_pair(G,X,Y)
运行结果如图所示: