标签:
50年代末 F.Rosenblatt提出感知器算法。线性分类器的设计就是利用训练样本来计算线性函数的权向量
设有两类问题的判别函数
训练样本XA,XB∈ω1, XC,XD∈ω2则
即:
其中:
权向量
各样本特征向量的增1矩阵
该线性联立不等式只对线性可分问题有解,且是多解,因而只有按不同条件取最优解
赏-罚训练算法是一个迭代过程:
1)取权向量W(1)为任一初始值;
2)用训练集X对W进行迭代,在第k步
3)如Xk∈ ω1 且 Wt(k)X(k) ≤ 0
如Xk∈ ω2 且 Wt(k)X(k) ≥ 0。则惩罚:
W(k+1)=W(k)+f(X)
直之无惩罚
#即要设计一个f(X)随着迭代达到最小
确定f(X)的感知器算法的梯度法,是使得f(X)越迭代越小最后收敛为“0”(梯度下降法)
设f(X)是向量
它的方向指向自变量(x1,x2…xn)增大时函数f(X)最大增大率方向,反之,负梯度指向f的最陡下降方向。
F.Rosenblett 提出的准则函数
这样把求线性不等式组转化为一个使函数J极小化,也就是使
其中
公式表示:
原不等式是对第二类样本的特征向量引如符号后得到的,如不引入负号,则算法为:
如
则不需要修正 反之,须予以“惩罚”:
若
则
若
则
例:有4个训练样本如下:
ω1类: (0,0),(0,1)
ω1类: (1,0),(1,1)
试用感知器算法求其判别函数。
解:特征向量的增1矩阵
取
第一次迭代
输入样本1
因
输入样本2
因
输入样本3
输入样本4
由于W(1),W(2),W(3),W(4)未能收敛,继续迭代,这时
再输入4个样本进行计算
仍未收敛,再用4个原始样本进行迭代,这时
迭代结果:
此时X(2),X(3),X(4)分类全部正确,再检查一下X(1)的分类
收敛,结束
以下述两类模式为样本,用matlab实现感知器算法求判别函数:
clc
clear
X = [ 0 0 0 1;
1 0 0 1;
1 0 1 1;
1 1 0 1;
0 0 -1 -1;
0 -1 -1 -1;
0 -1 0 -1;
-1 -1 -1 -1;
];
W = [-1 -2 -2 0];
C = 1;
[n m] = size(X);
%迭代求出W
while (1)
j = 0;%0表示收敛,1表示没有收敛。默认收敛
for i = 1:n
g = X(i,:)*W‘;
%g = g*X(i, 4);
if g <= 0
j = 1;%没有收敛
disp(‘惩罚‘);
W = W + C*X(i,:);
end
end
if j == 0
break;
else
j = 0;
end
end
%%%%%%%%%绘图程序
color = [‘r‘, ‘b‘];
for i = 1:n
scatter3(X(i,1)*X(i,4), X(i,2)*X(i,4) ,X(i,3)*X(i,4), 16, color(floor((X(i,4)+3)/2)));
hold on;
end
t=0:0.1:1;
[x,y]=meshgrid(t);
z = -W(1)/W(3)*x-W(2)/W(3)*y-W(4)/W(3);
mesh(x,y,z)
结果:W = [3 -2 -3 1]
MachineLearning:二、感知器perception算法
标签:
原文地址:http://blog.csdn.net/earl211/article/details/48974865