matlab与机器学习(三)以辛烷值含量预测为例BP神经网络(含代码解析)_octane函数matlab-程序员宅基地

技术标签: matlab  机器学习  study_lover  


 

   在BP神经网络中,单个样本有个输入,有个输出,在输入层和输出层之间通常还有若干个隐含层。实际

   上,1989Robert Hecht-Nielsen证明了对于任何闭区间内的一个连续函数都可以用一个隐含层的BP网

   络来逼近,这就是万能逼近定理。所以一个三层的BP网络就可以完成任意的维到维的映射。即这三层分

   别是输入层(I),隐含层(H),输出层(O)。如下图示

 

        

 

 


%% I. 清空环境变量

clear all
clc

一、随机生成训练集和测试集

%% II. 训练集/测试集产生

%%
% 1. 导入数据
load spectra_data.mat

%%
% 2. 随机产生训练集和测试集
temp = randperm(size(NIR,1));%1代表多少行,2代表多少列
% 训练集——50个样本
P_train = NIR(temp(1:50),:)';%冒号代表取出来是整行或者整列,'代表转置
T_train = octane(temp(1:50),:)';
% 测试集——10个样本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);

%% III. 数据归一化
[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);

%% IV. BP神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newff(p_train,t_train,9);%9个隐藏神经元

%%
% 2. 设置训练参数
net.trainParam.epochs = 1000;%迭代次数
net.trainParam.goal = 1e-3;%训练目标
net.trainParam.lr = 0.01;%学习率

%%
% 3. 训练网络
net = train(net,p_train,t_train);

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

%%
% 5. 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);

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

%%
% 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));

%%
% 3. 结果对比
result = [T_test' T_sim' error']

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37269455/article/details/74783661

智能推荐

[深度学习][转载]CUDA arch和CUDA gencode对应关系_FL1623863129的博客-程序员宅基地

I’ve seen some confusion regarding NVIDIA’s nvcc sm flags and what they’re used for:When compiling with NVCC, the arch flag (‘-arch‘) specifies the name of the NVIDIA GPU architecture that the CUDA files will be compiled for.Gencodes (‘-gencode‘) allows _cuda arch

Ubuntu pip3安装报错解决_ubuntu23 pip3错误-程序员宅基地

pip3安装后建议不要使用sudo pip3 install --upgrade pip升级,否则会碰到main调用bug,bug可通过如下方式解决,否则可通过直接编译安装pip3解决新版本问题。解决bug(参考https://blog.csdn.net/qq_21418205/article/details/80032489):正确安装方式:下载地址:https://www.python.org..._ubuntu23 pip3错误

Python进阶之路—七-程序员宅基地

18、编码问题——初次见面 (1)、编码的发展 <1>ASCII码:只能存英文和拉丁字符,一个字符占一个字节,8位 <2>GB2312:只能有6700多个中文 <3>GBK:是GB2312的扩展,除兼容GB2321外,它还能显示繁体中文,还有日文的假名 <4>Unicode:万国码,是国际组织制定的可以容纳世界上所有文字和字符的编码方案。UTF-32(一个字符占4个字节)、UTF-16(一

蓝桥杯第七届C组第三题-程序员宅基地

题目:平方怪圈如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。请写出这个循环圈中最大的那个数字。请填写该最大数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。代码:import java.util.Scanner;publi...

[转贴]大言不惭点评无线通信的几本经典教材_通信原理哪个版本较好-程序员宅基地

来美国后囫囵吞枣的看了goldsmith和david tse的关于wirelesscom的大作。加上在国内本科硕士时上的haykin和proakis的通信原理,把通信类最经典的四大名著都过了一边。随便发发感想。 haykin's communsystem:还记得本科交这门课的宋铁成老师讲的移动联通血拼史。老haykin的那本书像本回忆录,从最原始的模拟通信开始,然后ISI,digta..._通信原理哪个版本较好

linux 查看memcache状态,如何查看Memcached运行状态-程序员宅基地

如何通过命令行查看memcache当前运命令行下查看memcache的运行状态的命令主要是stats命令,步骤如下:(1)首先通过telnet命令连接上memcache,命令:telnet 127.0.0.1 11211(2)直接输入stats 就可以得到当前memcache的状态。对于memcache的状态各英文的意思做如下解释:pid memcache服务器的进程IDuptime 服务器已经运..._linux memcached查看进程的状态是否活着

随便推点

硬盘显示容量和实际容量不符合_PSSD能否替代U盘?ORICO i-Match移动硬盘实测-程序员宅基地

U盘的出现可谓是电脑发展历程中的一个重要的节点,其极大的方便和改进了大家数据存储交换的方式,短短20年,从初始的几M发展到现今的数百G,无论容量还是速度,都发生了翻天覆地的变化,而且其普及极为广泛,可谓人尽皆知,这都要归功于其精致小巧便携等特性,而随着PSSD的出现,U盘的地位岌岌可危,所谓PSSD=Portable SSD,即移动固态硬盘,其兼具NVMe固态硬盘的超快读写速度,以及逼近U盘体型的..._固态硬盘实际容量检测

Angular应用提高打包速度_angular打包优化_清晨-阳光zx的博客-程序员宅基地

当Angular应用功能逐渐增加,打包速度逐渐变慢时,可以尝试使用此方法缩短打包时间。_angular打包优化

大道至简 知易行难 C# 完成WebSocket demo 用GoEasy实现Hello world-程序员宅基地

在现在Time cost和Labor cost进入项目并占据重要位置的开发理念里,当一款项目的目标、理念以及开发的要求非常明确时,怎样减少时间、人力成本以及降低开发风险以及成为一个项目在开发初期需要确定的重要因素。 大道至简 知易行难,作为一名开发人员站在开发的角度上来讲,怎样去攻克一个技术难题或者需要学习新的语言、技术去应用于新的项目,已经不会是最大的问题,而时间成本以及人力成本会是一...

java web吧百度贴吧_tbspider: Java对百度贴吧爬虫,采用webmagic框架。目的爬取百度贴吧的数据,并做一些统计与数据分析,非商业,纯属个人娱乐...-程序员宅基地

目录READMEjava 爬虫,采用webmagic框架。目的爬取百度贴吧的数据,并做一些统计与数据分析,非商业,纯属个人娱乐。近期工作项目有用到爬虫,便开始学习并写了个demo。采用的是webmagic爬虫框架,爬取的内容有:帖子,帖子回复,用户主页。项目为springboot 1.5.7版本,提供数据持久化,前端采用echart做数据分析图表展示。百度贴吧的数据只能爬取到99999页,即不超过..._tbspider

【JS】Array.from() 将伪数组转换成数组-程序员宅基地

微信订阅号:Rabbit_svipArray.from 方法用于将两类对象转换为真正的数组:1、类似数组的对象,可以理解为“伪数组”2、可遍历对象(比如字符串)什么是伪数组?伪数组都有一个基本的特点:必须有 length 属性。let arrayLike = { "0": "a", "1": "b", "2": "c", "length"...

anaconda 安装caffe,cntk,theano-未整理-程序员宅基地

一,anancona 安装https://repo.anaconda.com/archive/conda create -n caffe_gpu -c defaults python=3.6 caffe-gpuconda create -n caffe -c defaults python=3.6 caffe测试:import caffepython -c "import c..._import caffe importerror: libpython3.5m.so.1.0: cannot open shared object fi

推荐文章

热门文章

相关标签