讀古今文學網 > 機器學習實戰 > 11.1 關聯分析 >

11.1 關聯分析

Apriori算法

優點:易編碼實現 缺點:在大數據集上可能較慢 適用數據類型:數值型或者標稱型數據

關聯分析是一種在大規模數據集中尋找有趣關係的任務。這些關係可以有兩種形式:頻繁項集或者關聯規則。頻繁項集(frequent item sets)是經常出現在一塊的物品的集合,關聯規則(association rules)暗示兩種物品之間可能存在很強的關係。下面會用一個例子來說明這兩種概念。圖11-1給出了某個雜貨店的交易清單。

圖11-1 一個來自Hole Foods天然食品店的簡單交易清單

頻繁項集是指那些經常出現在一起的物品集合,圖11-1中的集合{葡萄酒,尿布, 豆奶}就是頻繁項集的一個例子(回想一下,集合是由一對大括號「{ }」來表示的)。從下面的數據集中也可以找到諸如尿布 ➞葡萄酒的關聯規則。這意味著如果有人買了尿布,那麼他很可能也會買葡萄酒。使用頻繁項集和關聯規則,商家可以更好地理解他們的顧客。儘管大部分關聯規則分析的實例來自零售業,但該技術同樣可以用於其他行業,比如網站流量分析以及醫藥行業。

尿布與啤酒?

關聯分析中最有名的例子是「尿布與啤酒」。據報道,美國中西部的一家連鎖店發現,男人們會在週四購買尿布和啤酒。這樣商店實際上可以將尿布與啤酒放在一塊,並確保在週四全價銷售從而獲利。當然,這家商店並沒有這麼做*。

* DSS News, 「Ask Dan! What is the true story about data mining, beer and diapers?」 http://www.dssresources.com/newsletters/66.php, retrieved March 28, 2011.

應該如何定義這些有趣的關係?誰來定義什麼是有趣?當尋找頻繁項集時,頻繁(frequent)的定義是什麼?有許多概念可以解答上述問題,不過其中最重要的是支持度和可信度。

一個項集的支持度(support)被定義為數據集包含該項集的記錄比例。從圖11-1中可以得到,{豆奶}的支持度為4/5。而在5條交易記錄中有3條包含{豆奶,尿布},因此{豆奶,尿布}的支持度為3/5。支持度是針對項集來說的,因此可以定義一個最小支持度,而只保留滿足最小支持度的項集。

可信度或置信度(confidence)是針對一條諸如{尿布} ➞ {葡萄酒}的關聯規則來定義的。這條規則的可信度被定義為「支持度({尿布, 葡萄酒})/支持度({尿布})」。從圖11-1中可以看到,由於{尿布, 葡萄酒}的支持度為3/5,尿布的支持度為4/5,所以「尿布 ➞ 葡萄酒」的可信度為3/4=0.75。這意味著對於包含「尿布」的所有記錄,我們的規則對其中75%的記錄都適用。

支持度和可信度是用來量化關聯分析是否成功的方法。假設想找到支持度大於0.8的所有項集,應該如何去做?一個辦法是生成一個物品所有可能組合的清單,然後對每一種組合統計它出現的頻繁程度,但當物品成千上萬時,上述做法非常非常慢。下一節會詳細分析這種情況並討論Apriori原理,該原理會減少關聯規則學習時所需的計算量。