机器学习基石笔记-感知机

机器学习基石笔记-感知机


损失函数

给定一个数据集 T={(x1,y1),(x2,y2),,(xN,yN)}x=Rn,y={+1,1}

若存在超平面S wx+b=0 能将所有的正负实例点分到两侧,则称数据集是线性可分的,否则称线性不可分。
任意一点 x0 到超平面的距离为

1||w|||wx0+b|

对于误分类数据 (xi,yi) 来说,
yi(wxi+b)>0

有误分类点到超平面距离

1||w||yi|wx0+b|

则所有误分类点到超平面距离为

1||w||ximyi|wx0+b|

所以感知机 sign(wx+b) 学习损失函数为
L(w,b)=ximyi|wx0+b|

学习算法

  1. 选取初值 w0,b0
  2. 在训练集中选取数据 (xi,yi)
  3. 如果 yi(wxi+b)0 (分类错误)
    ww+xiyi
  4. 转至2,直至没有误分类点。

收敛性

R=max||xi|| ,令 ρ=minWf||wf||xiyi 则有修正次数

kR2ρ2

下面给出证明。
wkwf=wk1wf+xiyiwk1+ρkρ
||wk||2=||wk1+xiyi||2=||wk1||2+2wk1xiyi+||xiyi||2||wk1||2+||xiyi||2||wk1||2+R2
||wk||2||wk1||2+R2kR2

kρwkwf||wk||||wf||||wk||kR

kρkR ,易得 kR2ρ2 ,得证。

其他性质

  1. 一般用加上速度后的修正式: ww+ηxiyi 来修正直线。
  2. 读入数据的次序是影响修正次数的。

示范代码

import numpy as np

def sign(x):
    if x < 0:
        return -1
    else:
        return 1

w = np.array([0.,0.,0.,0.,0.])
halts = 0
speed = 1
f = open('pla.dat')

while True:
    data = f.readline()
    if data == '':
        break
    datas = data.split('\t')
    xi = np.array([float(i) for i in ('1 ' + datas[0]).split()])
    yi = float((datas[1].split())[0])
    if not abs(yi) == 1 :
        exit(1)
    if not sign(np.inner(w,xi)) == yi:
        w = w + speed * yi * xi
        print("W: " + str(w))
        halts += 1

print('Halts :' + str(halts))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值