资源简介
本代码(MATLAB)可直接运行,对Iris鸢尾花数据分类,准确率96%左右,随机2/3数据训练,1/3数据测试。对于新手有帮助,多为矩阵运算。

代码片段和文件信息
clear
clc
f=fopen(‘iris.data‘);
Iris=textscan(f‘%f%f%f%f%s‘‘delimiter‘‘‘);
fclose(f);
[~n]=size(Iris);
for i=1:n-1
data(:i)=Iris{1i};
end
[mn]=size(data);
for i=1:m
if strcmp(Iris{15}{i1}‘Iris-setosa‘)
data(i5:7)=[1 0 0];
elseif strcmp(Iris{15}{i1} ‘Iris-versicolor‘)
data(i5:7)=[0 1 0];
else
data(i5:7)=[0 0 1];
end
end
%数据归一化处理[01]区间内
x_max=max(data);
x_min=min(data);
data=(data-ones(m1)*x_min)./(ones(m1)*(x_max-x_min));
% 这里可用函数data=mapminmax(data01)替换
%但data需要转置因为mapminmax只能对行进行归一化
%%
%划分训练样本和测试样本 大约2/3用作训练,1/3用作测试
num=round(m/3/3);
for i=1:3
temp=data(1+50*(i-1):50*i:);
sel=randperm(50num);
test(1+num*(i-1):num*i:)=temp(sel1:4);
test_label(1+num*(i-1):num*i:)=temp(sel5:7);
temp(sel:)=[];
train(1+(50-num)*(i-1):(50-num)*i:)=temp(:1:4);
train_label(1+(50-num)*(i-1):(50-num)*i:)=temp(:5:7);
end
%%
[mn]=size(train);
alpha=4;%输入神经元数目
beta=8;%隐层神经元数目
lamda=3;%输出神经元数目
rng(‘shuffle‘)
W1=rand(alphabeta);%输入层和隐层之间的权值矩阵
W2=rand(betalamda);%隐层和输出层间的权值矩阵
B1=rand(1beta);%隐层阈值矩阵
B2=rand(1lamda);%输出层阈值矩阵
B22=B2;
W11=W1;
Eta=1;%学习率
iter_max=10000;%最大迭代次数
iter=1;
%BP神经网络,每次仅针对一个训练样例更新连接权和阈值
while iter<=iter_max
for i=1:m
hidden_in=train(i:)*W1;%隐层输入
hidden_out=sigmod(hidden_in-B1);%隐层输出
output_in=hidden_out*W2;%输出层输入
output_out=sigmod(output_in-B2);%输出层输出
%计算误差
E(i)=sum((output_out-train_label(i:)).^2);%求平方和可用sumsqr函数
%%
%更新参数BP神经网络中最核心的部分
g=output_out.*(1-output_out).*(train_label(i:)-output_out);%计算输出层神经元的梯度项
e=hidden_out.*(1-hidden_out).*(g*W2‘);%计算隐层神经元的梯度项
Deta_W2=Eta*hidden_out‘*g;
Deta_B2=-Eta*g;
Deta_W1=Eta*train(i:)‘*e;
Deta_B1=-Eta*e;
W1=W1+Deta_W1;
W2=W2+Deta_W2;
B1=B1+Deta_B1;
B2=B2+Deta_B2;
end
%计算训练集的累积误差
E=mean(E);
if E<1e-4 %目标误差
iter
break
end
if mod(iter1000)==0
iter
end
iter=iter+1;%更新迭代次数
end
%%
%测试
[resultaccuracy]=BP_test(testtest_labelW1W2B1B2);
disp(‘结果为:‘)
result‘
disp(strcat(‘准确率为‘num2str(accuracy*100)‘%‘))
function [resultaccuracy]=BP_test(testtest_labelW1W2B1B2)
%返回分类的结果
%accuracy准确率
Hidden_in=test*W1;%隐层输入
Hidden_out=sigmod(Hidden_in-B1);%隐层输出
Output_in=Hidden_out*W2;%输入层输入
Output_out=sigmod(Output_in-B2);
[~result]=max(Output_out[]2);
[~index2]=max(test_label[]2);
right=sum(result==index2);%统计分类正确的个数
total=size(test1);%总个数
accuracy=right/total;
end
%sigmod函数在matlab里是logsig函数
function [Y]=sigmod(X)
Y=1./(1+exp(-1).^X);
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2909 2019-08-12 23:37 neural_networks\BP_networks.m
文件 4551 2019-08-04 13:24 neural_networks\iris.data
文件 1133510 2019-08-12 22:55 neural_networks\周志华-机器学习-101.jpg
文件 632486 2019-08-12 22:56 neural_networks\周志华-机器学习-102.jpg
文件 467382 2019-08-12 22:56 neural_networks\周志华-机器学习-103.jpg
文件 839981 2019-08-12 22:56 neural_networks\周志华-机器学习-104.jpg
目录 0 2019-08-12 23:40 neural_networks\
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论