感知机

感知机

超平面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,misclass

if __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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值