该实现为《数据挖掘》课程的一次作业。数据在http://www.kaggle.com/网站上,所以数据为CSV格式。但BP神经网络算法为最一般的实现,所以有参考价值。
close all %关闭打开的文件
clear %清除内存中的数据
echo on %显示执行的每一条命令
clc %清除命令行窗口
pause %敲任意键开始
%定义训练样本
%P为输入矢量,注意最后的转置为了保证输入矢量与目标矢量的列数相同。
%P为384*10000矩阵
P = csvread('C:\Users\Administrator\Desktop\train.csv',1,2)';
%T为目标矢量,注意最后的转置为了保证输入矢量与目标矢量的列数相同。
%T为1*10000矩阵
RNG = [1, 1, 10000, 1];
T = csvread('C:\Users\Administrator\Desktop\train.csv',1,1, RNG)';
%创建一个新的前向神经网络
%传递函数包括tansig、purelin、logsig
%newff旧的使用方法,会有warning
net=newff(minmax(P),[20,1],{'logsig','purelin'},'traingdm')
%设置训练参数
net.trainParam.show = 100; %100个迭代显示收敛曲线变化
net.trainParam.lr = 0.05; %学习速率为0.05
net.trainParam.mc = 0.9; %网络中设置动量因子为c=0.9 ?
net.trainParam.epochs = 10000; %最大训练次数为10000
net.trainParam.goal = 1e-3; %训练精度为1e-3
%调用 TRAINGDM 算法训练 BP 网络
[net,tr]=train(net,P,T);
%读取测试数据
Q = csvread('C:\Users\Administrator\Desktop\test.csv',1,1)';
%对BP网络进行仿真
A = sim(net,Q);
%生成所需格式
N=10000 %数组长度
B=zeros(1,N) %定义一个长度为N的数组A(数组A为一行形式的数组),并将每个元素值初始化为0
for num=1:N %循环给A的每个元素值初始化为num*2
B(num)=num;
end
R = [B; A]';
%写入信息
csvwrite('C:\Users\Administrator\Desktop\result.csv', R, 1, 0);
pause
clc
echo off
实现过程如上所示,下面解释一下所用到的函数。
(1)csvread
第一种:M = csvread('FILENAME') ,直接读取csv文件的数据,并返回给M,这时要求整个csv文件内容全部为用逗号隔开的数字,不能用其他字符。
第二种:M = csvread('FILENAME',R,C) ,读取csv文件中从第R-1行,第C-1列的数据开始的数据,这对带有头文件说明的csv文件(如示波器等采集的文件)的读取是很重要的。
第三种:M = csvread('FILENAME',R,C,RNG),其中 RNG = [R1 C1 R2 C2],读取左上角为索引为(R1,C1) ,右下角索引为(R2,C2)的矩阵中的数据。
(2)newff
第一个参数是一个Rx2的矩阵以定义R个输入向量的最小值和最大值。
第二个参数是一个设定每层神经元个数的数组。
第三个参数是包含每层用到的传递函数名称的细胞数组。
最后一个参数是用到的训练函数的名称。
(3)train
[net,tr] = train(net,X,T,Xi,Ai)
net | Network |
X | 输入矢量 |
T | 目标矢量(default = zeros) |
Xi | Initial input delay conditions (default = zeros) |
Ai | Initial layer delay conditions (default = zeros) |
and returns
net | New network |
tr | Training record (epoch andperf) |
(4)网络层数的选择,传递函数的选择,训练参数的选择尚待研究。
Reference:
1. 新版Matlab中神经网络训练函数Newff的使用方法
http://blog.sina.com.cn/s/blog_64b046c70101cko4.html
2. matlab newff使用
http://hi.baidu.com/topman8023/item/42248e3820a6baf396f88d09
3. 怎样从matlab中读取csv文件
http://blog.sina.com.cn/s/blog_46e9b2010100u6gb.html
4. Matlab Documentation