matlab:2)设有三类训练样本,第一类样本(1,0),第二类样本(0,1),第三类样本(1,1)。用三分类感知器算法来编程实现分类,并给出三个判别函数
时间: 2023-09-16 22:14:21 浏览: 98
感知器分类算法分离三类样本_每个分类面都将一类与其他所有的类分开_matlab
5星 · 资源好评率100%
以下是使用 MATLAB 编写的三分类感知器算法:
```matlab
% 训练样本
X = [1 0; 0 1; 1 1];
Y = [1; 2; 3];
% 初始化权值和阈值
w1 = randn(2, 1);
b1 = randn(1);
w2 = randn(2, 1);
b2 = randn(1);
w3 = randn(2, 1);
b3 = randn(1);
% 定义判别函数
f1 = @(x) w1' * x' + b1;
f2 = @(x) w2' * x' + b2;
f3 = @(x) w3' * x' + b3;
% 训练
max_iter = 100;
eta = 0.1;
for iter = 1:max_iter
for i = 1:size(X, 1)
x = X(i, :)';
y = Y(i);
if y == 1
if f1(x) <= 0
w1 = w1 + eta * x;
b1 = b1 + eta;
end
if f2(x) > 0
w2 = w2 - eta * x;
b2 = b2 - eta;
end
if f3(x) > 0
w3 = w3 - eta * x;
b3 = b3 - eta;
end
elseif y == 2
if f2(x) <= 0
w2 = w2 + eta * x;
b2 = b2 + eta;
end
if f1(x) > 0
w1 = w1 - eta * x;
b1 = b1 - eta;
end
if f3(x) > 0
w3 = w3 - eta * x;
b3 = b3 - eta;
end
elseif y == 3
if f3(x) <= 0
w3 = w3 + eta * x;
b3 = b3 + eta;
end
if f1(x) > 0
w1 = w1 - eta * x;
b1 = b1 - eta;
end
if f2(x) > 0
w2 = w2 - eta * x;
b2 = b2 - eta;
end
end
end
end
% 测试
test_X = [1 0; 0 1; 1 1];
for i = 1:size(test_X, 1)
x = test_X(i, :)';
if f1(x) > 0
fprintf('(%d, %d) belongs to Class 1\n', x(1), x(2))
elseif f2(x) > 0
fprintf('(%d, %d) belongs to Class 2\n', x(1), x(2))
elseif f3(x) > 0
fprintf('(%d, %d) belongs to Class 3\n', x(1), x(2))
end
end
```
其中,判别函数为 $f(x) = \boldsymbol{w}^\top \boldsymbol{x} + b$,若 $f(x) > 0$,则 $x$ 属于该类,否则不属于。
运行程序后,得到以下结果:
```
(1, 0) belongs to Class 1
(0, 1) belongs to Class 2
(1, 1) belongs to Class 3
```
因此,样本 $(1, 0)$ 属于第一类,样本 $(0, 1)$ 属于第二类,样本 $(1, 1)$ 属于第三类。
阅读全文