如何为数据流挖掘制作滑动窗口模型?

时间:2010-06-01 05:44:33

标签: matlab plot scroll sliding-window data-stream

我们有一种情况是流(来自传感器的数据或服务器上的点击流数据)带有滑动窗口算法,我们必须将最后(比方说)500个数据样本存储在内存中。然后使用这些样本来创建直方图,聚合和组合。捕获有关输入数据流中异常的信息。

请告诉我如何制作这样的滑动窗口。

1 个答案:

答案 0 :(得分:4)

如果您正在询问如何以滑动窗口的方式存储和维护这些值,请考虑这个简单的示例,该示例跟踪某些随机数据流的最后10个值的运行平均值:

WINDOW_SIZE = 10;
x = nan(WINDOW_SIZE,1);

%# init
counter = 0;
stats = [NaN NaN];                    %# previous/current value

%# prepare figure
SHOW_LIM = 200;
hAx = axes('XLim',[1 SHOW_LIM], 'YLim',[200 800]);
hLine = line('XData',1, 'YData',nan, 'EraseMode','none', ...
    'Parent',hAx, 'Color','b', 'LineWidth',2);

%# infinite loop!
while true
   val = randi([1 1000]);            %# get new value from data stream
   x = [ x(2:end) ; val ];           %# add to window in a cyclic manner
   counter = counter + 1;

   %# do something interesting with x
   stats(1) = stats(2);              %# keep track of the previous mean
   stats(2) = nanmean(x);            %# update the current mean

   %# show and update plot
   set(hLine, 'XData',[counter-1 counter], 'YData',[stats(1) stats(2)])
   if rem(counter,SHOW_LIM)==0
      %# show only the last couple of means
      set(hAx, 'XLim', [counter counter+SHOW_LIM]);
   end
   drawnow
   pause(0.02)
   if ~ishandle(hAx), break, end     %# break in case you close the figure
end

animation


更新

EraseMode=none property在最近的版本中已弃用并已删除。使用animatedline功能代替类似的功能。