资源简介
本代码(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 2013b Crack for 32bits 64bits
- 鲸鱼群算法MATLAB程序源代码
- 基于BP神经网络的人脸识别源码matla
-
基于MATLABSimuli
nk 的双电机伺服控制 - zw_matlab官方文档.zip
- zw_MATLAB中文文档.zip
- MATLAB数值模拟课件
-
直流调速系统的Matlab/Simuli
nk仿真 - matlab去噪声
- shearlet变换
- LMI先行矩阵不等式的程序
- MATLAB智能算法129611
- DIRECT 全局优化算法 matlab程序 附带
- MATLAB实现基于Daugman的虹膜提取算法源
- matconvnet-1.0-beta25
- 基于MATLAB的无线信道仿真及研究
- MATLAB图像处理
- Matlab coding for PAM4 basic transmission
- ITTI视觉显著性MATLAB代码
- 模式识别4个实验(matlab)
- BP神经网络用于蚊子分类
- 直流电机模糊控制系统的MATLAB/Simu
- 电磁场数值计算与MATLAB仿真1.pdf
- matlab水果识别.rar
- matlab车牌识别程序神经网络
- 基于MATLAB的信号与系统实验指导课后
- 车牌识别与人脸定位matlab
- 基于Matlab的载波同步建模与仿真科斯
- Matlab最佳经济性换挡规律代码
- SVM分类器.zip
评论
共有 条评论