第2章 感知机
感知机(perception)是一种二类分类的线性分类模型
输入:实例的特征向量
输出:实例的类别(+1,-1)
感知机:输入空间中将实例划分为正负两类的分离超平面,属于判别模型
感知机学习
目的:求出将训练数据进行线性划分的分离超平面
方法:导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型
-
2.1感知机模型
感知机:
f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w·x+b) f(x)=sign(w⋅x+b)
其中:
w为权值(或权值向量weight vector)
b为偏值(bias)
sign为符号函数
s i g n ( x ) = { + 1 x >= 0 − 1 x<0 sign(x)= \begin{cases} +1& \text{x >= 0}\\ -1& \text{x<0} \end{cases} sign(x)={+1−1x >= 0x<0 -
2.2感知机学习策略
数据集线性可分:存在某个超平面S能够将数据集T的正负实例点完全正确地划分到超平面的两侧,即:
对所有 y i = + 1 y_{i}=+1 yi=+1的实例,有 w ⋅ x i + b > 0 w·x_{i}+b>0 w⋅xi+b>0
对所有 y i = − 1 y_{i}= -1 yi=−1的实例,有 w ⋅ x i + b < 0 w·x_{i}+b<0 w⋅xi+b<0
则称数据集T为线性可分数据集。
损失函数的选择:
(1:误分类点总数,该函数不是参数w,b的连续可导函数,不易优化)
2:误分类点到超平面S的总距离
L ( w , b ) = − ∑ x i ϵ M y i ( w ⋅ x i + b ) L(w,b)=-\sum_{x_{i}\epsilon M}y_{i}(w·x_{i}+b) L(w,b)=−xiϵM∑yi(w⋅xi+b)
损失函数是非负的,如果没有误分类点,损失函数值为0。
误分类点越少,误分类点离超平面越近,损失函数值就越小,损失函数是w,b的连续可导函数。 -
2.3感知机学习算法
原始形式、对偶形式
随机梯度下降法:
任意选取一个超平面 w 0 w_{0} w0, b 0 b_{0} b0,利用梯度下降法不断极小化目标函数(极小化的过程是一次随机选取一个误分类点使其梯度下降)
随机选取误分类点 ( x i , y i ) (x_{i},y_{i}) (xi,yi),对w,b进行更新:
w = w + η y i x i w=w+\eta y_{i}x_{i} w=w+ηyixi b = b + η y i b=b+\eta y_{i} b=b+ηyi
其中, η ( 0 < η ≤ 1 ) \eta(0<\eta \leq1) η(0<η≤1)为步长(学习率)
通过迭代可使损失函数 L ( w , b ) L(w,b) L(w,b)不断减小,直至0
1.原始形式
(1)选取初值
w
0
,
b
0
w_{0},b_{0}
w0,b0
(2)在训练集中选取数据
(
x
i
,
y
i
)
(x_{i},y_{i})
(xi,yi)
(3)如果
y
i
(
w
⋅
x
i
+
b
)
≤
0
y_{i}(w·x_{i}+b)\leq 0
yi(w⋅xi+b)≤0
w
=
w
+
η
y
i
x
i
w=w+\eta y_{i}x_{i}
w=w+ηyixi
b
=
b
+
η
y
i
b=b+\eta y_{i}
b=b+ηyi
(4)转至(2),直至训练集中没有误分类点
- matlab实现代码:
function [w,b]=perception(TrainSet,learning_rate)
[M,N]=size(TrainSet);
%(1)设定初值
w=zeros(M-1,1),b=0;
count=0;
iter=0;
%(2)在训练集中选取数据
fprintf('迭代次数\t\t误分类点\t\t\tw\t\t\tb\t\n');
while count~=N
count=0;
for i=1:N
count=count+1;
x=TrainSet(2:M,i);
y=TrainSet(1,i);
if (w'*x+b)*y<=0 %注意是求w的转置矩阵和x的点积
w=w+learning_rate*y*x;
b=b+learning_rate*y;
count=count-1;
iter=iter+1;
fprintf('\t%u\t',iter);%输出迭代次数
fprintf('\t\t%u\t',i);%输出误分类点
fprintf('\t(%2.1g,%2.1g)''\t',w);%输出w
fprintf('%4.1g\n',b);%输出b
break;
end
end
end
测试:
TrainSet=[1,1,-1 %正负点y值
3,4,1
3,3,1];
learning_rate=1;
[w,b]=perception(TrainSet,learning_rate)
感知机学习算法存在许多解,因初值的选择和迭代过程中误分类点选择顺序的不同而不同。
为了得到唯一的超平面,需要对分离超平面增加约束条件 (线性支持向量机)。
当训练集线性不可分时,感知机学习算法不收敛,迭代结果会发生震荡。