很多模式或关系不清晰的情况下,比较适合用神经网络。关于神经网络本身,最近发展的很快,应用也越来越广,自行谷歌。
本文使用的为最为流行的前馈神经网络(feed-forward neural network),网络各层使用默认的Sigmoid函数,以气体传感器为例简单介绍下MATLAB神经网络工具箱的使用。
我们有下面的数据原始电压CO_diff和温湿度(Temp和Humi)为神经网络训练输入,对应的标准气体浓度CO_ref为训练目标(target),然后我们用训练后生成的方程去预测未来不同温度湿度条件下,不同CO原始响应电压对应的浓度。
![4025027-0af107fc6d0ccd9b.png](https://i-blog.csdnimg.cn/blog_migrate/51e87c92c7ef71597fe8c3bc8c70c177.webp?x-image-process=image/format,png)
1. 复制CO_diff、Temp和Humi三个输入元素到CO_input变量,CO_ref到CO_ref变量,然后转置下,因为MATLAB走的是列。
CO_input = CO_input'
CO_ref =CO_ref'
![4025027-b69e986bbe0b5a91.png](https://i-blog.csdnimg.cn/blog_migrate/ac55954c1438e9895c78086abd61c8d2.webp?x-image-process=image/format,png)
2.打开神经网络 拟合工具箱
![4025027-3a42985a01f9330e.png](https://i-blog.csdnimg.cn/blog_migrate/a702f7f7d5a11c1cb0e2f41437a45490.webp?x-image-process=image/format,png)
![4025027-3c95c894dff31d79.png](https://i-blog.csdnimg.cn/blog_migrate/7553e595013414c79b9c5231a1ede5f5.webp?x-image-process=image/format,png)
3. 选上input和Target
![4025027-da8d4d23dc04d359.png](https://i-blog.csdnimg.cn/blog_migrate/007eea71e24e29f6bca5a0ca502b3038.webp?x-image-process=image/format,png)
4. 选择训练的样本量,用作validation的样本量和作为最后的自检的样本量,样本少的时候建议training的样本要多一些
![4025027-c254cf4ce485bd01.png](https://i-blog.csdnimg.cn/blog_migrate/664068ede52b785919500c4c1585f0c8.webp?x-image-process=image/format,png)
5.选择隐藏层的数量,这个可以先默认10,回头误差大相关性不好的时候再过来改,一般来说不要太多,具体看相关文章。
![4025027-b1ff86b2fd6aafce.png](https://i-blog.csdnimg.cn/blog_migrate/11f577af529e26f7764142f151f78225.webp?x-image-process=image/format,png)
6.Train,每次train都会有些许变化的,重点看MSE和R如何,如果保持较好就可以。否则要回到上一步。也可以通过编程来评估,譬如每个隐藏层选择train 100次,然后看好的MSE和R出现的概率。
![4025027-a459f2b205730ab8.png](https://i-blog.csdnimg.cn/blog_migrate/d5d45e0319b4fd920dbf85d6b09df1af.webp?x-image-process=image/format,png)
7. 生成函数,用以预测。这里我用的MATLAB Matrix-only Function,点一下即可。上面那个MATLAB Function也是一样的,不过可以做成单独的应用更方便些,里面代码大部分都一样的。
![4025027-75f8912e4480ebc4.png](https://i-blog.csdnimg.cn/blog_migrate/8dab41eb0bee206217fe50c949fa11cf.webp?x-image-process=image/format,png)
![4025027-0a709473a65ebf5d.png](https://i-blog.csdnimg.cn/blog_migrate/c4eead0115c0c8be600c8b46e42d1fd8.webp?x-image-process=image/format,png)
![4025027-09054e33a0958a9c.png](https://i-blog.csdnimg.cn/blog_migrate/4603426514470fcc77ac9533be8bb228.webp?x-image-process=image/format,png)
改函数名:
![4025027-5989aa807fddfa89.png](https://i-blog.csdnimg.cn/blog_migrate/2910190a3ba399d40e43f9112043a8c2.webp?x-image-process=image/format,png)
8. 测试下,按照顺序把下面的CO_diff和Temp,Humi放到CO_test_input这个变量里。然后直接 CO_test_output = ANN_CO(CO_test_input);
即可
![4025027-9c15a78e104c0ff2.png](https://i-blog.csdnimg.cn/blog_migrate/4490192e25f47282acc16fc229419166.webp?x-image-process=image/format,png)
输出如下:
![4025027-017c2f242e900d1a.png](https://i-blog.csdnimg.cn/blog_migrate/97d72ae8c5a0c6ed80eafd46a90509f6.webp?x-image-process=image/format,png)
5分钟移动平均的趋势图:
![4025027-87104a33ac2fc363.png](https://i-blog.csdnimg.cn/blog_migrate/77a6808c4e42cca6f1ea4b63863db693.webp?x-image-process=image/format,png)