# ---感知机--- # 对偶问题 from numpy import * x=array([[3,3],[4,3],[1,1]]) y=array([1,1,-1]) w=zeros((1,len(x[0]))) b=0 a=array([0 for i in range(len(x))]) def sign(b,a,x,y,i): gram = array(mat(x) * mat(x).T) loss_func = 0 for j in range(len(gram[0])): loss_func += gram[i][j] * a[j] * y[j] loss_func+=b return loss_func def train(x,y,w,b,a,alpha=1): flag=True while flag: count = 0 for i in range(len(x)): loss_func=sign(b,a,x,y,i) if y[i]*loss_func <= 0: a[i]+=alpha b+=alpha*y[i] count+=1 print(a) print(b) if count==0: flag=False for i in range(len(x)): w+=a[i]*y[i]*x[i] return w,b,a w,b,a=train(x,y,w,b,a) print(w) print(b)
print(a)
# print(gram)