加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

从sqlserver中导入数据到matlab。

发布时间:2020-12-12 12:50:29 所属栏目:MsSql教程 来源:网络整理
导读:问题来源:由于用 c++ 神经网络仿真工具太慢,而训练的输入输出都非常缓慢,所以这里还是用神经网络来进行训练,故将数据从 sqlserver 中取数据。发现可以用 database?tool?? 真是非常方便 1、在 start?toolbox 中找到工具箱 2、利用 odbc? 配置好数据源,以


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

1、在start?toolbox中找到工具箱


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

?

3、效果如下所示:

?

真是非常方便。

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,1);
    end
end
 
    for j=1:336
        input_test(1,j)=aamatlab{11,1);
    end
    
for j=337:504
    output_test(1,j-336)=aamatlab{11,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、降维的办法?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读