• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: matlab  

资源简介

利用感知器算法进行鸢尾花数据分类,还包含一个异或算法,可以解决非线性分类问题

资源截图

代码片段和文件信息

clc;
clear all;
close all;
%生成异或数据
Data1=0+0.1*rand(252);
Data1X=Data1(:1);
Data1Y=Data1(:2);

Data2=1+0.1*rand(252);
Data2X=Data2(:1);
Data2Y=Data2(:2);

Data3=0+0.1*rand(252);
Data3X=1+Data3(:1);
Data3Y=Data3(:2);
Data3=[Data3XData3Y];

Data4=0+0.1*rand(252);
Data4X=0+Data4(:1);
Data4Y=1+Data4(:2);
Data4=[Data4XData4Y];

hold on;
scatter(Data1XData1Y‘r‘);
scatter(Data2XData2Y‘r‘);
scatter(Data3XData3Y‘g*‘);
scatter(Data4XData4Y‘g*‘);

Label1=repmat([10]501);
Label2=repmat([01]501);
Data1=[Data1;Data2];
Data1=[Data1Label1];%加上标签
Data3=[Data3;Data4];
Data3=[Data3Label2];%加上标签

%训练数目
num=40;
idx=randperm(num);%随机打乱一个数列
Data1=Data1(idx:);%打乱第一类样本%%%%
Data3=Data3(idx:);%打乱第一类样本%%%%

idx=randperm(num/2);

Data1_Train=Data1(idx:);
Data1_Test=Data1;
Data1_Test(idx:)=[];
Data2_Train=Data3(idx:);
Data2_Test=Data3;
Data2_Test(idx:)=[];
%再次打乱
Data_Train=[Data1_Train;Data2_Train];
Data_Test=[Data1_Test;Data2_Test];
idx=randperm(40);
Train=Data_Train(idx:)‘;
Test=Data_Test(idx:)‘;
Train_Num=size(Train2);
Test_Num=size(Test2);

%BP网络初始化训练
Input_Num=2;
Hidden_Num=4;
Output_Num=2;
V=rand(Input_NumHidden_Num);
Gamma=rand(Hidden_Num1);
W=rand(Hidden_NumOutput_Num);
Theta=rand(Output_Num1);
step=1;
Iteration_Num=500;
%样本参数
Feature_Start=1;
Feature_End=2;
Label_Start=3;
%正确率检测
error_count=0;
Monte_Carlo=100;

%开始训练
for gradient_descent_num=1:Iteration_Num;


for k=1:Train_Num
%前向传播
Alpha=V‘*Train(Feature_Start:Feature_Endk)-Gamma;
b=1./(1+exp(-Alpha));
Beta=W‘*b-Theta;
y=1./(1+exp(-Beta));
g=zeros(Output_Num1);
l=Label_Start;%标签开始的维度在6
for j=1:Output_Num
    
    g(j1)=y(j1)*(1-y(j1))*(Train(lk)-y(j1));%差点搞错了,注意Iris_Train(lk)
    l=l+1;
end
%后向传播
u=W*g;
Delte_Theta=-step*g;
Theta=Theta+Delte_Theta;%更新
Delte_W=-b*Delte_Theta‘;
for h=1:Hidden_Num
    Delte_Gamma(h:)=-step*b(h:)*(1-b(h:))*u(h:);
end
Delte_V=-Train(Feature_Start:Feature_Endk)*Delte_Gamma‘;%需要修改训练集及样本属性所在维数
Gamma=Gamma+Delte_Gamma;%更新
V=V+Delte_V;%更新
W=W+Delte_W;%更新
end
end;


for j=1:Monte_Carlo

for i=1:Test_Num%需要修改待测试训练集
    Alpha=V‘*Test(Feature_Start:Feature_Endi)-Gamma;%需要修改待测试训练集
    b=1./(1+exp(-Alpha));
    Beta=W‘*b-Theta;
    y=1./(1+exp(-Beta));
    %[ValueIndex]=min(y);
    [ValueIndex]=max(y);
    y(Index1)=1;%取那个大的数置为1
    
    if(Test(Index+2i)==y(Index1))%仔细考虑判别条件
        error_count=error_count;
    else
        error_count=error_count+1;
    end
        
end;

end
error_Rate=error_count/(Monte_Carlo*(Test_Num));%需要修改测试样本集合
correct_Rate=1-error_Rate
V
W
Gamma‘
Theta‘

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2829  2018-04-23 21:05  感知器算法\MyXOR.m

     文件       1122  2018-05-18 22:34  感知器算法\testbp.m

     目录          0  2018-09-12 09:00  感知器算法

----------- ---------  ---------- -----  ----

                 3951                    3


评论

共有 条评论