Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > отклонение от среднего арифметического


Автор: KOLANICH 24.10.2011, 00:09
как посчитать  отклонение от среднего арифметического не храня все значения
то есть есть поток из n значений (сначала поступает первое, затем второе, затем - третье и тд, но количество их заранее известно)
нужно вычислить для каждого значения отклонение от среднего арифметического, возвести в квадрат и просуммировать
сохранять все, а потом считать нельзя - их может быть ОЧЕНЬ МНОГО, памяти может не хватить
также должна соблюдаться точность

Автор: ksnk 24.10.2011, 00:19
Цитата(KOLANICH @  24.10.2011,  00:09 Найти цитируемый пост)
нужно вычислить для каждого значения отклонение от среднего арифметического ...  а потом считать нельзя -

а каким образом предлагается узнать среднее арифметическое для первого элемента потока? smile

Само среднее арифметическое несложно считать на лету, просто храня сумму всего потока и считая количество элементов потока.


Автор: sQu1rr 24.10.2011, 01:05
Цитата(KOLANICH @  24.10.2011,  00:09 Найти цитируемый пост)
нужно вычислить для каждого значения отклонение от среднего арифметического, возвести в квадрат и просуммировать

дисперсию считаете?


Цитата(KOLANICH @  24.10.2011,  00:09 Найти цитируемый пост)
как посчитать  отклонение от среднего арифметического не храня все значения

Помоему никак smile Как минимум 2 раза прогнать иначе придется, 1й раз дня вычесления среднего арифметического, второй раз для нахождения отклонения

Автор: Earnest 24.10.2011, 06:58
Цитата(sQu1rr @  24.10.2011,  02:05 Найти цитируемый пост)
Помоему никак

Из формулы-определения дисперсии D = 1/N*Sum ((Di - M)^2) легко выводится другая:  D = 1/N*Sum (Di^2) - M^2,
где Di - i-й элемент, M - среднее. Таким образом, если хранить 3 величины (сумму элементов, сумму их квадратов и количество), дисперсию можно считать на лету.

Автор: Akina 24.10.2011, 11:20
Цитата(ksnk @  24.10.2011,  01:19 Найти цитируемый пост)
каким образом предлагается узнать среднее арифметическое для первого элемента потока?

Среднее арифметическое для множества из одного элемента равно значению этого единственного элемента. Очевидно же. А отклонение в этом случае - нулевое.


Автор: sQu1rr 24.10.2011, 12:06
Цитата(Akina @  24.10.2011,  11:20 Найти цитируемый пост)
Среднее арифметическое для множества из одного элемента равно значению этого единственного элемента. Очевидно же. А отклонение в этом случае - нулевое.

В дисперсии отклонение считается от среднего арифметического всего потока а не множества пройденных элементов

Автор: Akina 24.10.2011, 12:32
Цитата(sQu1rr @  24.10.2011,  13:06 Найти цитируемый пост)
В дисперсии отклонение считается от среднего арифметического всего потока а не множества пройденных элементов 

Правильно. Но не всего потока, который теоретически пройдёт через счётный механизм, а того, который УЖЕ прошёл. А если на данный момент прошёл только один элемент - то дисперсия считается для потока из 1 элемента. Когда поступит второй - она будет считаться для потока из 2 элементов... и так далее, пока не будет принят весь объём данных - и только тогда будет получено окончательное, а не промежуточное, значение.

Цитата(Earnest @  24.10.2011,  07:58 Найти цитируемый пост)
D = 1/N*Sum ((Di - M)^2) легко выводится другая:  D = 1/N*Sum (Di^2) - M^2, где Di - i-й элемент, M - среднее

 smile А не затруднит продемонстрировать это самое "легко выводится"? 

Автор: Earnest 24.10.2011, 12:57
Цитата(Akina @  24.10.2011,  13:32 Найти цитируемый пост)
А не затруднит продемонстрировать это самое "легко выводится"? 

Подставь M в первую формулу, раскрой скобки и т.д. Это известная формула из теорвера или мат. статистики, уже не помню, где-то на втором курсе в приличном вузе должны проходить. 

Автор: Akina 24.10.2011, 13:15
Earnest, давай попробуем на примере.
N=3
D(1)=1
D(2)=2
D(3)=3
M=(1+2+3)/3=2
1/(N*Sum(Di-M)^2) = 1/3*((1-2)^2+(2-2)^2+(3-2)^2)=1/(3*2)=1/6
1/(N*Sum (Di^2)) - M^2 = 1/(3*(1^2+2^2+3^2)) - 2^2 = 1/(3*14) - 4 = ну ни разу не 1/6...

Может, ты имел в виду, что дисперсия равна разности квадрата матожидания и матожидания квадрата?

Автор: Earnest 24.10.2011, 13:31
Так и результат ни разу ни 1/6.
В первой формуле ты чего-то того:
сумма квадратов отклонений = 1/3 * ((1-2)^2 + (2-2)^2 + (3-2)^2) = 1/3 * (1+1) = 2/3. Как у тебя двойка в знаменатель попала, не пойму.
Цитата(Akina @  24.10.2011,  14:15 Найти цитируемый пост)
Может, ты имел в виду, что дисперсия равна разности квадрата матожидания и матожидания квадрата? 

А я разве не это написала?

Автор: Akina 24.10.2011, 14:45
Цитата(Earnest @  24.10.2011,  14:31 Найти цитируемый пост)
А я разве не это написала? 

Хм... и правда, если присмотреться... но пока поймёшь... милль пардон.

Автор: KOLANICH 24.10.2011, 18:02
всем спасибо
на другом форуме товарищ по никнейму val_nnm подсказал решение
user posted image

Автор: Akina 24.10.2011, 20:40
KOLANICH, Это абсолютно то же, что тебе сказала Earnest.

Автор: KOLANICH 24.10.2011, 22:47
DELETED

Автор: _Y_ 26.10.2011, 17:31
Цитата(Earnest @  24.10.2011,  06:58 Найти цитируемый пост)
если хранить 3 величины (сумму элементов, сумму их квадратов и количество), дисперсию можно считать на лету.

Но, надо понимать, дисперсия каждый раз будет считаться для выборки разной величины (увеличивающейся с каждым шагом на единицу). Впрочем, если в потоке данных нет дрифта (постепенного законопмерного изменения величин и/или закона их рассеяния), то где-то после 50-й точки все выйдет на более-менее достоверную постоянную величину. В других же случаях, похоже, без двух проходов через данные не обойтись.

ЗЫ: Помнится когда-то для чего-то подобного мы считали статистические характеристики не для всего потока, а только для последних N точек (штук 100-200 брали - с запасом, если правильно помню).

Автор: VictorTsaregorodtsev 28.10.2011, 15:46
_Y_, можно с экспоненциальным забыванием считать значения средней и дисперсии - в итоге получатся не "средние температуры по больнице" (как при счёте за 2 прохода), а более акцентированные на характеристиках последних точек результаты.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)