感知器
我们从一张图说起,如上图所示,我们想要用一条直线把二维平面中的圆圈和×两个不同类别的符号分离开来。每个圆圈和×的坐标都用 (x1,x2) 来表示,而我们想要画的直线的表达式就是h(x)所示。其中 x1,x2 为已知样本,剩下要求的就是权重值 wi 了。函数sign是这样定义的,sign(x)=1,if x ≥ 0;sign(x) = -1,ifx<0.既然我们要用sign函数来分类,那对应每个样本要有个标签label,这样我们才知道自己求出的直线对不对。圆圈对应label为1,我们简称正样本,×对应label为-1,我们简称负样本。此外,我们定义这个感知器的假设空间为 xn >0.
首先,初始化 wT =0,将各个权重系数归零。
第二步,用初始化的 wT 对各个样本进行求解,看sign( w0+w1∗x1+w2∗x2 )的结果和对应的label完全符合,这个地方显然只有正样本的label是对的。
第三步,对于错误的样本总是有 yn∗x<0 ,为了让我们的直线更好的对数据进行分类,必须对其权重进行更新,更新公式: Wi+1=Wi+η∗yn∗Xn,其中Xn,Wi,Wi+1都是三维的向量,η 为更新步长可以自己设置。
就这样一步步的迭代直到得出一条完美的曲线。 这是对于线性可分的情况,如果已知距离原点最远样本 R2=max||xn||2,和ρ=minyn∗wTf||wf||∗xn,其中wf为理想的直线权重系数 。那么需要迭代的次数小于等于 R2ρ2 。
那对于线性不可分的情况呢?也就是说,如下图这种情况。
这个时候就要相对多的次数去迭代,看直线最终收敛到什么情况。只有一个相对最优,不可能完全划分的。