Эффективно генерировать априори частые наборы элементов

#python #apriori #market-basket-analysis

#python #априори #анализ рыночной корзины

Вопрос:

Я пытаюсь эффективно генерировать частые наборы элементов, используя принцип Apriori. Моя текущая попытка — использовать комбинации из itertool, но она сгенерировала ненужное количество наборов элементов. Мне нужно следовать принципу Apriori при их генерации, т.е.

Если набор элементов встречается нечасто, то все его надмножества также должны быть нечастыми.

Моя текущая попытка очень неэффективна.

 import itertools as it
def generateItemsets(Lk,k):

    comb = sum(Lk.keys(), tuple())
    Ck = set(it.combinations(comb, k))
    return Ck
 

Комментарии:

1. Я много думал и тоже сделал некоторый код. Оказалось, что вашу задачу довольно сложно сделать эффективной на чистом Python или Numpy, для этого требуется много кодирования. Если необходимо решить общий случай, когда нам предоставляется любой входной набор наборов L. Для случая, если нам нужно просто создать все комбинации, это решается очень легко, и ваш код делает это уже довольно эффективно, я бы просто предложил использовать set(comb) вместо comb , потому что, если comb имеет много дубликатов, тогда itertools будетгенерируйте много повторяющихся комбинаций, что является основной причиной неэффективности.

Ответ №1:

вы могли бы рассмотреть FPGrowth / FPMax, руководство пользователя может вам помочь. К ВАШЕМУ сведению: http://rasbt.github.io/mlxtend/user_guide/frequent_patterns/fpmax /

Кроме того, может быть множество позиций одной позиции, например: магазины, в которых вы можете просто купить кока-колу или кофе. Вы можете рассмотреть что-то вроде добавления общего количества строк и использовать общее количество строк> 1, это позволит отсеять много незначительных данных.