sql数据提取和matlab,从sqlserver中导入数据到matlab。

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

1、在start toolbox中找到工具箱

0818b9ca8b590ca3270a3433284dd417.png

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

3、效果如下所示:

0818b9ca8b590ca3270a3433284dd417.png

真是非常方便。

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、降维的办法?

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值