📄 perceptron.m
字号:
% M-file function, Perceptron.m
% 感知器
% g1 第1组实际序号
% g2 第2组实际序号
% s1 第1组样本数
% s2 第2组样本数
% w1Init w1初始值
% w2Init w2初始值
% w3Init w3初始值
% w4Init w4初始值
% theta 阈值
% eta 学习速率
% iteraMax epoch的最大值
% correct 训练集的正确率
% correctAll 全部样本集的正确率
function [correct,correctAll] = Perceptron(g1,g2,s1,s2,w1Init,w2Init,w3Init,w4Init,theta,eta,iteraMax)
load iris.dat;
r1 = Random(s1);
r2 = Random(s2);
for k = 1:s1
X1(k) = iris(r1(k)+50*(g1-1),1);
X2(k) = iris(r1(k)+50*(g1-1),2);
X3(k) = iris(r1(k)+50*(g1-1),3);
X4(k) = iris(r1(k)+50*(g1-1),4);
d(k) = 1;
end
for k = 1:s2
X1(k + s1) = iris(r2(k)+50*(g2-1),1);
X2(k + s1) = iris(r2(k)+50*(g2-1),2);
X3(k + s1) = iris(r2(k)+50*(g2-1),3);
X4(k + s1) = iris(r2(k)+50*(g2-1),4);
d(k + s1) = -1;
end
w1(1) = w1Init;
w2(1) = w2Init;
w3(1) = w3Init;
w4(1) = w4Init;
for itera = 1:(s1+s2)*iteraMax
sum = w1(itera) * X1(mod(itera-1,s1+s2)+1) + w2(itera) * X2(mod(itera-1,s1+s2)+1) + w3(itera) * X3(mod(itera-1,s1+s2)+1) + w4(itera) * X4(mod(itera-1,s1+s2)+1);
if (sum >= theta)
Y = 1;
else
Y = -1;
end
w1(itera+1) = w1(itera) + eta * (d(mod(itera-1,s1+s2)+1) - Y) * X1(mod(itera-1,s1+s2)+1);
w2(itera+1) = w2(itera) + eta * (d(mod(itera-1,s1+s2)+1) - Y) * X2(mod(itera-1,s1+s2)+1);
w3(itera+1) = w3(itera) + eta * (d(mod(itera-1,s1+s2)+1) - Y) * X3(mod(itera-1,s1+s2)+1);
w4(itera+1) = w4(itera) + eta * (d(mod(itera-1,s1+s2)+1) - Y) * X4(mod(itera-1,s1+s2)+1);
end
w1Final = w1((s1+s2)*iteraMax+1);
w2Final = w2((s1+s2)*iteraMax+1);
w3Final = w3((s1+s2)*iteraMax+1);
w4Final = w4((s1+s2)*iteraMax+1);
correct = [0 0 0 0 0 0 0 0 0];
correctAll = [0 0 0 0 0 0 0 0 0];
for itera = 1:s1
d1(itera) = 1;
sum1(itera) = w1Final * X1(itera) + w2Final * X2(itera) + w3Final * X3(itera) + w4Final * X4(itera);
if (sum1(itera) >= theta)
Y1(itera) = 1;
else
Y1(itera) = -1;
end
if (d1(itera) == Y1(itera))
correct(1) = correct(1) + 1;
end
end
for itera = 1:s2
d2(itera) = -1;
sum2(itera) = w1Final * X1(itera+s1) + w2Final * X2(itera+s1) + w3Final * X3(itera+s1) + w4Final * X4(itera+s1);
if (sum2(itera) >= theta)
Y2(itera) = 1;
else
Y2(itera) = -1;
end
if (d2(itera) == Y2(itera))
correct(4) = correct(4) + 1;
end
end
correct(2) = s1;
correct(3) = correct(1) / correct(2);
correct(5) = s2;
correct(6) = correct(4) / correct(5);
correct(7) = correct(1) + correct(4);
correct(8) = correct(2) + correct(5);
correct(9) = correct(7) / correct(8);
for itera = 1:50
d1(itera) = 1;
sum1(itera) = w1Final * iris(itera+50*(g1-1),1) + w2Final * iris(itera+50*(g1-1),2) + w3Final * iris(itera+50*(g1-1),3) + w4Final * iris(itera+50*(g1-1),4);
if (sum1(itera) >= theta)
Y1(itera) = 1;
else
Y1(itera) = -1;
end
if (d1(itera) == Y1(itera))
correctAll(1) = correctAll(1) + 1;
end
d2(itera) = -1;
sum2(itera) = w1Final * iris(itera+50*(g2-1),1) + w2Final * iris(itera+50*(g2-1),2) + w3Final * iris(itera+50*(g2-1),3) + w4Final * iris(itera+50*(g2-1),4);
if (sum2(itera) >= theta)
Y2(itera) = 1;
else
Y2(itera) = -1;
end
if (d2(itera) == Y2(itera))
correctAll(4) = correctAll(4) + 1;
end
end
correctAll(2) = 50;
correctAll(3) = correctAll(1) / correctAll(2);
correctAll(5) = 50;
correctAll(6) = correctAll(4) / correctAll(5);
correctAll(7) = correctAll(1) + correctAll(4);
correctAll(8) = correctAll(2) + correctAll(5);
correctAll(9) = correctAll(7) / correctAll(8);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -