Что такое Lossy Counting?

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

Ответы

Ответ 1

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

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

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

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

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

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

Ответ 2

Вы можете найти объяснение того, как 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
  • Нет ложных негативов
  • Ложные срабатывания имеют истинную частоту не менее fN - eN