感知机

来源:互联网 发布:java最好的培训 编辑:程序博客网 时间:2024/05/01 14:52

感知机

超平面w⋅x+b=0

当 wx+b>0时 为+1类
当 wx+b<0时 为-1类

距离计算:

1||w||2|wxi+b|:||w||2L2

计算错分类的距离:

wxi  yiabs :1||w||2:1||w||2yi(wxi+b)>0L(w,b)=i=1Nyi(wxi+b)


优化:梯度▽下降法

wb::wL(w,b)=bL(w,b)=i=1N yi xii=1N yii=1,2,3...N

loop:w,bw  b  w(αw)=w+αwb(αb)=b+αb:1. loopor2. <ϵ

代码简单实现

import numpy as np#梯度下降法def gradDesc(x,y,lr=0.001,loop=400,r=0): #lr=learning rate    w=np.zeros(len(x[0])+1)    x=np.column_stack([np.ones([len(x),1]),x])    for i in range(loop):        y_hat=x.dot(w)        misclass=((y*y_hat)<=0)        grad=np.dot(y[misclass],x[misclass])        w+=lr*grad #--α▽  =>  +α·▽     return w,misclassif __name__=='__main__':    x=np.array([[1,1],[1,0],[0,1],[2,3],[2,2],[3,3]])    y=np.array([-1,-1,-1,1,1,1])    w=gradDesc(x,y,lr=0.01)#learning rate 需要根据实际情况调整.    print(w)    #画图    import matplotlib.pyplot as plt    plt.scatter(x[:,0],x[:,1],c=y)    y_plot=(-x[:,0]*w[0][1]-w[0][0])/w[0][2]    plt.plot(x[:,0],y_plot,c='b')    plt.show()