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

代码片段和文件信息
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
- 上一篇:商品搜索背后的逻辑架构
- 下一篇:PCA,KPCA LDA算法
相关资源
- 编程实现二维DCT变换
- 图像二值化
- 用FFT对信号进行频谱分析
- Tone-Reservation
- QGA 量子遗传算法
- 差分形式的阻滞增长模型
- 遗传算法的M文件
- 简单二阶互联系统的非线性动力学分
- 手写数字识别-模板匹配法
- Stock_Watson_动态因子分析模型
- 果蝇优化算法优化支持向量回归程序
- 自己做的一个简单GUI扑克纸牌识别-
- multi output SVR
- AR过程的线性建模过程与各种功率谱估
- PCNN TOOLBOX
- plstoolbox.zip
- 中国国家基础地理信息系统GIS数据
- 粒子群微电网优化调度
- 矩阵分析-经典教材-中文版-Roger.A.Ho
- 压缩感知TwIST
- 基于最小错误率的贝叶斯手写数字分
- 最全系统辨识源代码,包括多种最小
- 导弹制导实验
- 画跟踪精确度图的程序.zip
- 重力场大地水准面及重力异常阶次误
- prtools5.2.3工具包
- 脉冲耦合神经网络工具箱PCNN-toolbox
- SVM算法-回归拟合程序.zip
- Kriging代理模型EGO算法.zip
- Matalb实现停车场完整系统
评论
共有 条评论