目标:学习一个决策超平面来对正负样本集合进行分类(注:数据需要满足线性可分)
解释:我们学习的平面函数为,如果,意味着此样本点在该函数的上面一侧,我们把它称为正类,同理为负类。
原理:通过最小化误分类点到决策平面距离来学习,其中是2维向量。
问题1:为什么采用误分类点到平面的距离作为优化目标?误分类点的个数不行吗?
答:误分类点的个数并不是一个连续变化的数值量,比如通过我们对决策平面的变化,误分类点的个数可能并没有发生变化,这便不能给出我们一些反馈信息来进行下一步的优化。即:不是连续函数,不可导。
问题2:何为误分类点?
答:对于正类样本来说,如果,由正类的标签,则
,同类负类样本也满足,因为。因此误分类样本满足。
问题3:误分类点到决策面的距离如何描述?
答:由点到平面的距离公式我们有,由于不改变的大小,只改变符号,因此,去绝对值符号有,该值便为误分类点到决策面的距离。
综上:所有误分类点的距离表示为
损失函数表示为
由于||w||对于所有样本点来说是公共常数,因此省略。
优化策略:随机初始化w,b,对于所有的样本计算点到平面的距离,如果满足误分类条件,则加入误分类集合,并根据该样本,计算相关损失函数的梯度,然后优化,重复上述过程,直到满足误分类样本点为0.
data=[(x1,y1),(x2,y2),...,(xn,y_n)]
w=(0,0),b=0
is_wrong=False#用来控制迭代过程
while(!is_wrong):
error=0#误分类样本的个数
for i in data:
if(w*data[i][0]*data[i][1]<0):#此处为矩阵乘法
w=w+learn_rate*data[i][0]
b=b+learn_rate*data[i][1]
error+=1
if error==0:
is_wrong=True