關(guān)聯(lián)分析Apriori算法學(xué)習(xí)筆記-Python

小伙伴們汽煮,繼續(xù)一起學(xué)習(xí)機(jī)器學(xué)習(xí)算法啦,今天學(xué)習(xí)關(guān)聯(lián)分析、Apriori算法啦逗物!大家肯定很熟悉一個故事-沃爾瑪超市數(shù)據(jù)總結(jié)出的啤酒與尿布的相關(guān)性(知乎上也有牛人們在討論這個故事的真假)

圖1

來自《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》這本書里提到的一個例子搬卒,展示了如下的一個購物清單:

圖2

在上述購物交易單中發(fā)現(xiàn),{尿布翎卓,葡萄酒}出現(xiàn)的次數(shù)較多契邀,辣么,他們之間真的有木有關(guān)系呢失暴?這就需要關(guān)聯(lián)分析坯门。

關(guān)聯(lián)分析:在大規(guī)模數(shù)據(jù)集中尋找有趣關(guān)系的任務(wù)。這些關(guān)系可以有兩種形式:頻繁項(xiàng)集或者關(guān)聯(lián)規(guī)則逗扒。頻繁項(xiàng)集(frequent item sets)是指經(jīng)常出現(xiàn)在一起的物品的集合古戴,關(guān)聯(lián)關(guān)系(association rules)暗示兩種物品之間可能存在很強(qiáng)的關(guān)系。比如上面的{尿布矩肩,葡萄酒}就頻繁出現(xiàn)现恼,他們之間可能存在一些關(guān)系,辣么黍檩,如何來確定是否是頻繁項(xiàng)集呢叉袍?主要是依靠支持度和可信度。

一個項(xiàng)集的支持度(support)被定義為數(shù)據(jù)集中包含該項(xiàng)集的記錄所占的比例刽酱。比如喳逛,圖2中{豆奶}的支持度為4/5。支持度是針對項(xiàng)集來說的棵里,因此可以定義一個最小支持度润文,而只保留滿足最小支持度的項(xiàng)集。可信度或置信度(confidence)是針對一條諸如{尿布}->{葡萄酒}的關(guān)聯(lián)關(guān)系來定義的殿怜。這條規(guī)則的可信度被定義為“支持度({尿布典蝌,葡萄酒})/支持度({尿布})”

可是,如何計算一個集合中的頻繁項(xiàng)集的支持度稳捆,首先需要遍歷全部可能的項(xiàng)集赠法,比如針對一個包含了4個產(chǎn)品的集合麦轰,那么購買該集合產(chǎn)品的可能集合數(shù)目為2^4-1=15乔夯,而針對包含N項(xiàng)的集合,就需要遍歷2^N-1款侵。顯然末荐,這樣的計算量很大。因此新锈,出現(xiàn)了Apriori原理甲脏。

Apriori原理:如果某個項(xiàng)集是頻繁的,那么它的所有子集也是頻繁的。該定理的逆反定理為:如果某一個項(xiàng)集是非頻繁的块请,那么它的所有超集(包含該集合的集合)也是非頻繁的娜氏。Apriori原理的出現(xiàn),可以在得知某些項(xiàng)集是非頻繁之后墩新,不需要計算該集合的超集贸弥,有效地避免項(xiàng)集數(shù)目的指數(shù)增長,從而在合理時間內(nèi)計算出頻繁項(xiàng)集海渊。

Apriori算法實(shí)現(xiàn):Apriori算法是發(fā)現(xiàn)頻繁項(xiàng)集的一種方法绵疲。Apriori算法的兩個輸入?yún)?shù)分別是最小支持度和數(shù)據(jù)集。該算法首先會生成所有單個物品的項(xiàng)集列表->接著掃描交易記錄來查看哪些項(xiàng)集滿足最小支持度要求臣疑,其中不滿足最小支持度的集合會被去掉->然后對剩下的集合進(jìn)行組合以生成包含兩個數(shù)據(jù)集的項(xiàng)集->接著重新掃描交易記錄盔憨,去掉不滿足最小支持度的項(xiàng)集->該過程重復(fù)進(jìn)行直到所有項(xiàng)集都被濾掉。

Apriori算法Python編程

1)準(zhǔn)備數(shù)據(jù)

圖3

在圖2中提到的createC1()函數(shù)中的C1指的是最原始的待選項(xiàng)集讯沈,也就是所有單個物品的項(xiàng)集列表郁岩;為什么這里將C1轉(zhuǎn)換為frozenset,而不是一般額set呢缺狠,簡單解釋:

set無序排序且不重復(fù)驯用,是可變的,有add()儒老,remove()等方法蝴乔。既然是可變的,所以它不存在哈希值驮樊∞闭基本功能包括關(guān)系測試和消除重復(fù)元素. 集合對象還支持union(聯(lián)合), intersection(交集), difference(差集)和sysmmetric difference(對稱差集)等數(shù)學(xué)運(yùn)算。sets 支持 x in set, len(set),和 for x in set 囚衔。作為一個無序的集合挖腰,sets不記錄元素位置或者插入點(diǎn)。因此练湿,sets不支持 indexing, 或其它類序列的操作猴仑。

frozenset是凍結(jié)的集合,它是不可變的肥哎,存在哈希值辽俗,好處是它可以作為字典的key,也可以作為其它集合的元素篡诽。缺點(diǎn)是一旦創(chuàng)建便不能更改崖飘,沒有add,remove方法杈女。詳情見set與frozenset

2)過濾函數(shù):根據(jù)待選項(xiàng)集Ck的情況朱浴,判斷數(shù)據(jù)集D中Ck元素的出現(xiàn)頻率吊圾,過濾掉低于最低支持度的項(xiàng)集。

圖4

3)當(dāng)待選項(xiàng)集不是單個元素時翰蠢,比如K>=2的情況下项乒,合并元素時容易出現(xiàn)出現(xiàn)重復(fù),因此針對包含K個元素的頻繁項(xiàng)集梁沧,對比每個頻繁項(xiàng)集第K-2位是否一致板丽。詳情如下:

圖5
圖6

4)Apriori算法核心

圖7

基于上述算法,仿真得到趁尼,不同的最小支持度得到的頻繁項(xiàng)集是不同的埃碱。

當(dāng)minSupport=0.5時,得到的頻繁項(xiàng)集是:[[frozenset([1]), frozenset([3]), frozenset([2]), frozenset([5])], [frozenset([1, 3]), frozenset([2, 5]), frozenset([2, 3]), frozenset([3, 5])], [frozenset([2, 3, 5])], []]

當(dāng)minSupport=0.7時酥泞,得到的頻繁項(xiàng)集是:[[frozenset([3]), frozenset([2]), frozenset([5])], [frozenset([2, 5])], []]砚殿;

實(shí)際每個項(xiàng)集的支持度為:{frozenset([5]): 0.75, frozenset([3]): 0.75, frozenset([3, 5]): 0.5, frozenset([4]): 0.25, frozenset([2, 3]): 0.5, frozenset([2, 5]): 0.75, frozenset([1]): 0.5, frozenset([2]): 0.75}

基于Apriori算法,從頻繁項(xiàng)集挖掘關(guān)聯(lián)規(guī)則

基于Apriori算法可以獲得頻繁項(xiàng)芝囤,基于這些頻繁項(xiàng)集可以產(chǎn)生很多關(guān)聯(lián)規(guī)則似炎。如果能夠減少規(guī)則數(shù)目來確保問題的可解性,可以較大的減少計算復(fù)雜度悯姊。易知羡藐,如果某條規(guī)則不滿足最小可信度要求,那么該規(guī)則的所有子集也不會滿足最小可信度要求悯许。利用關(guān)聯(lián)規(guī)則的上述性質(zhì)仆嗦,基于Apriori算法,首先從一個頻繁項(xiàng)集開始先壕,接著創(chuàng)建一個規(guī)則列表瘩扼,其中規(guī)則右部只包含一個元素,垃僚,然后對這些規(guī)則進(jìn)行測試集绰。接下來合并所有的剩余規(guī)則列表來創(chuàng)建一個新的規(guī)則列表,其中規(guī)則右部包含兩個元素谆棺。這種方法稱作分級法栽燕。

圖8
圖9 針對圖8張函數(shù)說明

好噠,關(guān)于Apriori算法的初步學(xué)習(xí)基本到這里改淑,希望對大家有用碍岔,歡迎大牛不吝賜教哈,各位朋友溅固,晚安付秕、早安啦~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兰珍,一起剝皮案震驚了整個濱河市侍郭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖亮元,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猛计,死亡現(xiàn)場離奇詭異,居然都是意外死亡爆捞,警方通過查閱死者的電腦和手機(jī)奉瘤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煮甥,“玉大人盗温,你說我怎么就攤上這事〕芍猓” “怎么了卖局?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長双霍。 經(jīng)常有香客問我砚偶,道長,這世上最難降的妖魔是什么洒闸? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任染坯,我火速辦了婚禮,結(jié)果婚禮上丘逸,老公的妹妹穿的比我還像新娘单鹿。我一直安慰自己,他們只是感情好深纲,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布羞反。 她就那樣靜靜地躺著,像睡著了一般囤萤。 火紅的嫁衣襯著肌膚如雪昼窗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天涛舍,我揣著相機(jī)與錄音澄惊,去河邊找鬼。 笑死富雅,一個胖子當(dāng)著我的面吹牛掸驱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播没佑,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼毕贼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛤奢?” 一聲冷哼從身側(cè)響起鬼癣,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤陶贼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后待秃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拜秧,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年章郁,在試婚紗的時候發(fā)現(xiàn)自己被綠了枉氮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡暖庄,死狀恐怖聊替,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情培廓,我是刑警寧澤佃牛,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站医舆,受9級特大地震影響俘侠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔬将,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一爷速、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霞怀,春花似錦惫东、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至徐矩,卻和暖如春滞时,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滤灯。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工坪稽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鳞骤。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓窒百,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豫尽。 傳聞我的和親對象是個殘疾皇子篙梢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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