Что такое подсчет с потерями? - PullRequest
14 голосов
/ 07 ноября 2011

Может кто-нибудь объяснить мне алгоритм подсчета потерь? Это потоковый алгоритм для определения частоты элементов в потоке. Спасибо.

Ответы [ 2 ]

42 голосов
/ 07 ноября 2011

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

При подсчете с потерями вы периодически удаляете элементы с очень малым количеством из таблицы. Профили, к которым чаще всего обращаются, почти никогда не будут иметь низкое количество, и если они это сделают, они вряд ли останутся там надолго.

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

Наиболее часто посещаемые профили попадут на ваш счет и останутся там. Любые профили, которые не попадают очень часто, упадут до нуля через несколько блоков, и вам больше не придется их отслеживать.

Обратите внимание, что окончательные результаты зависят от порядка, придавая больший вес подсчетам, обработанным последним. В некоторых случаях это имеет смысл и является преимуществом, а не недостатком. (Если вы хотите узнать, какие профили наиболее популярны в настоящее время , вы хотите оценить доступы сегодня больше, чем доступы в прошлом месяце.)

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

6 голосов
/ 23 июля 2015

Вы можете найти объяснение того, как работает Lossy Counting (и Sticky Sampling) в этом сообщении в блоге и версия с открытым исходным кодом здесь .

Наиболеечасто просматриваемые предметы «выживают».Учитывая порог частоты f, погрешность частоты e и общее количество элементов N, выходной сигнал можно выразить следующим образом: элементы с числом, превышающим fN - eN.

В худшем случае нам нужно (1 / e) *log (eN) счетчики.

Например, мы можем распечатать страницы Facebook людей, которые получили более 20%, с порогом ошибки 2% (эмпирическое правило: ошибка = 10% отпорог частоты).

Для частоты f = 20%, e = 2% будут выводиться все элементы с истинной частотой, превышающей f = 20% - ложных отрицательных значений нет.Но мы недооцениваем.Выходная частота элемента может быть меньше его истинной частоты не более чем на 2%.Ложные срабатывания могут появляться с частотой от 18% до 20%.Наконец, не будет выводиться ни один элемент с частотой менее 18%.

При заданном окне размера 1 / e выполняются следующие гарантии:

  • Частоты недооценены не более чем на e *N
  • Нет ложных отрицаний
  • Ложные положительные значения имеют истинную частоту не менее f N - e N
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...