Является ли FPGrowth по-прежнему «современным» в частом поиске паттернов?


12

Насколько мне известно, разработка алгоритмов для решения проблемы Frequen Pattern Mining (FPM), путь улучшения имеет несколько основных контрольных точек. Во-первых, алгоритм Apriori был предложен в 1993 году Agrawal et al. наряду с формализацией проблемы. Алгоритм был в состоянии убрать некоторые наборы из 2^n - 1наборов (powerset), используя решетку для поддержки данных. Недостатком подхода была необходимость перечитать базу данных, чтобы вычислить частоту каждого расширенного набора.

Позже, в 1997 году, Zaki et al. Предложен алгоритм Eclat , который вставляет результирующую частоту каждого набора внутри решетки. Это было сделано путем добавления в каждом узле решетки набора идентификаторов транзакций, которые имели элементы от корня до упомянутого узла. Основной вклад заключается в том, что не нужно перечитывать весь набор данных, чтобы узнать частоту каждого набора, но объем памяти, необходимой для построения такой структуры данных, может превышать размер самого набора данных.

В 2000 году Han et al. предложил алгоритм с именем FPGrowth вместе со структурой данных префиксного дерева с именем FPTree. Алгоритм был способен обеспечить значительное сжатие данных, а также обеспечить возможность получения только частых наборов элементов (без создания набора элементов-кандидатов). Это было сделано главным образом путем сортировки элементов каждой транзакции в порядке убывания, так что наиболее частыми являются элементы с наименьшим количеством повторений в древовидной структуре данных. Поскольку частота опускается только при обходе дерева в глубине, алгоритм может лишить-офф не-часто встречающихся наборов.

Редактировать :

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

Является ли алгоритм FPGrowth по-прежнему «современным» в частом анализе паттернов? Если нет, то какой алгоритм (ы) может более эффективно извлекать частые наборы элементов из больших наборов данных?


Этот пост был исследован и представлен хорошо. Это делает плохой вопрос для сайта сети SE, но это было бы хорошей темой для начала на дискуссионном форуме.
Air

@AirThomas Спасибо за предупреждение. Я попытался сохранить сообщение, составив из него правильный вопрос.
Рубенс

Ответы:


9

Современное состояние: используется на практике или работает в теории?

APRIORI используется повсеместно, кроме разработки новых часто используемых алгоритмов набора элементов. Это легко реализовать и легко использовать в самых разных областях. Вы найдете сотни реализаций APRIORI различного качества. И на самом деле легко ошибиться в APRIORI.

FPgrowth гораздо сложнее реализовать, но и гораздо интереснее. Таким образом, с академической точки зрения, каждый пытается улучшить рост FP - получить работу, основанную на принятом APRIORI, будет очень сложно.

Если у вас хорошая реализация, у каждого алгоритма есть хорошие и плохие, на мой взгляд. Хорошая реализация APRIORI будет только необходимо сканировать базу данных K раз , чтобы найти все часто встречающиеся наборы длину к . В частности, если ваши данные помещаются в основную память, это дешево. То, что может убить APRIORI, - это слишком много частых наборов из 2 предметов (в частности, когда вы не используете три и аналогичные методы ускорения и т. Д.). Лучше всего работает с большими данными с небольшим количеством частых наборов элементов.

Эклат работает на колоннах; но каждый столбец нужно читать гораздо чаще. Есть некоторые работы над diffsets, чтобы уменьшить эту работу. Если ваши данные не помещаются в основную память, Eclat страдает, вероятно, больше, чем Apriori. Пройдя сначала глубину, он также сможет вернуть первый интересный результат намного раньше, чем Apriori, и вы можете использовать эти результаты для настройки параметров; поэтому вам нужно меньше итераций, чтобы найти хорошие параметры. Но по замыслу он не может использовать обрезку так же аккуратно, как Apriori.

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

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

На самом деле есть даже статьи о том, как эффективно реализовать эти алгоритмы:

Эффективные реализации Apriori и Eclat.
Кристиан Боргельт.
Семинар по разработке горных изделий с частыми предметами (FIMI 2003, Мельбурн, Флорида, США).

Вы также можете прочитать эти опросы в этом домене:

  • Goethals, Барт. «Опрос по частым схемам майнинга». Университет Хельсинки (2003).

  • Ференц Бодон, Исследование по добыче частых предметов, Технический отчет, Будапештский технологический и экономический университет, 2006,

  • Частый набор предметов Майнинг
    Кристиан Боргельт
    Уайли Междисциплинарные обзоры: добыча данных и открытие знаний 2 (6): 437-456. 2012


2

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

В этом викибуке освещены многие варианты FPGrowth.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.