⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 perceptron.m

📁 人工神经网络(感知器模型和BP算法) 模式识别课程实验
💻 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 + -