頻繁項(xiàng)集挖掘Apriori算法及其Python實(shí)現(xiàn)

Apriori算法是通過(guò)限制候選產(chǎn)生發(fā)現(xiàn)頻繁項(xiàng)集伪很。

Apriori算法使用一種稱為逐層搜索的迭代方法募舟,其中k項(xiàng)集用于探索(k+1)項(xiàng)集徘溢。首先,通過(guò)掃描數(shù)據(jù)庫(kù)砂轻,累計(jì)每個(gè)項(xiàng)的計(jì)數(shù)奔誓,并收集滿足最小支持度的項(xiàng),找出頻繁1項(xiàng)集的集合搔涝,記為L(zhǎng)1厨喂。然后,使用L1找出頻繁2項(xiàng)集的集合L2庄呈,使用L2找出L3蜕煌,如此下去,直到不能再找到頻繁k項(xiàng)集诬留。

為了提高頻繁項(xiàng)集逐層產(chǎn)生的效率斜纪,一種稱為先驗(yàn)性質(zhì)(Apriori property)的重要性質(zhì)用于壓縮搜索空間。

先驗(yàn)性質(zhì):頻繁項(xiàng)集的所有非空子集也一定是頻繁的文兑。

其實(shí)盒刚,算法的描述理解起來(lái)是困難的,有例子幫助理解最好不過(guò)绿贞。恩伪冰,盜圖一張。

20130609110737296.png

Python實(shí)現(xiàn):

我們的期望:

輸入:數(shù)據(jù)庫(kù)中數(shù)據(jù)和最小支持度
輸出:頻繁項(xiàng)集
例:
輸入:數(shù)據(jù)樟蠕,[['A','B','C','D'],['B','C','E'],['A','B','C','E'],['B','D','E'],['A','B','C','D']];最小支持度:0.7
輸出:[['B'], ['C'], ['B', 'C']]

寫(xiě)一個(gè)方法 def apriori(D, minSup)靠柑,參數(shù)D就是輸入的數(shù)據(jù)庫(kù)數(shù)據(jù)寨辩,minSup是最小支持度。

def apriori(D, minSup):
    
    '''頻繁項(xiàng)集用keys表示歼冰,
    key表示項(xiàng)集中的某一項(xiàng)靡狞,
    cutKeys表示經(jīng)過(guò)剪枝步的某k項(xiàng)集。
    C表示某k項(xiàng)集的每一項(xiàng)在事務(wù)數(shù)據(jù)庫(kù)D中的支持計(jì)數(shù)
    '''
    #先求出1項(xiàng)集的集合及其支持計(jì)數(shù)隔嫡,注意此處C1是字典甸怕,key為項(xiàng)集,value是計(jì)數(shù)腮恩,與下不同梢杭,下的C是列表只有計(jì)數(shù)
    C1 = {}
    for T in D:
        for I in T:
            if I in C1:
                C1[I] += 1
            else:
                C1[I] = 1

    _keys1 = C1.keys()

    #此處對(duì)keys的存儲(chǔ)格式進(jìn)行處理,為了方便后邊由此得出k+1項(xiàng)集的集合
    keys1 = []
    for i in _keys1:
        keys1.append([i])

    n = len(D)
    cutKeys1 = []
    #對(duì)keys1(1項(xiàng)集)進(jìn)行剪枝步
    for k in keys1[:]:
        if C1[k[0]]*1.0/n >= minSup:
            cutKeys1.append(k)
    
    cutKeys1.sort()

總之秸滴,對(duì)于1項(xiàng)集要進(jìn)行特殊處理武契,然后再用迭代的方法求k+1項(xiàng)集。
好,迭代來(lái)了:

    all_keys = []
    while keys != []:
        C = getC(D, keys)
        cutKeys = getCutKeys(keys, C, minSup, D)
        for key in cutKeys:
            all_keys.append(key)
        keys = aproiri_gen(cutKeys)

    return all_keys

注意咒唆,all_keys是全局變量届垫,存儲(chǔ)所有通過(guò)剪枝步的k項(xiàng)集。
函數(shù)getC(D, keys)是對(duì)keys中的每一個(gè)key進(jìn)行計(jì)數(shù)全释,函數(shù)getCutKeys(keys, C, minSup, D)是剪枝步的實(shí)現(xiàn)装处,函數(shù)aproiri_gen(cutKeys)是由k項(xiàng)集獲得k+1項(xiàng)集(連接步)。

這樣浸船,算法Apriori就實(shí)現(xiàn)了妄迁,輸入輸出試一下:

D = [['A','B','C','D'],['B','C','E'],['A','B','C','E'],['B','D','E'],['A','B','C','D']]
F = apriori(D, 0.7)
print '\nfrequent itemset:\n', F

屏幕快照 2015-05-26 下午5.35.16.png

把最小支持度改成0.5試試:
屏幕快照 2015-05-26 下午5.36.39.png

恩,沒(méi)有問(wèn)題糟袁。

完整代碼見(jiàn):https://github.com/youthpasses/apriori

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末判族,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子项戴,更是在濱河造成了極大的恐慌形帮,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件周叮,死亡現(xiàn)場(chǎng)離奇詭異辩撑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)仿耽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)合冀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人项贺,你說(shuō)我怎么就攤上這事君躺。” “怎么了开缎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵棕叫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我奕删,道長(zhǎng)俺泣,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任完残,我火速辦了婚禮伏钠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谨设。我一直安慰自己熟掂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布铝宵。 她就那樣靜靜地躺著打掘,像睡著了一般华畏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尊蚁,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天亡笑,我揣著相機(jī)與錄音,去河邊找鬼横朋。 笑死仑乌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琴锭。 我是一名探鬼主播晰甚,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼决帖!你這毒婦竟也來(lái)了厕九?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤地回,失蹤者是張志新(化名)和其女友劉穎扁远,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體刻像,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畅买,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了细睡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谷羞。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溜徙,靈堂內(nèi)的尸體忽然破棺而出湃缎,到底是詐尸還是另有隱情,我是刑警寧澤蠢壹,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布雁歌,位于F島的核電站,受9級(jí)特大地震影響知残,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜比庄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一求妹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳窑,春花似錦制恍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)何吝。三九已至,卻和暖如春鹃唯,著一層夾襖步出監(jiān)牢的瞬間爱榕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工坡慌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留黔酥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓洪橘,卻偏偏與公主長(zhǎng)得像跪者,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熄求,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容