0

Python でコーディングを試みるのはこれが初めてで、Apriori アルゴリズムを実装しています。私は 2-itemset まで生成しました。以下は、1-itemset のキーを組み合わせて 2-Itemsets を生成するために必要な関数です。

この関数をジェネリックにするにはどうすればよいですか? つまり、辞書のキーとタプルに必要な要素の数を渡すことにより、アルゴリズムはキーを使用して可能なすべての n-number(k+1) サブセットを生成する必要があります。セットのユニオンが可能であることは知っていますが、本質的に辞書のキーであるタプルのユニオンを行う方法はありますか?

# generate 2-itemset candidates by joining the 1-itemset candidates
def candidate_gen(keys):
    adict={}
    for i in keys:
        for j in keys:
            #if i != j and (j,i) not in adict:
            if j>i:
        #call join procedure which will generate f(k+1) keys
        #call has_infrequent_subset --> generates all possible k+1 itemsets and checks if k itemsets are present in f(k) keys
                adict[tuple([min(i,j),max(i,j)])] = 0
    return adict

たとえば、最初の辞書が次のようになっている場合: {key, value} --> 値は頻度です

{'382': 1163, '298': 560, '248': 1087, '458': 720, 
 '118': 509,  '723': 528, '390': 1288}

このディクショナリのキーを取得し、上記の候補_生成関数に渡します。これにより、2 項目セットのサブセットが生成され、キーが出力されます。次に、キーを関数に渡し、元のデータベースと比較して頻度を見つけ、次の出力を取得します。

{('390', '723'): 65, ('118', '298'): 20, ('298', '390'): 70, ('298', '458'): 35, 
 ('248', '382'): 88, ('248', '458'): 76, ('248', '723'): 26, ('382', '723'): 203,
 ('390', '458'): 33, ('118', '458'): 26, ('458', '723'): 26, ('248', '390'): 87,
 ('118', '248'): 54, ('298', '382'): 47, ('118', '723'): 41, ('382', '390'): 413,
 ('382', '458'): 57, ('248', '298'): 64, ('118', '382'): 40, ('298', '723'): 36, 
 ('118', '390'): 52}

上記のキーから 3 項目セットのサブセットを生成するにはどうすればよいですか。

4

2 に答える 2