对如下两类的二维模式样本集,编写matlab程序,用感知器算法求分界面方程,并作图显示。 W1:X1=(1,0)T , X2=(1,1)T , X3=(0,2)T W2:X1=(2,1)T , X2=(2,2)T , X3=(1,3)T 分别改变初始权向量和样本集中样本顺序来获得不同的结果
时间: 2024-02-21 11:59:41 浏览: 120
好的,以下是matlab代码实现:
```matlab
% 定义样本集和标签
X = [1 0; 1 1; 0 2; 2 1; 2 2; 1 3];
y = [-1; -1; -1; 1; 1; 1];
% 初始化权重向量和偏置
w = [0; 0];
b = 0;
% 学习率
eta = 1;
% 训练感知器
for epoch = 1:10
for i = 1:size(X, 1)
if y(i) * (w' * X(i, :)' + b) <= 0
w = w + eta * y(i) * X(i, :)';
b = b + eta * y(i);
end
end
end
% 绘制分界线
x1 = -1:0.1:3;
x2 = -(w(1) * x1 + b) / w(2);
plot(x1, x2);
% 绘制样本点
hold on;
scatter(X(1:3, 1), X(1:3, 2), 'r', 'filled');
scatter(X(4:6, 1), X(4:6, 2), 'b', 'filled');
```
我们可以通过改变初始权重向量和样本顺序来获得不同的结果。比如,我们可以将初始权重向量改为[1; 1],代码如下:
```matlab
% 定义样本集和标签
X = [1 0; 1 1; 0 2; 2 1; 2 2; 1 3];
y = [-1; -1; -1; 1; 1; 1];
% 初始化权重向量和偏置
w = [1; 1];
b = 0;
% 学习率
eta = 1;
% 训练感知器
for epoch = 1:10
for i = 1:size(X, 1)
if y(i) * (w' * X(i, :)' + b) <= 0
w = w + eta * y(i) * X(i, :)';
b = b + eta * y(i);
end
end
end
% 绘制分界线
x1 = -1:0.1:3;
x2 = -(w(1) * x1 + b) / w(2);
plot(x1, x2);
% 绘制样本点
hold on;
scatter(X(1:3, 1), X(1:3, 2), 'r', 'filled');
scatter(X(4:6, 1), X(4:6, 2), 'b', 'filled');
```
另外,我们可以通过改变样本顺序获得不同的结果。比如,我们可以将前三个样本和后三个样本的顺序交换,代码如下:
```matlab
% 定义样本集和标签
X = [2 1; 2 2; 1 3; 1 0; 1 1; 0 2];
y = [1; 1; 1; -1; -1; -1];
% 初始化权重向量和偏置
w = [0; 0];
b = 0;
% 学习率
eta = 1;
% 训练感知器
for epoch = 1:10
for i = 1:size(X, 1)
if y(i) * (w' * X(i, :)' + b) <= 0
w = w + eta * y(i) * X(i, :)';
b = b + eta * y(i);
end
end
end
% 绘制分界线
x1 = -1:0.1:3;
x2 = -(w(1) * x1 + b) / w(2);
plot(x1, x2);
% 绘制样本点
hold on;
scatter(X(1:3, 1), X(1:3, 2), 'r', 'filled');
scatter(X(4:6, 1), X(4:6, 2), 'b', 'filled');
```
注意,这里的标签也需要相应地改变。
阅读全文