BP神经网络初步应用(数据预处理)基于matlab
2017-09-10 23:20
232 查看
由于数模比赛临近,本人最近初步了解了一下BP神经网络,但是大部分的知识并不了解,更多做的工作是如何应用和快速上手。
关于入门BP神经网络的资料展示如下:
http://www.jianshu.com/p/3d96dbf3f764 这个是有关BP神经网络的概念介绍
http://playground.tensorflowjiaocheng.com/#activation=tanh&batchSize=10&dataset=circle®Dataset=reg-plane&learningRate=0.03®ularizationRate=0&noise=0&networkShape=4,2&seed=0.38809&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false一个好玩的神经网络
说一下本人对神经网络 一个初步认识:首先,神经网络分为输入层,隐藏层,输出层,每一层隐藏层都有若干神经元,每一层输入层到隐藏层到输出层,主要改变的值就是每一个神经元的权重,而这些神经元进行运算之后所想要得到的是数据的特征。所以,我的理解是BP神经网络有助于找出数据的特征,并根据数据的特征得到分类的效果。
说了这么多,我们主要想做的事情还是应用。所以,基于matlab,在此给出了关于BP神经网络函数包的使用:
newff函数的格式为:
net=newff(PR,[S1 S2 …SN],{TF1 TF2…TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:
PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;
PR:指得是你的训练数据在每一个维度的最大值和最小值,范围越准确,训练的速度和准确度越快
Si:第i层神经元个数;
神经网络每一层的神经元个数
TFi:第i层的传递函数,默认函数为tansig函数;
BTF:训练函数,默认函数为trainlm函数;
BLF:权值/阈值学习函数,默认函数为learngdm函数;
PF:性能函数,默认函数为mse函数。
下面几个参数,初学者一般用默认值
一段最简单神经网络初始化,训练,进行预测的步骤,函数代码如下所示:
net结构体就是我们训练出来的神经网络,可以用net进行仿真,得到预测分类数据。matlab出来的相关训练窗口如下所示:
![](https://img-blog.csdn.net/20170910210653307?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2l0aHViXzMzODczOTY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Epoch表示迭代数,Time表示运行时间,Performance:表示训练的情况如何,如果训练到Performance达到0.1或者迭代数达到我们的最大迭代数则训练结果,以下的Plots框框中的Performance,Training State,Regression表示迭代过程中,对应Performance图的变化。
接下来是对一个实际例子进行运算:
以下是对一个乳腺肿瘤文件的计算,
题目内容如下:
乳腺肿瘤病灶组织的细胞核显微图像数据包含10个量化特征(细胞核半径、质地、周长、面积、光滑性、紧密度、凹陷度、凹陷点数、对称度、断裂度),这些特征与肿瘤的性质有密切关系。试建立诊断肿瘤是良性还是恶性的数学模型。
数据见data.mat
第一列为病例编号,第二例为确诊结果,良性、恶性分别用1,2标识,第3-12列为量化特征,第13-22为相应 的标准差,23-32为相应的最坏值。
首先,先看数据的类型情况,很明显从题目和数据得到两个特点。
1. 原始数据是一个十维数据,很明显需要降维,降维到5-6维会比较好处理,降维的方法本人采用的是PCA(主层次分析法)
2. 原始数据的10维特征的量纲不同,并且异常值较多,所以剔除异常值和归一化也是必须要做的。
本人使用的剔除异常值的方法是 拉依达准则法(3δ)
这个方法简单好用,可以简单概括为一个公式
P(|x−μ|>3σ)<=0.03
即一般认为>3σ的值为异常值,便可得到异常值,在此数据的异常值我选择剔除。
剔除之后再进行无量纲化
至于PCA,matlab中常用的公式为:
[pc, score, variance, t2]=princomp(X)
列表示维数,行表示样本数。
输出变量:
① pc 主分量zi的系数(ci1,…,cip) ,也叫因子系数;注意:pcTpc=单位阵
② score是主分量下的得分值;得分矩阵与数据矩阵X的阶数是一致的;
③ variance是score对应列的方差向量,即相关系数矩阵R的特征值;容易计算方差所占的百分比
percent-v = 100*variance/sum(variance);
④ t2表示检验的t2-统计量(主要用于方差分析)
以下给出一个例子中的输出参数:
z1 z2 z3 z4
pc = x1 0.7000 0.0950 -0.2400 0.6659
x2 0.6898 -0.2836 0.0585 -0.6636
x3 0.0879 0.9042 -0.2703 -0.3189
x4 0.1628 0.3050 0.9305 0.1208
variance =[ 1.7183 1.0935 0.9813 0.2069];
![](https://img-blog.csdn.net/20170910223550048?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2l0aHViXzMzODczOTY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
变量variance的前几列如果方差所占百分比够大的话。
因为前三项综合指标的信息量已经达到94.828%
选择前3个等式。由此,便可以从4维的变量降到三维。
由于13-22为相应的标准差,标准差越大,说明数据变动越大,数据越不可信,所以我对特征数值的计算公式为:(指标最差值-指标数据值)*(数据标准差归一化的导数)
对神经网络进行训练,并用神经网络来预测,相关的数据代码我保存在我的github上
https://github.com/HBKO/math-model-practice-
关于入门BP神经网络的资料展示如下:
http://www.jianshu.com/p/3d96dbf3f764 这个是有关BP神经网络的概念介绍
http://playground.tensorflowjiaocheng.com/#activation=tanh&batchSize=10&dataset=circle®Dataset=reg-plane&learningRate=0.03®ularizationRate=0&noise=0&networkShape=4,2&seed=0.38809&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false一个好玩的神经网络
说一下本人对神经网络 一个初步认识:首先,神经网络分为输入层,隐藏层,输出层,每一层隐藏层都有若干神经元,每一层输入层到隐藏层到输出层,主要改变的值就是每一个神经元的权重,而这些神经元进行运算之后所想要得到的是数据的特征。所以,我的理解是BP神经网络有助于找出数据的特征,并根据数据的特征得到分类的效果。
说了这么多,我们主要想做的事情还是应用。所以,基于matlab,在此给出了关于BP神经网络函数包的使用:
newff函数的格式为:
net=newff(PR,[S1 S2 …SN],{TF1 TF2…TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:
PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;
PR:指得是你的训练数据在每一个维度的最大值和最小值,范围越准确,训练的速度和准确度越快
Si:第i层神经元个数;
神经网络每一层的神经元个数
TFi:第i层的传递函数,默认函数为tansig函数;
BTF:训练函数,默认函数为trainlm函数;
BLF:权值/阈值学习函数,默认函数为learngdm函数;
PF:性能函数,默认函数为mse函数。
下面几个参数,初学者一般用默认值
一段最简单神经网络初始化,训练,进行预测的步骤,函数代码如下所示:
p = [0 1 0 5 1 3 2 2 2 1 19 18 23 17 43 12 2 17 19 23; 1 2 0 4 1 1 1 4 0 1 13 15 13 11 9 9 2 14 12 7; 5 5 8 0 10 9 5 7 11 9 0 0 1 0 0 0 3 1 0 0; 7 10 16 2 11 9 6 5 8 6 0 0 0 1 0 0 3 2 0 0; 10 11< ddab /span> 15 2 11 12 12 9 5 6 2 1 1 1 0 1 1 0 1 1]; P = [9 2 3 13 3 15 3 10 3 2 6 5 9 2 2 2 2 16 2 18; 7 4 4 8 5 9 6 12 3 3 12 4 7 3 2 4 4 10 2 10; 0 0 4 1 5 0 2 1 7 0 2 2 0 4 2 1 3 1 2 1; 0 2 8 0 1 1 5 0 7 0 1 3 0 3 3 1 1 1 0 2; 2 3 9 1 2 1 8 1 5 0 2 1 1 5 4 1 3 1 1 2]; t = [1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0]; net=newff([0 20;0 16;0 12;0 12;0 13],[3 1],{'logsig' 'purelin'},'traingdx'); net.trainparam.show=100; %两次显示之间的训练步数 net.trainparam.lr=0.5; %学习率 net.trainparam.mc=0.8; %惯性常数 net.trainparam.epochs=20000; %迭代次数 net.trainparam.goal=0.01; %训练目标 [net,tr]=train(net,p,t); %进行训练 Y=sim(net,p); a=sim(net,P);
net结构体就是我们训练出来的神经网络,可以用net进行仿真,得到预测分类数据。matlab出来的相关训练窗口如下所示:
Epoch表示迭代数,Time表示运行时间,Performance:表示训练的情况如何,如果训练到Performance达到0.1或者迭代数达到我们的最大迭代数则训练结果,以下的Plots框框中的Performance,Training State,Regression表示迭代过程中,对应Performance图的变化。
接下来是对一个实际例子进行运算:
以下是对一个乳腺肿瘤文件的计算,
题目内容如下:
乳腺肿瘤病灶组织的细胞核显微图像数据包含10个量化特征(细胞核半径、质地、周长、面积、光滑性、紧密度、凹陷度、凹陷点数、对称度、断裂度),这些特征与肿瘤的性质有密切关系。试建立诊断肿瘤是良性还是恶性的数学模型。
数据见data.mat
第一列为病例编号,第二例为确诊结果,良性、恶性分别用1,2标识,第3-12列为量化特征,第13-22为相应 的标准差,23-32为相应的最坏值。
首先,先看数据的类型情况,很明显从题目和数据得到两个特点。
1. 原始数据是一个十维数据,很明显需要降维,降维到5-6维会比较好处理,降维的方法本人采用的是PCA(主层次分析法)
2. 原始数据的10维特征的量纲不同,并且异常值较多,所以剔除异常值和归一化也是必须要做的。
本人使用的剔除异常值的方法是 拉依达准则法(3δ)
这个方法简单好用,可以简单概括为一个公式
P(|x−μ|>3σ)<=0.03
即一般认为>3σ的值为异常值,便可得到异常值,在此数据的异常值我选择剔除。
剔除之后再进行无量纲化
至于PCA,matlab中常用的公式为:
[pc, score, variance, t2]=princomp(X)
列表示维数,行表示样本数。
输出变量:
① pc 主分量zi的系数(ci1,…,cip) ,也叫因子系数;注意:pcTpc=单位阵
② score是主分量下的得分值;得分矩阵与数据矩阵X的阶数是一致的;
③ variance是score对应列的方差向量,即相关系数矩阵R的特征值;容易计算方差所占的百分比
percent-v = 100*variance/sum(variance);
④ t2表示检验的t2-统计量(主要用于方差分析)
以下给出一个例子中的输出参数:
z1 z2 z3 z4
pc = x1 0.7000 0.0950 -0.2400 0.6659
x2 0.6898 -0.2836 0.0585 -0.6636
x3 0.0879 0.9042 -0.2703 -0.3189
x4 0.1628 0.3050 0.9305 0.1208
variance =[ 1.7183 1.0935 0.9813 0.2069];
变量variance的前几列如果方差所占百分比够大的话。
因为前三项综合指标的信息量已经达到94.828%
选择前3个等式。由此,便可以从4维的变量降到三维。
由于13-22为相应的标准差,标准差越大,说明数据变动越大,数据越不可信,所以我对特征数值的计算公式为:(指标最差值-指标数据值)*(数据标准差归一化的导数)
对神经网络进行训练,并用神经网络来预测,相关的数据代码我保存在我的github上
https://github.com/HBKO/math-model-practice-
相关文章推荐
- 数据预测之BP神经网络具体应用以及matlab代码
- 基于Matlab的多层BP神经网络在非线性函数拟合中的应用
- 数据预测之BP神经网络具体应用以及matlab代码
- 基于Matlab的BP神经网络在非线性函数拟合中的应用
- 基于matlab的bp神经网络在语音特征信号识别中的应用
- 基于Matlab的BP神经网络在语音特征信号识别中的应用
- 基于Matlab的遗传算法优化BP神经网络在非线性函数拟合中的应用
- 数据预测之BP神经网络具体应用以及matlab代码
- 数据预测之BP神经网络具体应用以及matlab代码
- 数据预测之BP神经网络具体应用以及matlab代码
- 数据预测之BP神经网络具体应用以及matlab代码
- 数据预测之BP神经网络具体应用以及matlab代码
- 基于.NET平台的Web应用中数据访问技术的深入探索(转)
- [置顶] Java开发基于百度翻译API的应用-gson获取json数据
- 基于IBM Bluemix的数据缓存应用实例
- 基于Greenplum Hadoop分布式平台的大数据解决方案及商业应用案例剖析
- matlab利用训练好的BP神经网络来预测新数据(先保存网络,再使用网络)
- 后台基于SSH框架开发的Android应用的前后台数据交互
- Android上基于JSON的数据交互应用
- 基于matlab的车牌识别-模板匹配-BP神经网络-卷积神经网络[深度学习]