作业三(编程题)感知机算法的实现
[1] 请用matlab实现算法2.1(第29页);
[2] 用例2.1的数据测试编写的算法;
[3] 更改算法中的学习率,观察算法的收敛速度和最终的模型;
[4] 更改训练集为,观察w和b的值是否发生变化。
%感知机学习算法的原始形式实现
eta = 1; %学习率
M = 2; %样本维度,必要时便于修改
N = 3; %样本个数
% x = round(rand([M N])*10); %生成 M x N的随机矩阵,每个元素取值区间为[0,10]
% y = round(rand([1 N])*2)-1; %N个取值为+1或-1的标签,与x一一对应
x1=[3 4 1; %三组训练样本(3,3)、(4,3)、(1,1)
3 3 1];
x2=[3 1 4;
3 1 3];
y1=[1 1 -1]; %样本对应标签1、1、-1
y2=[1 -1 1];
w = zeros(1,M); %初始w0
b = 0; %初始b0
for j = 1:2
if(j==1) %训练样本x1
x=x1;
y=y1;
else %训练样本x2
x=x2;
y=y2;
end
while(~isempty(find(y.*(w*x+b*ones(1,N))<=0))) %当存在误分类点时,一直迭代
for i = 1:N
if (y(i)*(w*x(:,i)+b)<=0) %误分类点
w = w + eta*y(i)*x(:,i)'; %更新w
b = b + eta*y(i); %更新b
end
end
end
w %输出 w b
b
end