Neural Network Toolbox使用笔记1:数据拟合
http://blog.csdn.net/ljp1919/article/details/42556261
Neural Network Toolbox为各种复杂的非线性系统的建模提供多种函数和应用程序。该工具箱提供各种监督学习模型:前向反馈,径向基核函数和动态网络等模型。同时也提供自组织图和竞争层结构(competitive layers)的非监督学习模型。该工具箱具有设计、训练、可视化与仿真神经网络的功能。基于该工具箱可以进行数据拟合、模式识别、分类和时间序列预测及其动态系统的建模和控制。
可以利用Parallel Computing Toolbox调用多核处理器,GPUs和计算集群对大数据集在进行训练和处理阶段进行加速。
该工具箱包含在所安装文件Toolbox下面的nnet中。可以输入 在命令行模式下输入:
help nnet
可以看到所涉及的主题。
nnstart 神经网络启动GUI的命令
nctool 神经网络分类工具
nftool神经网络的拟合工具
nntraintool 神经网络的训练工具
第一:特点
1、监督网络包括:正反馈、径向基、LVQ、时延、非线性自回归(NARX)以及层递归的神经网络
2、非监督网络包括:自组织图与竞争层结构;
3、通过预处理和后处理提高网络训练与评估网络性能;
4、模块化网络用以管理和可视化任何大小的网络;
5、用于构建和评估神经网络的Simulink模块
第二:数据拟合、分类和模式识别
1、数据拟合
应用举例:房价均值估计
问题描述:通过创建神经网络以估计社区房价的均值,该社区采用以下13个属性进行描述
1)每城市的人均犯罪率
2)住宅用地的比例大于25000平方
3)每个城市的非零售商业用地比例
4)1表示Charles river的边界,0则表示其他的
5)氮氧化合物浓度(1000万分之1)
6)平均每个寓所的房间数量
7)业主单位是1940年以前的比例
8)距离波士顿就业中心的加权距离
9)径向高速公路的可访问性指数
10)每10,000美元全部价值财产税税率
11)城市中小学老师的比例
12)1000(Bk - 0.63)^2
13)地位较低的人口百分比
上述输入是与目标输出相关联的。
数据准备
输入矩阵X和目标输出矩阵T
X中每一列都是由上述13个特征属性所表征的数字所组成。该已知的13个数值表示当前已知的房价均值。T矩阵的每一列都会有一个元素,用以表示1000年后的房价均值
(the median house price in 1000's of dollars)
数据导入:
[x,t]=house_dataset;
可以看到X和T都是506列,表示的是506个社区的属性,即所谓的输入。这些输入与房价均值相关联,即目标。X有13行,即表示13个属性;目标矩阵T只有1行。
用神经网络进行数据拟合
神经网络是用随机权值进行初始化的,所以每次运行的结果会有稍微的不一样。可以通过设置随机化种子以避免这种随机性。但是我们在应用过程中是不需要setdemorandstream(491218382)的。
一般越是复杂的问题,所需要设置的神经元数量越多,神经元层数也越多。在此,我们在隐含层设置的是10个神经元。
net = fitnet(10);
view(net)
从下图可以看出,神经网络的输入和输出都是0,这是因为此时的神经网络尚未进行配置,以对输入数据和输出数据进行匹配。需要对其进行训练!
接下来需要做得就是训练:
数据集一共分成三种:训练数据集、验证数据集和测试数据集。用训练数据集对神经网络进行训练,用以拟合模型,即用这部分数据来建立模型。 验证数据集,刚才说training建了一个模型,但是模型的效果仅体现了训练数据,但不一定适合同类的其他数据,所以需要在建模前会将数据分成两部分,一部分为训练数据,一部分为验证数据(两部分数据的比例大致为7:3,这取决于所采用的验证方法);另外,有时候也可能训练多个模型,但不知哪个模型性能更佳,这时可以将验证数据输入不同模型进行比较。所以,训练过程是需要不断进行的,直到验证数据集的性能不再有所提升。 test是测试数据,它跟前两者的最大区别在于:training和validation数据均是同一时期的数据,如都是5-7月数据,但既然是测试,就需要用跨期的数据来验证模型的稳定性,此时,可采用8月单月数据或9月单月数据对建好的模型进行测试,看性能有没有下降或偏移。
采用NN Training Tool可以展现被训练的神经网络和用以训练的算法。此外,该工具也展示了训练的过程中的训练时态和训练终止的准则(该准则用绿色进行标注)。在该UI底部的可以绘制。在算法名称和绘制按钮的旁边都有其对应的链接,以补充对该算法或者绘制图像的说明。
可以点击"Performance" 按钮或者用语句plotperform(tr)来查看神经网络在训练过程性能的提升。该性能的测量是基于最小均方误差,以对数log为底进行显示。在训练过程中可以发现该曲线是迅速下降的。且需要注意,多次运行所需要的迭代次数是不一样的。图中绿色圈圈所指示的是验证数据集性能最好的地方。
测试神经网络
通过测量测试数据的最小均方误差,可以感知经过训练的神经网络对应真实数据所表现出来的性能。
testX = x(:,tr.testInd);
testT = t(:,tr.testInd);
testY = net(testX);
perf = mse(net,testT,testY)
此外,也可以通过绘制回归线来测量神经网络对应数据的拟合程度。下面基于所有样本绘制回归线:
y = net(x);
plotregression(t,y)
若神经网络已经训练好,可以对数据进行拟合,则在回归图上面线性输出的目标拟合曲线Fit应该横贯左下角和右上角。若是没有达到,则需要继续进行训练,或者采用更多神经元的神经网络进行训练。
第三种测量神经网络对于数据的拟合程度方法是误差分布图。误差分布图可以展示误差情况,一般多数误差是靠近0的,只有少数远离0。
参考文档
http://cn.mathworks.com/products/neural-network/