【问题标题】:Neural network - solve a net with time arrays and different sample rate神经网络 - 求解具有时间数组和不同采样率的网络
【发布时间】:2016-01-22 07:44:16
【问题描述】:

我对一台机器进行了 3 次测量。每次测量值每次变化一定的增量时都会触发。

我有这 3 个数据集,表示为 Matlab 对象:T1T2O。它们中的每一个都有一个包含时间戳值的obj.t 和一个包含测量值的obj.y

我会长期测量T1T2,但O 只会测量很短的一段时间。任务是从T1T2 重构O_future,使用O 的现有值进行训练和验证。

请注意,T1.tT2.tO.t 不相等,甚至它们的频率也不相等(我可能称之为“可变采样率”,但不确定这个名称是否适用)。

是否可以使用 Matlab 或其他软件解决此问题?我需要将所有数据重新采样到一个公共时间向量吗?

【问题讨论】:

  • 我正在研究一种启发式算法来解决同样的问题,我认为它可以用来训练神经网络。

标签: algorithm matlab neural-network artificial-intelligence


【解决方案1】:

关于公共时间。下面是一些执行此操作的基本代码。 (我想你可能知道怎么做,但以防万一)。但是,第二个选项可能会让您走得更远……

% creating test signals
t1 = 1:2:100;
t2 = 1:3:200;
to = [5 6 100  140];
s1 = round (unifrnd(0,1,size(t1)));
s2 = round (unifrnd(0,1,size(t2)));
o  = ones(size(to));


maxt = max([t1 t2 to]);
mint = min([t1 t2 to]);
% determining minimum frequency
frequ = min([t1(2:length(t1)) - t1(1:length(t1)-1) t2(2:length(t2)) - t2(1:length(t2)-1) to(2:length(to)) - to(1:length(to)-1)] );

% create a time vector with highest resolution 
tinterp = linspace(mint,maxt,(maxt-mint)/frequ+1);

s1_interp = zeros(size(tinterp));
s2_interp = zeros(size(tinterp));
o_interp  = zeros(size(tinterp));
for i = 1: length(t1)
    s1_interp(ceil(t1(i))==floor(tinterp)) =s1(i);
end
for i = 1: length(t2)
    s2_interp(ceil(t2(i))==floor(tinterp)) =s2(i);
end
for i = 1: length(to)
    o_interp(ceil(to(i))==floor(tinterp)) = o(i);
end
figure,
subplot 311
hold on, plot(t1,s1,'ro'),  plot(tinterp,s1_interp,'k-')
legend('observation','interpolation')
title ('signal 1')

subplot 312
hold on, plot(t2,s2,'ro'),  plot(tinterp,s2_interp,'k-')
legend('observation','interpolation')
title ('signal 2')

subplot 313
hold on, plot(to,o,'ro'),  plot(tinterp,o_interp,'k-')
legend('observation','interpolation')
title ('O')

对于大矢量而言,这并不理想,一旦您在其中一个决定最低分辨率的信号中具有较小的采样频率,这可能会变得无效。

另一种选择是定义一个更粗略的时间向量,并查看在特定时期内发生的事件数量,这也可能具有一定的预测能力(不确定您的设置)。 结构类似于

coarse_t = 1:5:100;
s1_coarse = zeros(size(coarse_t));
s2_coarse = zeros(size(coarse_t));
o_coarse  = zeros(size(coarse_t));
for i = 2:length(coarse_t)
    s1_coarse(i) = sum(nonzeros(s1(t1<coarse_t(i) &  t1>coarse_t(i-1))));
    s2_coarse(i) = sum(nonzeros(s2(t2<coarse_t(i) &  t2>coarse_t(i-1))));
    o_coarse(i)  = sum(nonzeros(o(to<coarse_t(i) &  to>coarse_t(i-1))));
end

【讨论】:

  • 谢谢马蹄铁。我确实试图通过插值来解决时间问题。你的代码给了我一些想法,我会尝试一下。对其他读者:不重采样真的不可能解决问题吗?
猜你喜欢
  • 2011-02-16
  • 2016-11-01
  • 2017-11-07
  • 2019-10-12
  • 2014-08-07
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多