感知机是一种二类分类的线性模型,输入实例的特征向量,输出为实例的类别,即+1或者-1。感知机模型是神经网络和支持向量机的基础。
假设特征为
,类标签为
,由特征到类标签的映射可以表示为
这样的函数称为感知机。其中
和
为感知机的参数,
为权重,
为偏置。
为向量
与向量
之间的内积。
为符号函数:
为分隔超平面。
为了能够正确的对实例分类,我们的目标是能够求出分隔超平面,即求出参数
和
。在这里,分隔超平面存在的前提是数据集是线性可分的。
在训练参数
和
时,我们可以采用损失函数,并且使得损失函数最小化。感知机的训练中损失函数可以采用误分类点到分隔超平面的距离的总和。一个点被正确分类是指当
时,而原始标签
;类似的,当
时,而原始标签
。一个点到平面之间的距离公式为
对于误分类点
,有
,因此误分类点到分隔超平面之间的距离为
可以不考虑
,则对于误分类点集合
,感知机的损失函数为
我们的目标使得损失函数最小化,即
。我们可以使用梯度下降法求解这样的最小化问题。(梯度下降法),在这里我们采用梯度下降法的改进算法:随机梯度下降法。
和
,
,
。
选自《统计学习方法》,训练集为:正实例点是
,
,负实例点是
。
原始点集
MATLAB代码
%读入数据
x=[3,3;4,3;1,1];
y=[1;1;-1];
%--初始化w和b
w = [0,0];
b = 0;
a = 1;%步长
%--选择未能初始化的点
flag = 0;
i = 1;
while flag~=1
while i <= 3
t = y(i)*(w*x(i,:)'+b);
if t <= 0
w = w + a*y(i,:)*x(i,:);
b = b + a*y(i,:);
i = 1;%重置i
break;
else
i = i+1;
end
if i == 4
flag = 1;
end
end
end
%画出分隔线
hold on
axis([0 5 0 5]);%axis一般用来设置axes的样式,包括坐标轴范围,可读比例等
for j = 1:3
plot(x(j,1),x(j,2),'.');
m(1,j) = (-b-w(1)*j)./(w(2));
end
j = 1:3;
plot(j,m);
分类结果