从sqlserver中导入数据到matlab。


问题来源:由于用c++神经网络仿真工具太慢,而训练的输入输出都非常缓慢,所以这里还是用神经网络来进行训练,故将数据从sqlserver中取数据。发现可以用database tool  真是非常方便

1、在start toolbox中找到工具箱

从sqlserver中导入数据到matlab。_第1张图片

2、利用odbc 配置好数据源,以及sql语句,以及matlab变量,就可以执行了

 

3、效果如下所示:

 从sqlserver中导入数据到matlab。_第2张图片

真是非常方便。

4、对元胞数组进行操作

a=aamatlab{1,2}(1,1)为取元胞数组中1行第2个元胞中 的第一行第一列个值  

结果为:0.0375  哈哈 搞定,进行下一步工作。

备注:clc为清屏,而clear为清除工作空间中的变量

5、形成训练样本

导入数据指令 imported_data = importdata('matlab.mat')  

6、训练并预测,代码如下:

%%清空环境变量
clc;
clear;
%%训练数据预测数据?此处数据来源于一药店两年当中24个月的销量
% % data=[1856 1995 2220 2056 1123 1775 1900 1389 1609 1424 2276 1332 2056 2395 2600 2298 1634 1600 1873 1487 1900 1500 2046 1556];
% input_train=zeros(15,3);
% output_train=zeros(15,1);
% input_test=zeros(1,3);
% output_test=zeros(1,1);
% 
% for i=1:15
%     input_train(i,1:3)=data(i:i+2);
%     output_train(i,1)=data(i+3);
% end
% input_test=[1487 1900 1500];
% output_test=2046;
% j=0;
% for i=16:21
%     j=j+1;
%     input_test(j,1:3)=data(i:i+2);
%     output_test(j,1)=data(i+3);
% end
aamatlab=importdata('matlab.mat');  
row=2;
input_train=zeros(row,336);
output_train=zeros(row,168);
input_test=zeros(1,336);
output_test=zeros(1,168);
for i=1:row
    for j=1:336
        input_train(i,j)=aamatlab{i,j}(1,1);
    end
end
 
for i=1:row
    for j=337:504
        output_train(i,j)=aamatlab{i,j}(1,1);
    end
end
 
    for j=1:336
        input_test(1,j)=aamatlab{11,j}(1,1);
    end
    
for j=337:504
    output_test(1,j-336)=aamatlab{11,j}(1,1);
end
input_train=input_train';
output_train=output_train';
input_test=input_test';
output_test=output_test';
 
%输入数据归一化
[inputn,inputps]=mapminmax(input_train);
%%BP网络训练
%初始化网络结构
net=newff(inputn,output_train,10);//隐层神经元数,一般为样本数的一半
net.trainParam.epochs=1000;
net.trainParam.lr=0.1;
net.trainParam.goal=0.0000004;
%%网络训练
net=train(net,inputn,output_train);
%%BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
%网络预测输出
BPoutput=sim(net,inputn_test);


结果分析:当样本数较少时,训练的时间比较短,但是当样本数超过5就会出现内存不足的问题,估计是形成的矩阵太大了。所以,输入神经元和输出神经元的数目一定要减少,单纯靠服务器的性能是无法解决问题的,另外,c++版本的程序经过测试,训练运算速度实在是太慢,因此,我还是考虑用matlab来做,其接口问题,虽然现在还没有掌握,但是在宿舍的电脑上还是可以实现的,到时候把生成的c++文件拷贝过来就可以了。

1、今天回去的任务是,将matlab代码进行转化,然后再c++中训练,看其效果。

2、降维的办法?

通过调试,确实发现,训练样本数影响其中一些计算的维数,所以还是考虑降维吧。

你可能感兴趣的:(从sqlserver中导入数据到matlab。)