因为感知机,我被周某人嘲笑了,在哪里跌倒就要在哪里爬起来并写一篇博客!
感知机
- 输入空间:χ⊆Rn
- 输出空间:y={+1,−1}
- 函数:f(x)=sign(w⋅x+b) sign(x)={+1−1x≥0x<0
-
w⋅x+b=0可看做分离超平面,w为超平面的法向量,b为截距
- 小知识:
- 感知机为二分类的线性分类模型,只能处理完全线性可分的数据
感知机分类策略
- 损失函数——虽然很自然的想到用误分类点个数作为损失函数,但是这样的损失函数不是w,b的连续可导函数(分段)了,不易对损失函数进行优化,所以,一个更好的选择是——
- 将所有误分类点到超平面的总距离作为损失函数
- 任意一点x0到超平面w⋅x+b=0的距离为:∥w∥12∣w⋅x0+b∣ ∥w∥2为L2范数
- 不想要分数形式,可将超平面归一化,即w⋅x+b=0⇒∥w∥w⋅x+∥w∥b=0令w:=∥w∥w,b:=∥w∥b
- 再想着能不能把绝对值去了,减少一下计算机的计算负担,发现对于误分类点来说,−yi(w⋅xi+b)>0恒成立
- 所以损失函数最终变成了L(w,b)=−xi∈M∑yi(w⋅xi+b) M为所有误分类点的集合
感知机学习算法
- 训练集:T={(x1,y1),...,(xN,yN)}
- 对损失函数极小化:w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b)
-
▽wL(w,b)=−xi∈M∑yixi ▽bL(w,b)=−xi∈M∑yi
- 这里采用的是随机梯度下降(stochastic gradient descent):一次随机选择一个误分类点使其梯度下降
- 若选(xi,yi),对w,b更新:
- ▽wL(w,b)=−yixi,▽bL(w,b)=−yi
-
w:=w−η▽wL(w,b)=w+ηyixib:=b−η▽bL(w,b)=b+ηyi η为移动步长
原始算法
- 输入:数据集T,学习率η(0<η≤1)
- 输出:w,b
- 模型:f(x)=sign(w⋅x+b)
- 步骤:
- (1)选取初值w0,b0
- (2)选取数据(xi,yi)
- (3)若该点为误分类点,即yi(wxi+b)≤0 w:=w+ηyixi b:=b+ηyi
- (4)转至(2),直到训练集没有误分类点(或许这就是要求数据完全线性可分的原因?)
对偶算法
- 设(xi,yi)会误分ni次,则关于(xi,yi)点,w,b变化为ηniyixi,ηniyi,记αi=ηni
- 最后学习到的w,b为w:=w0+i=1∑Nαiyixi b:=b0+i=1∑Nαiyi
- 对偶算法,转化为求α=(α1,α2,...,αN)T(其实是ni),b
- 模型:f(x)=sign(j=1∑Nαjyjxj⋅x+b)
- 步骤:
- (1)初始化:α=0,b=0
- (2)在训练集中选取(xi,yi)
- (3)若yi(j=1∑Nαjyjxj⋅xi+b)≤0:αi:=αi+η b:=b+ηyi
- (4)转至(2),直到训练集没有误分类点
- 这里有xi⋅xi,表示内积,可以先生成Gram矩阵:G=[xi⋅xj]N×N