机器学习及其MATLAB实现——BP神经网络

这篇具有很好参考价值的文章主要介绍了机器学习及其MATLAB实现——BP神经网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文章为学习MATLAB机器学习时所整理的内容,本篇文章是该系列第一篇,介绍了BP神经网络的基本原理及其MATLAB实现所需的代码,并且增加了一些个人理解的内容。

目录

人工神经网络概述

什么是人工神经网络?

人工神经元模型

 神经网络可以分为哪些?

BP神经网络概述

BP神经网络两大步骤

BP神经网络图示

MATLAB实现所需掌握的知识 

数据归一化

常用重点函数

BP神经网络MATLAB仿真过程

1. 清空环境变量

2. 训练集/测试集的产生

2.1 导入数据

 2.2 随机产生训练集和测试集

3 数据归一化处理

4. BP神经网络创建、训练及仿真测试

4.1 创建网络

 4.2 设置训练参数

 4.3 训练网络

 4.4 仿真测试

4.5 数据反归一化

6. 绘图

 代码汇总如下


人工神经网络概述

什么是人工神经网络?

In machine learning and cognitive science, artificial neural networks ( ANNs ) are a family of
statistical learning models inspired by biological neural networks (the central nervous
systems of animals, in particular the brain) and are used to estimate or approximate functions that can depend on a large number of inputs and are generally unknown.

人工神经元模型

机器学习及其MATLAB实现——BP神经网络

机器学习及其MATLAB实现——BP神经网络

 神经网络可以分为哪些?

  • — 按照连接方式,可以分为:前向神经网络vs. 反馈(递归)神经网络
  • — 按照学习方式,可以分为:有导师学习神经网络vs. 无导师学习神经网络
  • — 按照实现功能,可以分为:拟合(回归)神经网络vs. 分类神经网络

BP神经网络概述

  • Backpropagation is a common method of teaching artificial neural networks how to perform a given task.
  • It is a supervised learning method, and is a generalization of the delta rule. It requires a teacher that knows, or can calculate, the desired output for any input in the training set.
  • Backpropagation requires that the activation function used by the artificial neurons (or "nodes") be differentiable.

BP神经网络两大步骤

        Phase 1: Propagation
              1. Forward propagation of a training pattern’s input through the neural network in                            order to generate the propagation’s output activations.
                     
              2. Back propagation of the propagation’s output activations through the neural                              network using the training pattern’s target in order to generate the deltas of all                          output and hidden neurons.
       Phase 2: Weight Update
              1. Multiply its output delta and input activation to get the gradient of the weight.、
               2. Bring the weight in the opposite direction of the gradient by subtracting a ration of                       it from the weight.

BP神经网络图示

机器学习及其MATLAB实现——BP神经网络

机器学习及其MATLAB实现——BP神经网络

机器学习及其MATLAB实现——BP神经网络

机器学习及其MATLAB实现——BP神经网络

MATLAB实现所需掌握的知识 

数据归一化

        什么是归一化?

        将数据映射到[0, 1]或[-1, 1]区间或其他的区间

        为什么要归一化?      

  1.  输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。
  2.  数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会小。
  3.  由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。例如神经网络的输出层若采用S形激活 函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。
  4.  S形激活函数在(0,1)区间以外区域很平缓,区分度太小。例如S形函数f(X)在参数a=1时,f(100)与f(5)只相差0.0067。

        归一化算法

        1.  y = (x-min)/(max-min)

        2.  y =  2*(x-min)/(max-min)-1 

常用重点函数

•     mapminmax

        –      Process matrices by mapping row minimum and maximum values to [-1 1]

        –      [Y, PS] = mapminmax(X, YMIN, YMAX)

        –      Y = mapminmax('apply', X, PS)

        –      X = mapminmax('reverse', Y, PS)

•     newff

        –      Create feed-forward backpropagation network

        –      net = newff(P, T, [S1 S2...S(N-l)], {TF1 TF2...TFNl}, BTF, BLF, PF, IPF, OPF, DDF)

•     train

        –      Train neural network

        –      [net, tr, Y, E, Pf, Af] = train(net, P, T, Pi, Ai)

•     sim

        –      Simulate neural network

        –      [Y, Pf, Af, E, perf] = sim(net, P, Pi, Ai, T)      

BP神经网络MATLAB仿真过程

1. 清空环境变量

clear all
clc

2. 训练集/测试集的产生

2.1 导入数据

load spectra_data.mat

执行该程序,可以得到两个工作区变量

机器学习及其MATLAB实现——BP神经网络

NIR是近红外光谱图原始数据,60代表着60个样品,使用plot(NIR')可以得到近红外光谱图

octane是结果,也就是目标值

机器学习及其MATLAB实现——BP神经网络

 2.2 随机产生训练集和测试集

 训练集和测试集可以自行选择,也可以从原始数据中随机生成。本次实验中选择的是随机生成。

temp = randperm(size(NIR,1));
% 训练集--50个样本
P_train = NIR(temp(1:50),:)';        % '表示转置,使得 列 为样本的个数
T_train = octane(temp(1:50),:)';     % '特征与目标一定要保证列即样本个数相等
% 测试集--10个样本
P_test = NIR(temp(50:end),:)';       % '表示转置,使得 列 为样本的个数
T_test = octane(temp(50:end),:)';    % '特征与目标一定要保证列即样本个数相等
N = size(P_test,2);                  % 取出测试集样本的个数

3 数据归一化处理

对原始数据进行归一化处理,使其数据范围在0-1之间

[p_train, ps_input] = mapminmax(P_train,0,1); %调用归一化函数
p_test = mapminmax('apply',P_test,ps_input);

[t_train, ps_output] = mapminmax(T_train,0,1);

4. BP神经网络创建、训练及仿真测试

4.1 创建网络

使用newff函数便可以创建BP神经网络,其中参数9代表着神经元的个数

net = newff(p_train,t_train,9)  % 9代表神经元的个数  
%view(net);                    % 使用view(net)可以看到BP神经网络的结构图

使用view(net)可以看到所创建的BP神经网络结构图

机器学习及其MATLAB实现——BP神经网络

 4.2 设置训练参数

net.trainParam.epochs = 1000    % 设置迭代次数
net.trainParam.goal = 1e-3;     % 设置训练目标,即误差精度
net.trainParam.lr = 0.01;       % 设置学习速率

 4.3 训练网络

通过调用train函数便可以对神经网络进行训练

net = train(net,p_train,t_train);

运行代码,便可以看到训练指标和效果等等

机器学习及其MATLAB实现——BP神经网络

机器学习及其MATLAB实现——BP神经网络

机器学习及其MATLAB实现——BP神经网络

机器学习及其MATLAB实现——BP神经网络

 4.4 仿真测试

将测试集输入sim预测函数,得到预测结果

t_sim = sim(net,p_test);

4.5 数据反归一化

此时的t_sim是归一化后的结果,为了与原数据进行对比,对t_sim进行反归一化。

T_sim = mapminmax('reverse',t_sim,ps_output); % T_sim为预测值 

5. 性能评价

预测结果效果如何,需要与真实结果对比,进行评估

5.1 相对误差error

error = abs(T_sim-T_test)./T_test;

5.2 决定系数R^2

R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2)); 

5.3 结果对比

result = [T_test' T_sim' error'];

机器学习及其MATLAB实现——BP神经网络

可以看到预测值与真实值基本一致,误差很小。

6. 绘图

figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比';['R^2=' num2str(R2)]};
title(string)

机器学习及其MATLAB实现——BP神经网络文章来源地址https://www.toymoban.com/news/detail-466502.html

 代码汇总如下

%% 1.清空环境变量
clear all
clc

%% 2.训练集/测试集产生
%% 2.1 导入数据
load spectra_data.mat
% plot(NIR');
% title('60个样品的近红外光谱');
% xlabel('波长(nm)');
% ylabel('吸光度');
%% 2.2 随机产生训练集和测试集
temp = randperm(size(NIR,1));
% 训练集--50个样本
P_train = NIR(temp(1:50),:)';        % '表示转置,使得 列 为样本的个数
T_train = octane(temp(1:50),:)';     % '特征与目标一定要保证列即样本个数相等
% 测试集--10个样本
P_test = NIR(temp(50:end),:)';       % '表示转置,使得 列 为样本的个数
T_test = octane(temp(50:end),:)';    % '特征与目标一定要保证列即样本个数相等
N = size(P_test,2);                  % 取出测试集样本的个数

%% 3 数据归一化
[p_train, ps_input] = mapminmax(P_train,0,1); %调用归一化函数
p_test = mapminmax('apply',P_test,ps_input);

[t_train, ps_output] = mapminmax(T_train,0,1);

%% 4. BP神经网络创建、训练及仿真测试
%% 4.1 创建网络
net = newff(p_train,t_train,9)  % 9代表神经元的个数  
% view(net);                   % 使用view(net)可以看到BP神经网络的结构图

%% 4.2 设置训练参数
net.trainParam.epochs = 1000    % 设置迭代次数
net.trainParam.goal = 1e-3;     % 设置训练目标,即误差精度
net.trainParam.lr = 0.01;       % 设置学习速率

%% 4.3 训练网路
net = train(net,p_train,t_train);

%% 4.4 仿真测试
t_sim = sim(net,p_test);

%% 4.5 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output); % T_sim为预测值 

%% 5. 性能评价
%% 5.1 相对误差error
error = abs(T_sim-T_test)./T_test;

%% 5.2 决定系数R^2
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2)); 

%% 5.3 结果对比
result = [T_test' T_sim' error'];

%% 6. 绘图
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比';['R^2=' num2str(R2)]};
title(string)
%%

到了这里,关于机器学习及其MATLAB实现——BP神经网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BP神经网络入门(原理+matlab代码实现)

    对于很多刚入门的小伙伴来说,神经网络可能比较陌生。神经网络其实是对人认知物体的一种仿真。比如幼儿园老师再教小朋友认动物的时候,会让记住一些特征:比如兔子有长长的耳朵,爱吃萝卜和青菜.........,神经网络也是这样通过构建特征值之间的关系来预测一个较为可

    2023年04月23日
    浏览(36)
  • (转载)BP 神经网络的数据分类(matlab实现)

     本博客的完整代码获取: MATLAB神经网络43个案例分析 - MATLAB Simulink Books         BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。在前向传递中,输入信号从输人层经隐含层逐层处理,直至输出层。每一层的神经元状态只影响下一层神经

    2024年02月16日
    浏览(29)
  • BP神经网络回归预测MATLAB实现超详细

            哈喽!小伙伴们,接着上篇回归预测之支持向量机回归预测,今天给大家带来MATLAB实现bp神经网络回归预测,本文主要是陈述BP神经网络实现过程,不在对原理进行讲解啦。需要代码的小伙伴可以私聊我!无偿。接下来进入正题啦!         bp神经网络回归预测实

    2023年04月20日
    浏览(27)
  • BP神经网络的MATLAB实现(含源代码)

    BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络模型之一 具体数学推导以及原理在本文不做详细介绍,本文将使用MATLAB进行BP神经网络的应用与实践 BP神经网络是一

    2024年02月04日
    浏览(29)
  • 基于遗传算法的BP神经网络优化算法(matlab实现)

            BP网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP算法是Rumelhart等人在1986年提出来的。由于它的结构简单,可调整的参数多,训练算法也多,而且可操作性好,BP神经网

    2024年01月16日
    浏览(39)
  • 15.1 BP神经网络实现图像压缩——了解神经网络在图像处理方面的应用(matlab程序)

    1. 简述        BP神经网络现在来说是一种比较成熟的网络模型了,因为神经网络对于数字图像处理的先天优势,特别是在图像压缩方面更具有先天的优势,因此,我这一段时间在研究神经网络的时候同时研究了一下关于BP网络实现图像压缩的原理和过程,并且是在MATLAB上进行了仿真

    2024年02月12日
    浏览(29)
  • BP神经网络预测回归MATLAB代码(代码完整可直接用,注释详细,可供学习)

    BP神经网络预测回归MATLAB代码(代码完整可用,复制后即可运行使用,操作简单) (1)BP神经网络的知识想必不用再过多介绍,本篇文章从实际应用的角度,针对新手应用者,针对不需要过多了解BP,但是需使用MATLAB进行BP预测使用的童鞋们(就是那些我不需要懂,能用就行的

    2023年04月09日
    浏览(35)
  • 【SSA-BP预测】基于麻雀算法优化BP神经网络回归预测研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 麻雀算

    2024年02月08日
    浏览(46)
  • 使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)

     👨‍🎓 个人主页: 研学社的博客     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果

    2023年04月21日
    浏览(24)
  • 时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测

    预测效果 基本介绍 1.Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测(完整源码和数据); 2.数据集为excel,单列时间序列数据集,运行主程序main.m即可,其余为函数文件,无需运行; 3.优化参数为神经网络的权值和偏置,命令窗口输出RMSE、MAPE、MAE、R2等评价指标; 4

    2024年04月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包