расчетная дисперсия и стандартное отклонение в одном разборе

У меня есть очень большой файл сетевой трассировки с двумя временными метками для каждого пакета. Я вычисляю разницу между временными метками для каждой пары последовательных пакетов.

delta_ts1 = ts1(packet N) - ts1(packet N-1)
delta_ts2 = ts2(packet N) - ts2(packet N-1)

Предположим, что ts_2 является эталонным значением, и я хочу протестировать ts_1 против ts_2.

И дисперсия ts_variance = (delta_ts2 - mean_ts)^2/packet_count

Теперь проблема с вышеуказанным подходом заключается в том, что я не получаю среднее значение, пока не дойду до конца файла. Я хочу добиться этого за один разбор. Я думаю об использовании подхода, как показано ниже

running_mean_till_now += ts2/packet_count_till_now

ts_variance = (delta_ts2 - running_mean_till_now)^2/packet_count_till_now

Такой подход приемлем? Насколько точными будут расчетная дисперсия и, следовательно, стандартное отклонение при использовании этого подхода?


person liv2hak    schedule 09.09.2013    source источник
comment
Вы можете рассчитать среднее значение в любое время на основе данных, доступных на тот момент. Приемлемо ли это, зависит от того, соответствует ли оно вашим требованиям. Точность среднего значения и дисперсии поначалу будет менее точной, но уже после нескольких выборок вы, вероятно, начнете получать стабильные значения — если только в данных нет сетевой проблемы, которая искажает значения. Возможно, вы захотите рассмотреть скользящее среднее N элементов (и дисперсию).   -  person Jonathan Leffler    schedule 09.09.2013


Ответы (2)


Формула не совсем верная. Здесь у вас есть описание онлайн-алгоритма, который вы можете использовать.

person Mihai Maruseac    schedule 09.09.2013

Прежде всего, не проводя никаких исследований, я могу сказать, что можно вычислить скользящее среднее для ряда чисел. БЕЗ необходимости каждый раз сканировать серию.

Основная идея заключается в том, что у вас есть среднее значение четырех чисел (2,3,4,1 означает = 10/4). Теперь ваш код считывает пятое число (скажем, 5). Теперь вычислите новое среднее значение как (10/4 * 4 + 5)/5 = 3.

Теперь, когда вы читаете шестое число, следующее новое среднее значение равно (15 + 9)/6 = 4.

Ссылка, предоставленная Mihai Maruseac, показывает символические вычисления, лежащие в основе этого примера, и показывает, как вычислить «работающий» (онлайн) std dev.

person JackCColeman    schedule 09.09.2013