機器學習實戰(15.2):Apriori算法示例

2021-02-19 機器辨識與互動研究組

Hello,大家好!我是MPIG2018級研究生高鴻宇。在前一章我們了解了Apriori算法。它可以通過尋找物品的不同組合,找到頻繁項以及頻繁項之間的關聯,今天為大家帶來的是Apriori算法的實際應用示例。我們會通過一個從毒蘑菇中尋找相似特徵的示例來看Apriori算法是如何發現頻繁項以及找到他們的關聯關係的。

關於本系列的往期內容請戳👇:

機器學習實戰(1):k-近鄰算法(上)

機器學習實戰(2):K-近鄰算法(2)

機器學習實戰(3):決策樹

機器學習實戰(4):決策樹(下)
機器學習實戰(5):樸素貝葉斯(上)
機器學習實戰(6):樸素貝葉斯(下)
機器學習實戰(7):logistic 回歸
機器學習實戰(8):支持向量機(上)
機器學習實戰(9):支持向量機(下)
機器學習實戰(10):Adaboost元算法(上)

機器學習實戰(11):AdaBoost元算法(下)

機器學習實戰(12) : 預測數值型數據:回歸

機器學習實戰(13) : 樹回歸

機器學習實戰(14.1):K均值聚類

機器學習實戰(14.2):二分K-均值算法

機器學習實戰(14.3):對地理位置進行聚類

機器學習實戰(15.1):Apriori算法

首先我們看下本章主要內容:

1.Apriori算法回顧

2.使用Apriori算法來解決實際問題——從毒蘑菇中找到相似特徵

3.尋找毒蘑菇相關特徵的Python代碼


一.  Apriori算法回顧

1.Apriori算法的實際意義

「啤酒與尿布」的例子相信很多人都聽說過吧,故事是這樣的:在一家超市中,人們發現了一個特別有趣的現象,尿布與啤酒這兩種風馬牛不相及的商品居然擺在一起。但這一奇怪的舉措居然使尿布和啤酒的銷量大幅增加了。這可不是一個笑話,而是一直被商家所津津樂道的發生在美國沃爾瑪連鎖超市的真實案例。原來,美國的婦女通常在家照顧孩子,所以她們經常會囑咐丈夫在下班回家的路上為孩子買尿布,而丈夫在買尿布的同時又會順手購買自己愛喝的啤酒。如何從浩如煙海卻又雜亂無章的數據中,發現啤酒和尿布銷售之間的聯繫呢?這種從大規模的數據中發現物品間隱含關係的方法被稱為關聯分析,Apriori算法是最著名的關聯規則挖掘算法之一。

2.Apriori算法內容

在海量的數據中做關聯分析,從而找到頻繁項集和關聯規則。

頻繁項集:經常出現在一起的物品的集合。

關聯規則:暗示頻繁項集物品之間可能存在的關聯。

3.Apriori算法的過程:

(1)   收集數據

(2)   使用 Apriori 算法來找到頻繁項集

(3)   用於發現頻繁項集中物品之間的關聯規則 

二.  使用Apriori算法來解決實際問題——從毒蘑菇中找到相似特徵

當我們只對包含某個特定元素項的項集感興趣的時候,我們可以不用尋找所有的頻繁項集。今天這個示例就是用來尋找毒蘑菇的一些公共特徵。在這個數據集中我們用每個數字代表蘑菇的每個特徵。

為了尋找蘑菇的公共特徵,我們可以用Apriori算法來尋找包含特徵值為2的頻繁項集。再利用找到的頻繁項集挖掘關聯規則。

三.尋找毒蘑菇相關特徵的Python代碼

1.讀取蘑菇數據集

DataSet = [line.split() for line in open('mushroom.dat').readlines()]

2.在得到候選項集C1與包含支持度的頻繁項集D1後再定義一個頻繁項集D,使裡面只包含具有特徵『2』的支持度。

def createC1(dataSet):

   C1 = []

   for transaction in dataSet:

       for item in transaction:

           if not [item] in C1:

               C1.append([item])

   C1.sort()

   C1 = [frozenset(i) for i in C1]

   return  C1

def scanD_1(dataSet, Ck, minSupport):

   ssCnt = {}

   numItems = float(len( list(map(set, dataSet))))

   D = map(set, dataSet)

   for tid in D:

       for can in Ck:

           if can.issubset(tid):

               if can not in ssCnt:

                   ssCnt[can] = 1

               else:

                   ssCnt[can] += 1

   rList = []

   sData = {}

   for key in ssCnt:

       support = ssCnt[key] / numItems

       sData[key] = support

       if support >= minSupport:

           rList.insert(0, key)

       #sData[key] = support

   return rList, sData

def scanD(dataSet, Ck, minSupport):

   ssCnt = {}

   numItems = float(len( list(map(set, dataSet))))

   D = map(set, dataSet)

   for tid in D:

       for can in Ck:

           if can.issubset(tid):

               if can not in ssCnt:

                   ssCnt[can] = 1

               else:

                   ssCnt[can] += 1

   retList = []

   Lk = []

   supportData = {}

   for key in ssCnt:

       support = ssCnt[key] / numItems

       supportData[key] = support

       if support >= minSupport:

           Lk.insert(0,key)

           if key.intersection('2'):

               retList.insert(0, key)

       #supportData[key] = support

   return retList,Lk, supportData


3.在得到符合支持度的頻繁項集後再重新定義候選項集使它只有包含『2』的頻繁項。

def getC1(L1):

   List = []

   for item in L1:

       if item.intersection('2'):

           List.append(item)

   return List

4.設定支持度閾值為0.45,可信度閾值為0.8。輸出頻繁項集,並將得到的頻繁項集list與支持度列表supportDate帶入關聯關係代碼。輸出符合可信度的關聯規則。

List , supportDate = apriori(DataSet ,0.45)

generateRules(List,supportDate,0.8)

print('頻繁項集:',List)

def calcConf(freqSet, H, supportData, brl, minConf):

   prunedH = []

   for conseq in H:

       conf = supportData[freqSet]/supportData[freqSet-conseq]

       if conf >= minConf:

           print(freqSet-conseq,'-->',conseq,'conf:',conf)

           brl.append((freqSet-conseq, conseq, conf))

           prunedH.append(conseq)

   return prunedH

5.運行結果

可看到『2『關聯『34』的可信度為0.95,關聯『85』的可信度為1.0

因為數據量龐大,下面為部分結果展示

可更改支持度與可信度閾值,來篩選更符合需求的關聯規則。

想要更加詳細了解本講更多細節的內容嗎?那就一起來觀看下面的 Presentation的具體講解吧:


Github代碼下載連結

https://github.com/MPIG-Robot/Machine-Learning-in-Action

百度雲盤presentation下載連結:

https://pan.baidu.com/s/1obxLBtUmMUzkL1HZ7JG6qA

百度雲盤視頻下載連結:

https://pan.baidu.com/s/1dtC17AE9otGvWVliNnDwSw

騰訊視頻下載連結:

https://v.qq.com/x/page/b0801xf3bql.html

另外,你還可以在騰訊視頻客戶端中搜索「機器學習實戰(15.2)Apriori算法示例「找到本視頻,也可以直接搜索MPIG Open Seminar頻道找到本視頻,這樣你可以痛快地將本視頻離線了!

有疑問?沒關係呀、趕緊聯繫我吧!我的團隊郵箱: ghy@mpig.com.cn 期待跟大家一起交流,共同討論!

什麼是MPIG Open Seminar?

這是Machine Perception and Interaction Group定期開展的內部學術交流會,開放開源,視頻會同時發布在優酷和騰訊視頻上,文稿公開分享在百度雲,如果有對應代碼會開源在github上。如果你在上海,想親臨現場,或想投稿,那請後臺留言或發郵件給szl@mpig.com.cn 期待與你交流,歡迎訪問www.mpig.com.cn獲取更多團隊信息。

歡迎關注MPIG公眾號可查找 mpig_robot

也可長按下面的二維碼關注,這裡有各種關於機器學習和機器人的乾貨知識:

相關焦點

  • 《機器學習實戰》中英文電子書、源碼分享
    《機器學習實戰》主要有 以下4 個優點:不調包,從0寫起實現主流機器學習算法;所有代碼基於Python 3;實例詳細分解,逐步指導使用算法跑出模型;實戰與理論交叉,通過實戰加深理論知識; · · · · · ·內容簡介  · · · · · ·《機器學習實戰》第一部分主要介紹機器學習基礎,以及如何利用算法進行分類,並逐步介紹了多種經典的監督學習算法,如k近鄰算法、樸素貝葉斯算法、Logistic回歸算法、支持向量機、AdaBoost集成方法、基於樹的回歸算法和分類回歸樹(CART)算法等。
  • 機器學習實戰 中英文版 PDF 高清電子書
    《機器學習實戰》內容簡介:機器學習是人工智慧研究領域中的一個極其重要的方向。在現今大數據時代的背景下,捕獲數據並從中萃取有價值的信息或模式,使得這一過去為分析師與數學家所專屬的研究領域越來越為人們矚目。《機器學習實戰》通過精心編排的實例,切入日常工作任務,摒棄學術化語言,利用高效可復用的Python代碼闡釋如何處理統計數據,進行數據分析及可視化。
  • 機器學習 關聯規則(Apriori)及實例解析
    這就歸功於關聯規則(Apriori)算法了。今天小編給大家介紹關聯規則算法的原理及使用實例。關聯規則就是發現存在於大量數據集中的關聯性或相關性,從而描述了一個事物中某些屬性同時出現的規律和模式。由關聯規則作出的推論並不必然蘊涵因果關係。它只表示規則前件和後件中的項明顯地同時出現。
  • 【下載】《機器學習》+《機器學習實戰》
    目錄:全書共16 章,大致分為3 個部分:第1 部分(第1~3 章)介紹機器學習的基礎知識;第2 部分(第4~10 章)討論一些經典而常用的機器學習方法(決策樹、神經網絡、支持向量機、貝葉斯分類器2.機器學習實戰
  • 關聯規則R語言實戰(Apriori算法)
    1.3Apriori算法理論  在了解了關聯規則的三個度的基本定義之後,下一步則需要闡述清楚Apriori算法的基本定義。  在講Apripri算法之前,我們首先要清楚兩個概念:  1)設定最小支持度的閾值,如果一個項集的支持度大於等於最小支持度,則其為頻繁項集,如果一個項集的支持度小於最小支持度,則其為非頻繁項集。
  • 機器學習實戰之KNN算法
    本系列教程為《機器學習實戰首先,講講寫本系列教程的原因:第一,《機器學習實戰》的代碼由Python2編寫,有些代碼在Python3上運行已會報錯,本教程基於Python3進行代碼的修訂;第二:之前看了一些機器學習的書籍,沒有進行記錄,很快就忘記掉了,通過編寫教程也是一種複習的過程;第三,機器學習相對於爬蟲和數據分析而言,學習難度更大,希望通過本系列文字教程,讓讀者在學習機器學習的路上少走彎路。
  • 機器學習實戰
    課程名稱:【深入學習《機器學習實戰》】課程簡介:以實驗驅動模式學習機器學習實戰教材《機器學習實戰》動手實戰,動手,實戰,你懂!每節實驗中都包含書籍的核心知識點梳理,並根據書中實例提供指導教程。教師及時回復同學的問題並每周進行實驗報告點評。學習者按照每周要求閱讀書中章節,在線完成書中示例(實驗環境會配置好並提供實例實現詳解和步驟指導)。這樣看書、動手相結合的方式看完這本《機器學習實戰》, 肯定是收穫大大的!
  • 【典型算法】Apriori
    其中arules用於管理規則的數位化生產,提供Apriori和Eclat兩種快速挖掘頻繁項集和關聯規則算法的現實函數;arulesViz作為arules的擴展包,提供了實用而新穎的關聯規則可視化技術,使得關聯分析從算法運行到結果呈現一體化。
  • Apriori算法詳解
    Apriori算法簡介Apriori算法是一種常用的用於挖掘出數據關聯規則(Association Rules)的算法,「apriori」在拉丁語中翻譯為「來自以前」,顧名思義,這個算法是使用先驗知識來預測數據的關聯規則。說到關聯規則,我們不得不提到一個經典案例——啤酒與尿布。
  • Python機器學習實戰 —— KNN算法詳解
    這個系列按照機器學習實戰的章節來寫,由於市面上已經有很多同類的文章,一般以介紹算法,貼代碼,舉例子為主,個人讀下來,覺得對於實現的代碼還是不能有很好的理解,所有有了這個系列。要寫這個系列還有三個原因:實戰的代碼是Python2的,有一些用法已經在python3中不支持了,以後的系列都以pyhton3完成,遇到python2不支持的坑,會進行一下對比有一些初級的函數在初學階段是需要積累的,孤立的去記憶比較費時費力,所以一邊學算法的實現,一邊把遇到的一些函數的用法記錄下來~遇到有趣的pythonic的表達,記錄分享出來,做知識積累。
  • python機器學習預測分析核心算法.pdf
    AI項目體驗地址 https://loveai.tech《Python機器學習 預測分析核心算法》內容簡介  在學習和研究機器學習的時候,面臨令人眼花繚亂的算法,機器學習新手往往會不知所措。本書從算法和Python語言實現的角度,幫助讀者認識機器學習。
  • 關聯規則的挖掘與應用——Apriori和CBA算法
    文|光大科技大數據部 魏樂 盧格潤1 關聯規則1.1 關聯規則基本概念1.2 Apriori算法基本思路2 關聯分類2.1 CBA關聯分類算法思路1.2 Apriori算法基本思路關聯規則的挖掘可以分為兩步,第一步找到頻繁項集,第二步從頻繁項集中再找出滿足最小置信度的強關聯規則。整體來看,第二步比較簡單,主要算力都耗費在第一步上,如果採用統計方法,需要將所有K項集統計一遍,費時耗力。
  • 【白話機器學習】算法理論+實戰之AdaBoost算法
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • 數據挖掘之關聯規則算法(Apriori)
    2 Apriori算法介紹Apriori算法的原理通過限制候選產生發現頻發項集由頻繁項集產生關聯規則Apriori算法的重要性質性質1:頻繁項集的子集必為頻繁項集如果{B,C}是頻繁的,那麼{B},{C}也一定是頻繁的性質2:非頻繁項集的超集一定是非頻繁的。
  • Weka機器學習使用介紹(數據+算法+實戰)
    Weka機器學習使用介紹(數據+算法+實戰)Weka是懷卡託智能分析環境(Waikato Environment
  • 推薦:機器學習培訓20節+大量實戰案例+5大福利
    機器學習所需數學基礎與背景知識機器學習常見問題與算法工業界應用機器學習算法解決實際數據問題思路面試指導與其他福利◆ ◆ ◆我們為你準備了什麼?讀博前在網際網路公司工作三年,了解業界需求,致力於研究能解決實際問題的機器學習方法。寒小陽資深算法工程師,專注海量數據上機器學習算法的應用與優化,有多年實際機器學習/深度學習/數據挖掘項目經驗,負責過多個電商機器學習項目。做過推薦系統、文本挖掘、點擊率預估、深度學習圖像識別與檢索。
  • 【白話機器學習】算法理論+實戰之PageRank算法
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • 【新書】python+tensorflow機器學習實戰,詳解19種機器學習經典算法
    《Python TensorFlow機器學習實戰》通過開發實例和項目案例,詳細介紹TensorFlow開發所涉及的主要內容。書中的每個知識點都通過實例進行通俗易懂的講解,便於讀者輕鬆掌握有關TensorFlow開發的內容和技巧,並能夠得心應手地使用TensorFlow進行開發。
  • XGBoost實戰(一):sklearn機器學習調用示例
    preds = model.predict(xgb_test)predsarray([0.08073306, 0.92217326, 0.08073306, ..., 0.98059034, 0.01182149, 0.98059034], dtype=float32)二、機器學習算法基礎
  • 十大經典數據挖掘算法—Apriori
    打開APP 十大經典數據挖掘算法—Apriori 發表於 2018-02-04 09:37:56 因此,我們需要找出複雜度更低的算法用於關聯分析。 2. Apriori算法Agrawal與Srikant提出Apriori算法,用於做快速的關聯規則分析。