在流数据上计算TSS

问题描述

TSS的计算方式为MDToolbar,可以很容易地计算出是否容易获得所有数据。但就我而言,数据一直在不断流传输,因此我需要计算此数据上的移动TSS。例如,假设整个数据为(x - mean) **2 。但是这些数据是成批流的,就像这样:

x=np.array([1,2,3,4,5,6,7,8,9,10])

在这种情况下如何计算移动TSS?任何合乎逻辑的解释以及解决方案将受到高度赞赏

解决方法

TSS可以分为两个术语,每个术语都可以轻松地递增计算:

TSS = sum [(X-sum [X] / N) 2 ]

= sum [X 2 -2X * sum [X] / N + sum [X] 2 / N 2 ] >

= sum [X 2 ]-2sum [X] 2 / N + sum [X] 2 / N

= sum [X 2 ]-sum [X] 2 / N

您只需要维护X和X 2 的运行总计,以及到目前为止您已经看到的样本数N。

,

您可以在每个步骤中将每个批次添加到累积数组中:

cum_array = numpy.concatenate((cum_array,batch))

然后将TSS计算为:

tss = (cum_array - numpy.mean(cum_array))**2

每次都会重写TSS数组。如果您只是想添加新计算的值,则需要类似以下内容的

cum_array = numpy.concatenate((cum_array,batch))
tss = numpy.concatenate((tss,numpy.zeros_like(batch)))
tss[-batch_len:] = (cum_array[-batch_len:] - numpy.mean(cum_array))**2

编辑:如果您只想在每批末尾输入TSS值,则可以执行以下操作:

running_total += numpy.sum(batch)
N += len(batch)
tss = (batch[-1] - running_total/N)**2