资源简介
利用感知器算法进行鸢尾花数据分类,还包含一个异或算法,可以解决非线性分类问题
代码片段和文件信息
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算法
相关资源
- PCA,KPCA LDA算法
- 低比特率图像压缩
- 灰色模型和BP神经网络模型在城市时用
- 遗传算法-偏最小二乘回归
- 基本粒子群算法
- 电动汽车有序充放电
- 鱼群算法寻优
- 枝切法实现相位解缠INSAR相位解缠
- 输电线路规划
- 灰色预测模型-介绍与运用
- 最后一公里EC配送程序源代码
- 此函数用FISTA算法解决压缩感知
- SCMA仿真程序中文注释
- 基于DWT的数字水印
- PCA代码汇总
- 编程实现NLMS_LMS对比.docx
- mimo 优化功率分配
- 基于s函数的电机建模与仿真
- 静脉识别程序
- Horn-Schunck 法实现的光流法
- 改进的细菌觅食优化算法用于双阈值
- UCSD_GARCH 工具箱
- 基于多项滤波的内插器
- 医学图像课程大作业-滤波反投影
- SSDA模板匹配算法
- 基于Log算子的边缘检测
- v2v信道仿真与特性研究
- VMD实现函数
- 用中值滤波和均值滤波去除高斯白噪
- 蚁群算法进行三维路径规划
评论
共有 条评论