Насколько мне известно, разработка алгоритмов для решения проблемы 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 по-прежнему «современным» в частом анализе паттернов? Если нет, то какой алгоритм (ы) может более эффективно извлекать частые наборы элементов из больших наборов данных?
Ответы:
Современное состояние: используется на практике или работает в теории?
APRIORI используется повсеместно, кроме разработки новых часто используемых алгоритмов набора элементов. Это легко реализовать и легко использовать в самых разных областях. Вы найдете сотни реализаций APRIORI различного качества. И на самом деле легко ошибиться в APRIORI.
FPgrowth гораздо сложнее реализовать, но и гораздо интереснее. Таким образом, с академической точки зрения, каждый пытается улучшить рост FP - получить работу, основанную на принятом APRIORI, будет очень сложно.
Если у вас хорошая реализация, у каждого алгоритма есть хорошие и плохие, на мой взгляд. Хорошая реализация APRIORI будет только необходимо сканировать базу данных K раз , чтобы найти все часто встречающиеся наборы длину к . В частности, если ваши данные помещаются в основную память, это дешево. То, что может убить APRIORI, - это слишком много частых наборов из 2 предметов (в частности, когда вы не используете три и аналогичные методы ускорения и т. Д.). Лучше всего работает с большими данными с небольшим количеством частых наборов элементов.
Эклат работает на колоннах; но каждый столбец нужно читать гораздо чаще. Есть некоторые работы над diffsets, чтобы уменьшить эту работу. Если ваши данные не помещаются в основную память, Eclat страдает, вероятно, больше, чем Apriori. Пройдя сначала глубину, он также сможет вернуть первый интересный результат намного раньше, чем Apriori, и вы можете использовать эти результаты для настройки параметров; поэтому вам нужно меньше итераций, чтобы найти хорошие параметры. Но по замыслу он не может использовать обрезку так же аккуратно, как Apriori.
FPGrowth сжимает набор данных в дерево. Это работает лучше всего, когда у вас много дубликатов записей. Вы могли бы, вероятно, пожинать некоторые выгоды для Apriori и Eclat, если вы можете предварительно отсортировать данные и объединить дубликаты в взвешенные векторы. FPGrowth делает это на экстремальном уровне. Недостатком является то, что реализация намного сложнее; и как только это дерево больше не помещается в память, оно становится беспорядочным для реализации.
Что касается результатов и показателей - не доверяйте им. Есть так много вещей, которые нужно реализовать неправильно. Попробуйте 10 разных реализаций, и вы получите 10 очень разных результатов производительности. В частности, для APRIORI у меня сложилось впечатление, что большинство реализаций не работают в том смысле, что пропущены некоторые из основных вкладов APRIORI ... и тех, которые имеют эти части правильно, качество оптимизаций сильно различается.
На самом деле есть даже статьи о том, как эффективно реализовать эти алгоритмы:
Вы также можете прочитать эти опросы в этом домене:
источник
Большинство недавних подходов к частым шаблонам, которые я видел в литературе, основаны на оптимизации FPGrowth. Я должен признать, что я не видел много событий в литературе в FPM в течение многих лет.
В этом викибуке освещены многие варианты FPGrowth.
источник