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

来源:互联网 发布:淘宝网秋冬运动套装 编辑:程序博客网 时间:2024/05/29 06:58

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


损失函数

给定一个数据集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 npdef sign(x):    if x < 0:        return -1    else:        return 1w = np.array([0.,0.,0.,0.,0.])halts = 0speed = 1f = 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 += 1print('Halts :' + str(halts))
0 0
原创粉丝点击