A. 數據挖掘- 關聯分析演算法
關聯分析,顧名思義就是找出哪幾項之間是有關聯關系的,舉個例子:
以上是五個購物記錄,從中我們可以發現,購買了尿布的人其中有3個購買了啤酒,那麼久我們可以推測,尿布和啤酒之間有較強的關聯關系,盡管他們之間看起來並沒有什麼聯系,也就是能得到規則:
因為購物分析能較好地描述關聯分析,所以又被叫做 購物籃分析 。
為了較好的描述這個分析的各種名詞,我們把上面的表格重新設計一下:
把每一個購物訂單中,涉及到的商品都變成1,沒涉及到的變成0,也就是將各個商品的購買記錄 二元化 。
當然肯定也有多個分類的情況。
那麼麵包,牛奶這些就叫數據集的 項 ,而他們組合起來的子集就叫做 項集 。可以為空,空集是不包含任何項的項集,如果一個項集包含k個子項,就叫做k-項集。
訂單12345叫做 事務 ,某個項集在所有事務中出現多少次,叫做項集的 支持度計數 。
在上面的表格中,項集{啤酒、尿布、牛奶}的支持度計數為2,因為有兩個事務(3、4)包含這一項集。
用 支持度 和 置信度 來衡量,假定存在規則 ,其中X和Y是 不相交 的項集,則支持度為:
其中N是數據集中的事務個數,相當於表示該規則在數據集中出現了多少次。
置信度為:
置信度的意思就是,在出現X的情況下,有多少次同時出現了Y,代表這個關聯規則的頻繁程度。
注意置信度的分母是 ,因此這個評價可能會存在一定的問題。
關聯分析的核心目標就是找出支持度大於等於某個閾值, 同時 置信度大於等於某個閾值的所有規則,這兩個閾值記為 和 。
為了更有效率的完成這個過程,通常把關聯規則演算法分為兩步:
可以看出來,櫻備首先要求得頻繁項集,這步驟的開銷很大,但是只需要考慮支持度就可以了,第二步只考慮置信度就可以了。
下面就可以分兩步來解析演算法:
首先我們可以把項集聯想成一個樹形結構,每層代表著不同的k-項集,依層遞增,非葉子節點來自於他的幾個父節點的並集,如圖:
我們肯定不能通過傳統的方式,遍歷這些節點,算出支持度,然後篩選掉不滿足最小支持度的那些,這樣開銷太大,因此我們引入先驗原理,來輔助剪枝。
這個原理不難想像,假如一個項集{a,b}是非頻繁項集,那麼{a,b,c}肯定也是,因為ab是,在{a,b,c}中與之關聯的c必須在ab出現之後才存在,因此他的支持度肯定不會大於{a,b}。
頻繁的就是支持度大於等於最小支持度的項集,非頻繁就是小於的。
我們可以利用這一定理,把非頻繁項集的超集一並從樹中減去,這樣就能大大的降低計算次數,如圖:
虛線圈上的,就是在{a,b}確定是非頻繁項集之後,剪掉的超集,這些是不用計算的。
根據這個原理,可以說一下Apriori演算法。
根據上面說的先驗原理,Apriori演算法先從項集寬度最低的1開始,遍歷所有的項集支持度,找出頻繁項集(因為第一層在找出支持度之前),之後根據先驗原理,挑選任意兩個頻繁項集組成2-頻繁項集(很簡單,如果挑非頻繁的,那組成的項集就不是頻繁項集了),再用2-項集挑選3-項集,直到挑選不出更高層次的項集為止,把這些項集作為 候選項集 ,如圖:
圖中1-項集中,啤酒,麵包,尿布,牛奶的支持度大於等於3(設 為3),則由他們組成2-項集,繼續篩選滿足支持度不小於3的項集,再由2-項集生成3-項集,這就是 Apriori 演算法篩選頻繁項集的基本步驟。總結如下:
上面提到了用k-1項集生成k-項脊稿毀集,那麼如何才能最有效率的產生k-項集呢,這里用了 的方法,也就是找到一對(k-1)-項集,當他們的前(k-2)項都相同時,進行合並,合並之後的結果就是{ },因為前k-2項是相同的。
舉個例子:
上面說了如何產生候選項集,接下來就是如何更敬塵有效率的確定支持度計數了,同樣,如果遍歷一個一個查的話效率是很低的,我們可以用枚舉的方法遍歷每個事務包含的項集,以查找3-項集為例,如圖:
因為我們要查3-項集,因此樹狀結構就分到3-項集為止。
因為3-項集的開頭第一個項肯定在1,2,3之間,我們就設定這三個數為三個分支,無論到哪個節點,都嚴格按照這個來分(1在左,2在中,3在右),在下面的層次中如何碰到比123更大的,則再向右分,就可以得到圖中的關於事務t的所有3-項集。
有了所有項集的列表,我們可以用候選項集去匹配這些項集,從而看t中是否包含候選項集,如果包含,則支持度+1。
可以使用Hash樹來進行匹配,從而實現支持度計數。
如下圖,就是一個Hash樹的例子,每個內部節點都使用Hash函數 來確定應當沿著當前節點的哪個分支向下,所以1,4,7就到了同一分支。
我們對於單個事務,可以遍歷Hash樹,設事務為t,則保證所有包含屬於事務t的候選3-項集的葉節點至少訪問一次。
由於我們之前已經通過樹的方式枚舉出了t中所有的3-項集,那麼我們跟這個Hash一走分支,找到對應3-項集的就+1支持度,即可算出每個候選項集的支持度。
提取規則相應的比較簡單,設有 頻繁項集Y ,我們忽略前件為空和後件為空的規則,每個頻繁項集能產生 個關聯規則,提取方法就是將Y劃分為兩個 非空 的子集X和Y-X,使得 滿足 置信度閾值 也就是最小置信度。
同樣的,提取規則也有一個原理:
參考頻繁項集的尋找過程,我們可以利用樹形結構對規則進行剪枝。
樹的每層對應規則後件中的項數,如圖:
假設規則{ } { }不滿足置信度閾值的要求,那麼可以丟棄後件包含{a}的所有規則,如上圖所示。
至此我們經歷了尋找頻繁項集和提取規則的過程,基本Apriori演算法就算完成了,不過還有一些需要考慮的細節。
在實際應用過程中,往往頻繁項集產生的數量可能很大,所以很難表示,我們需要尋找一種方法,找到一些有代表性的頻繁項集,以保證其描述性。
通常有如下兩種方法:
如圖:
這種表示很明顯降低了需要表示項集的個數,我們需要別的候選項集,直接取極大頻繁項集的子集就行,任意一個肯定都是。
但是這么做,表示不出他們子集的支持度,所以就需要再遍歷數據集,確定非極大頻繁項集的支持度,不是很方便。
所以我們還可以用閉頻繁項集來表示。
先來看閉項集的概念:
那麼閉頻繁項集的概念就很好理解了:
如圖,我們假設 是40%。
這種做法可以保證支持度和描述性。
之前舉的例子都是二元分類的,要麼1要麼0,下面看多分類的,我們很容易想到可以用獨熱編碼解決這個問題,把所有分類二元化,但是這樣就存在一個問題,有的屬性值可能會不夠頻繁,沒辦法成為頻繁項集。
所以最好是把多分類的項根據實際情況進行分類化,不要針對每個屬性都設置獨熱編碼。
或者將不太頻繁的屬性值合並為一個稱作其他的類別。
所以面對多分類屬性,我們要做的就是:
獨熱編碼二元化-針對這些值進行一定的合並,或者分類或者並為其他 - 刪除冗餘的項 - 避免包含多個來自同一屬性的項的候選集(例如{ },被寫到了一個候選集中,但是實際上這種情況不可能發生,由於獨熱編碼進行的二元化而產生了這種情況,需要避免。)
我們也會遇到一些連續屬性,可以通過以下幾種方式處理:
這種做法有一個問題就是分類的效果取決於區間的個數和跨度,如果取不好很難得到理想的結果。
如果要驗證統計出的值是否具有統計意義,可以參考假設檢驗中針對不同比較的不同公式,這里不再舉例。
把mini-Apriori演算法中的支持度代入到Apriori演算法的支持度中即可。
舉個例子:
想要衡量模型的好與壞,肯定要有一個評估指標,我們可以根據業務實際去評價,這是主管評價,叫做 主觀興趣度度量 ,這個顯然要結合業務,所以我們要看看一些客觀指標。
指標的評價往往依賴於相依表,這個相依表有點類似於混淆矩陣:
其中A,B代表在事務中出現,!A,!B代表沒有在事務中出現,空列空行例如 代表A的支持度計數, 表示包含B但是不包含A的事務的個數。
最基本的就是置信度和支持度了,但是這兩種指標都很難做到客觀評價模型,會受到多種因素的影響。
我們可以用 興趣因子 來衡量模型:
首先我們引入 提升度 的概念,它用於計算規則置信度和 規則後件 中項集的支持度之間的比率,
對於二元變數,提升度等價於另一種稱作興趣因子的客觀度量,定義為:
其中N是事務個數。
如果
但是興趣因子有一定局限性,看上圖,{p,q}和{r,s}的興趣因子分別為1.02和4.08,雖然p和q同時出現在88%的文檔中,但是他們的興趣因子接近於1,表明他們相互獨立,另一方面,{r,s}的興趣因子閉{p,q}的高,但是r和s很少出現在一個文檔中,這種情況下,置信度要比興趣因子更可信,置信度表明p和q之間的聯系94.6%遠高於r和s之間。
另外還可以引入 相關系數 ,邏輯類似於向量的相關系數:
相關度的值從-1到1,如果變數相互獨立,則Φ=0。
他的局限性在於在食物中把同時出現和同時不出現視為同等重要,這往往不符合實際規律,同時對於傾斜的變數很難度量。
IS度量 可以用於處理非對稱二元變數,定義如下:
IS數學上等價於二元變數的餘弦度量。
但是IS取決於A和B的支持度,所以存在與置信度度量類似的問題——即使是不相關或者負相關的模式,度量值也可能相當大。
支持度,全置信度,可以應用於較大的項集,興趣因子,IS、PS、Jaccard系數等使用多維相依表中的頻率,可以擴展到多個變數。
針對大多數項具有較低或中等的頻率,但是少數項具有很高頻率的數據集。
交叉支持模式是一個項集 ,他的支持度比率是:
小於用戶指定的閾值 。
需要保證全置信度小於上面的支持度比率,而全置信度是:
其中 .
全置信度能夠確保項集中的項之間是強關聯的,例如,假定一個項集X的全置信度是80%,如果X中的一個項出現在某個事物中,則X中其他的項至少也有80%的幾率屬於同一個事務,這種強關聯模式又稱 超團模式 。
B. 第九章 數據關聯規則分析演算法——基於Apriori演算法的關聯項分析
9.1 基於Apriori演算法的關聯分析
Aprior演算法是關聯規則分析中較為經典的頻繁項集演算法。關聯規則反映的是兩個或多個事物相互之間的依存性和關聯性。如果兩個或者多個事物相互之間存在一定的關聯關系,則它們之間存在一種關聯規則使得它們之間可以進行搭配。
9.1.1 基本概要
Apriori演算法利用頻繁項集的先驗知識,不斷地按照層次進行迭代,計算數據集中的所有可能的頻繁項集,它的分析主要包括兩個核心部分。
1、根據支持度找出頻繁項集;
2、根據置信度產生關聯規則。
9.1.2 Apriori演算法原理
基本流程:
1、掃描歷史數據,並對每項數據進行頻率次數統計。
2、構建候選集 ,並計算其支持度,即數據出現頻率次數與總數的比。
3、對候選項集進行篩選,篩選的數據項支持度應當不小於最小支持度,從而形成頻繁項集 .
4、對頻繁項集 進行連接生成候選集 ,重復上述步驟,最終形成頻繁K項集或者最大頻繁項集。
Apriori演算法存在兩大定理:
1、如果一個集合是頻繁項集,那麼它的所有子集都是頻繁集合。
2、如果一個集合它不是頻繁集合,那麼它的所有超集都不是頻繁項集。
9.1.3 Apriori演算法優缺點
優:運算過程非常簡單,理論方法也比較容易理解,對數據特徵的要求也相對較低。
缺:
1、產生候選集是產生較多的組合,沒有考慮將一些無關的元素排除後再進行組合。
2、每次計算項集的過程中都會掃描元素的數據表。
針對不足推出不斷改進的Apriori演算法:
1、將數據表(事務表)進行壓縮。
2、利用哈希表的快速查找特性對項集進行計數統計。
3、合理選樣。
C. 常見的關聯規則挖掘演算法包括
典的關聯規則挖掘演算法包括Apriori演算法和FP-growth演算法。
apriori演算法多次掃描交易資料庫,每次利用候選頻繁集產生頻繁集;而FP-growth則利用樹形結構,無需產生候選頻繁集而是直接得到頻繁集,大大減少掃描交易資料庫的次數,從而提高了演算法的效率。但是apriori的演算法擴展性較好,可以用於並行計算等領域。
2、
Logistic回歸,LR有很多方法來對模型正則化。比起NB的條件獨立性假設,LR不需要考慮樣本是否是相關的。
與決策樹與支持向量機不同,NB有很好的概率解釋,且很容易利用新的訓練數據來更新模型。如果你想要一些概率信息或者希望將來有更多數據時能方便的更新改進模型,LR是值得使用的。
3、決策樹,DT容易理解與解釋。DT是非參數的,所以你不需要擔心野點(或離群點)和數據是否線性可分的問題,DT的主要缺點是容易過擬合,這也正是隨機森林等集成學習演算法被提出來的原因。
4、支持向量機,很高的分類正確率,對過擬合有很好的理論保證,選取合適的核函數,面對特徵線性不可分的問題也可以表現得很好。SVM在維數通常很高的文本分類中非常的流行。
D. 關聯演算法
關聯, 指的是關聯分析, 這里引用網路的定義.
通過關聯分析, 可以挖掘出"由於某些事件的發生而引起另外一些事件的發生"之類的規則, 比如說"麵包=>牛奶", 其中麵包被稱為規則的前項, 而牛奶則被稱為規則的後項.
常用於關聯分析的演算法有Apriori演算法, FP-growth演算法, Eclat演算法, 灰色關聯法等, 下面將著重介紹Apriori演算法.
在介紹Apriori演算法之前, 我們先來了解幾個概念:
1.事務: 一條交易記錄稱為一個事務
2.項: 交易中的每一個物品稱為一個項
3.項集: 包含0個或多個項的集合
4.支持度計數: 項集在所有事務中出現的次數.
5.支持度: 支持度計數除於總的事務數.
6.頻繁項集: 支持度大於等於某個閥值的項集.
關聯規則的挖掘通常分為兩步: 第一步, 找出所有的頻繁項集; 第二步, 由頻繁項集產沒判答生強關聯規則. 而Apriori演算法則是挖掘頻繁項集的基本演算法.
可以看到以上每個過程均需要掃描一次數據, 為了提高頻繁項集逐層迭代產生的效率, 需要利用一條重要性質, 其稱為先驗性質:
當然, 非頻繁項集的所有超集也一定是非頻繁的.
將先驗性質應用到Apriori演算法中就是將之枯慧前的過程分為兩大部分, 連接步和剪枝步.
連接步: 連接步的目的是產生候選項集.
剪枝步: 應用先驗性質對候選項集進行篩選, 將不滿足先驗性質的候選項集剔除, 再進而根據最小支持度找出頻繁項集, 這樣可以有效縮短計算量.
關聯分析的目標是找出強關聯規則, 因此這里的關聯規則是指強關聯規則, 我們把滿足最小支持度和最小置信度的規則稱為強關聯規則.
對於規則A=>沖敏B, 置信度的計算公式就是項集{A, B}的支持度計數除於項集{A}的支持度計數.
優點: 簡單, 易理解, 對數據要求低
缺點: 容易產生過多的候選項集, I/O負載大.
E. 關聯分析的關聯分析的方法
Apriori演算法是挖掘產生布爾關聯規則所需頻繁項集的基本演算法,也是最著名的關聯規則挖掘演算法之一。Apriori演算法就是根據有關頻繁項集特性的先驗知識而命名的。它使用一種稱作逐層搜索的迭代方法,k—項集用於探索(k+1)—項集。首先,找出頻繁1—項集的集合.記做L1,L1用於找出頻繁2—項集的集合L2,再用於找出L3,如此下去,直到不能找到頻繁k—項集。找每個Lk需要掃描一次資料庫。
為提高按層次搜索並產生相應頻繁項集的處理效率,Apriori演算法利用了一個重要性質,並應用Apriori性質來幫助有效縮小頻繁項集的搜索空間。
Apriori性質:一個頻繁項集的任一子集也應該是頻繁項集。證明根據定義,若一個項集I不滿足最小支持度閾值min_sup,則I不是頻繁的,即P(I)<min_sup。若增加一個項A到項集I中,則結果新項集(I∪A)也不是頻繁的,在整個事務資料庫中所出現的次數也不可能多於原項集I出現的次數,因此P(I∪A)<min_sup,即(I∪A)也不是頻繁的。這樣就可以根據逆反公理很容易地確定Apriori性質成立。
針對Apriori演算法的不足,對其進行優化:
1)基於劃分的方法。該演算法先把資料庫從邏輯上分成幾個互不相交的塊,每次單獨考慮一個分塊並對它生成所有的頻繁項集,然後把產生的頻繁項集合並,用來生成所有可能的頻繁項集,最後計算這些項集的支持度。這里分塊的大小選擇要使得每個分塊可以被放入主存,每個階段只需被掃描一次。而演算法的正確性是由每一個可能的頻繁項集至少在某一個分塊中是頻繁項集保證的。
上面所討論的演算法是可以高度並行的。可以把每一分塊分別分配給某一個處理器生成頻繁項集。產生頻繁項集的每一個循環結束後.處理器之間進行通信來產生全局的候選是一項集。通常這里的通信過程是演算法執行時間的主要瓶頸。而另一方面,每個獨立的處理器生成頻繁項集的時間也是一個瓶頸。其他的方法還有在多處理器之間共享一個雜湊樹來產生頻繁項集,更多關於生成頻繁項集的並行化方法可以在其中找到。
2)基於Hash的方法。Park等人提出了一個高效地產生頻繁項集的基於雜湊(Hash)的演算法。通過實驗可以發現,尋找頻繁項集的主要計算是在生成頻繁2—項集Lk上,Park等就是利用這個性質引入雜湊技術來改進產生頻繁2—項集的方法。
3)基於采樣的方法。基於前一遍掃描得到的信息,對它詳細地做組合分析,可以得到一個改進的演算法,其基本思想是:先使用從資料庫中抽取出來的采樣得到一些在整個資料庫中可能成立的規則,然後對資料庫的剩餘部分驗證這個結果。這個演算法相當簡單並顯著地減少了FO代價,但是一個很大的缺點就是產生的結果不精確,即存在所謂的數據扭曲(Dataskew)。分布在同一頁面上的數據時常是高度相關的,不能表示整個資料庫中模式的分布,由此而導致的是采樣5%的交易數據所花費的代價同掃描一遍資料庫相近。
4)減少交易個數。減少用於未來掃描事務集的大小,基本原理就是當一個事務不包含長度為志的大項集時,則必然不包含長度為走k+1的大項集。從而可以將這些事務刪除,在下一遍掃描中就可以減少要進行掃描的事務集的個數。這就是AprioriTid的基本思想。 由於Apriori方法的固有缺陷.即使進行了優化,其效率也仍然不能令人滿意。2000年,Han Jiawei等人提出了基於頻繁模式樹(Frequent Pattern Tree,簡稱為FP-tree)的發現頻繁模式的演算法FP-growth。在FP-growth演算法中,通過兩次掃描事務資料庫,把每個事務所包含的頻繁項目按其支持度降序壓縮存儲到FP—tree中。在以後發現頻繁模式的過程中,不需要再掃描事務資料庫,而僅在FP-Tree中進行查找即可,並通過遞歸調用FP-growth的方法來直接產生頻繁模式,因此在整個發現過程中也不需產生候選模式。該演算法克服了Apriori演算法中存在的問顥.在執行效率上也明顯好於Apriori演算法。
F. 大數據挖掘的演算法有哪些
大數據挖掘的演算法:
1.樸素貝葉斯,超級簡單,就像做一些數數的工作。如果條件獨立假設成立的話,NB將比鑒別模型收斂的更快,所以你只需要少量的訓練數據。即使條件獨立假設不成立,NB在實際中仍然表現出驚人的好。
2. Logistic回歸,LR有很多方法來對模型正則化。比起NB的條件獨立性假設,LR不需要考慮樣本是否是相關的。與決策樹與支持向量機不同,NB有很好的概率解釋,且很容易利用新的訓練數據來更新模型。如果你想要一些概率信息或者希望將來有更多數據時能方便的更新改進模型,LR是值得使用的。
3.決策樹,DT容易理解與解釋。DT是非參數的,所以你不需要擔心野點(或離群點)和數據是否線性可分的問題,DT的主要缺點是容易過擬合,這也正是隨機森林等集成學習演算法被提出來的原因。
4.支持向量機,很高的分類正確率,對過擬合有很好的理論保證,選取合適的核函數,面對特徵線性不可分的問題也可以表現得很好。SVM在維數通常很高的文本分類中非常的流行。
如果想要或許更多更詳細的訊息,建議您去參加CDA數據分析課程。大數據分析師現在有專業的國際認證證書了,CDA,即「CDA 數據分析師」,是在數字經濟大背景和人工智慧時代趨勢下,面向全行業的專業權威國際資格認證, 旨在提升全民數字技能,助力企業數字化轉型,推動行業數字化發展。 「CDA 數據分析師」具體指在互聯網、金融、零售、咨詢、電信、醫療、旅遊等行業專門從事數據的採集、清洗、處理、分析並能製作業務報告、 提供決策的新型數據分析人才。點擊預約免費試聽課。