RSHandbook筆記P1C1:推薦系統中的數據挖掘方法
標簽: 推薦系統HandBook筆記
由于簡書不支持latex公式,為了更好的閱讀體驗請移至本文作業部落的地址,轉載請注明。
推薦系統中的數據挖掘方法
介紹
本章主要介紹推薦系統中使用的數據挖掘技術。
典型的數據挖掘包含三步:數據處理,數據分析和結果解釋。
數據預處理
我們把數據定義為對象和它們屬性的集合。
本節主要關注當我們設計一個推薦系統的時候的遇到的三個重要問題。首先,復習一下相似度或距離計算方法,然后,討論從大量數據中采樣的問題,最后,討論降維的通用技術。
相似度度量方法
歐式距離
$$ d(x,y)=\sqrt{\mathop{\sum}_{k=1}n(x_k-y_k)2} $$
其中,$ n $是維(屬性)數,$ x_k $和$ y_k $是數據對象想$x$和$y$的第$ k $個屬性。Minkowski距離
$$ d(x,y)=({\mathop{\sum}_{k=1}n|x_k-y_k|r)^\frac{1}{r}} $$
其中r是距離的度。r值得不同,Minkowski距離有不同的名字:$r=1$:city block(曼哈頓距離),$r=2$:歐氏距離,$r\rightarrow\infty$:supremum距離,這個距離計算數據對象的某些維度之間最大不同。Mahalanobis距離
$$ d(x,y)=\sqrt{(x-y)\sigma{-1}(x-y)T} $$
這里,$\sigma$是數據的協方差矩陣。余弦相似度
$$ cos(x,y)=\frac{x\cdot y}{|x||y|} $$皮爾遜相關系數
$$ Pearson(x,y)=\frac{\sum(x,y)}{\sigma_x\times\sigma_y} $$
RS中使用的較多的是余弦相似度和皮爾遜相似度,Spertus等人做實驗發現余弦相似度效果最好。而Lathia等人實驗結果顯示RS的預測準確度與相似度方法的選擇關系不大。
另外,當項目僅包含二元屬性時,有幾個特殊的相似度度量方法。首選計算四個值:$M01$,$M10$,$M11$,$M00$=$x$為0,$y$為1的屬性數量,以此類推。我們可以計算1.簡單搭配系數 $ SMC=\frac{number\ of\ matches}{number\ of\ attributes}=\frac{M11+M00}{M01+M10+M11+M00} $;2.Jaccard系數$JC=\frac{M11}{M01+M10+M11}$。以及Jaccard的一種變化(Tanimoto):$ d=\frac{x\cdot y}{|x|2+|x|2-x\cdot y} $。
采樣
采樣(Sampling)是DM中從大數據集中選擇相關數據子集的一種主要技術。Sampling還可以用來創建訓練集和測試集。訓練集用來學習參數和算法的配置。測試集用來評估模型和訓練階段得到的配置數據來確保未觀測到的數據在模型上也表現得很好。
采樣的關鍵問題是得到的子集是否具有代表性。最簡單的采樣技術就是隨機采樣,等概率的抽取數據。此外,還有其他的隨機方法。比如,在分層(stratified)采樣中,吧數據根據特定的特征劃分成幾個部分,然后在幾個部分上獨立隨機采樣。
現在比較通用的方法是使用標準不放回隨機抽樣,80/20劃分訓練集和測試集。
為避免劃分數據集的采樣導致過度專一化(over-specialization),訓練過程應該重復多次。不同的訓練集/測試集用來重復訓練/測試K次。最終,取K次試驗的平均成果。這個過程就是交叉驗證機制。有幾個交叉驗證技術:1.重復隨機采樣,把標準隨機采樣重復K次。2.n-fold交叉驗證,數據集被分成n個folds,一個fold用來測試模型,其余n-1個用來訓練模型。然后交叉驗證過程被重復n次,每次使用不同的子樣本作為驗證集。3.leave-one-out(LOO)方法,它可以被視為n-Fold的極端情況,它把每個樣本單獨做為驗證集。
降維
稀疏性和維數災難的問題常常出現在RS中。因此,降維技術非常有必要的。RS中最常用的兩個降維技術是:1.主成分分析(PCA),2.奇異值分解(SVD)。
PCA
PCA是一種經典的發現高維數據中的模式的統計方法。
第一成分的方差的量是大于第二成分方差的量的。我們可以通過忽略掉那些在方差上貢獻較小的成分來達到降維的目的。
圖2顯示了二維高斯聯合分布點云的PCA分析。在數據聚集之后,主成分被計算為$u_1$和$u_2$。注意新坐標的長度是他們特征向量中包含的能量。由圖2的例子,第一個成分$u_1$包含了83.5%的能量,這意味著移除成分$u_2$僅僅損失16.5%的信息。一般而言,選擇$m^{'}$個成分,使之能量累積超過特定的閾值,一般為90%。
SVD
奇異值分解是一種強力的降維技術。SVD降維的關鍵問題是找到一個低維特征空間,它能代表一些語義概念信息(在LSA中是一種基礎方法)。
SVD算法的核心依賴于如下理論:
給出一個矩陣$A$,總能分解成$A=U\lambda V^T$。給一個$n\times m$的矩陣$A$(n個項目,m個特征),我們能獲得一個$n\times r$的矩陣$U$(n個項目,r個概念),和一個$r\times r$的對角陣$\lambda$(概念的強度),以及一個$m\times r$的矩陣$V$(m個特征,r個概念)。
把r個特征值降序排列,取前k個,這樣就得到了rank-k的A矩陣的近似矩陣$A_k=U_k\lambda_kV_k^T$。
SVD有兩個使用方式,第一種是利用SVD尋找用戶-產品之間的潛在關系,從而預測評分。第二種是利用SVD的產生的低維空間提高近鄰方法的精度。
SVD的優點是當新加入的數據時,不需要重新計算模型。SVD方法在Netflix大賽中取得了巨大的成功。
順帶一提,還有很多MF的方法,如非負矩陣分解(NMF)等。這些方法和SVD十分相似。
去噪
原始數據中可能有一些不同的噪聲,比如丟失的值或無用的數據等。因此,降噪是去除數據中不良影響,最大化數據信息量的重要過程。
在RS中,主要區分兩類噪聲:natural和malicious(惡意的)。
malicious噪聲能夠影響RS的輸出。而natural噪聲對RS的表現的影響可以忽略不計。
分類
一個分類器是將特征空間映射到標簽空間中,舉一個餐館的例子,根據描述餐館的一系列特征,它們可以被分為(good,bad)兩類。
有兩種分類:1.有監督的,即標簽或類目是已知的。2.無監督的,即標簽或類目是未知的。
最近鄰
第一種是基于實例的分類器,通常也叫做最近鄰分類器(kNN)。如果要給一個點分類,kNN分類器從訓練數據中尋找它的k個最近的點,然后依賴最近的這些點給予標記。
給出一個需要分類的點$q$,和一個訓練集$ X={{x_1,l_1}\dots{x_n}} $,$x_j$是第j個元素,$l_j$是它的標簽,然后尋找到一個k最近鄰的子集$ Y={{y_1,l_1}\dots{y_n}} $,其中$Y\in X$而且$\sum_1^kd(q,y_k)$是最小的。Y中包含了X中與$q$最接近的k個點。然后,$q$可以標記為$l=f({l_1\dots l_k})$。
可能現在kNN最大的挑戰就是$k$的選擇。如果$k$太小,那么分類器就會對噪聲點十分敏感,反之,如果$k$太大,鄰域內就會包含太多其他類的點。
kNN在RS中被廣泛使用,在CF中,尋找相似的用戶或項目。而且它還具有惰性學習的優點,維護模型的成本低。
決策樹
決策樹是以樹結構組織目標屬性或類的分類器。決策樹包含兩類節點a)決策節點,決定目標屬性屬于那一顆子樹,b)葉子節點,顯示目標屬性的值
通常的一些決策樹:Hunts Algorithm,CART,ID3,C4.5,SLIQ,SPRINT。其中Hunt Algorithm是最早也是最容易理解的。
決策樹的劃分策略可以根據最大化信息增益得到:
$$ \Delta_i=I(parent)-\mathop{\sum}\limits_{j=1}^{k_i}\frac{N(v_j)I(v_j)}{N} $$
其中,$k_i$是屬性$i$的值,$N$是觀察的到的數量,$v_j$是根據屬性$i$值的第$j$個劃分。除此之外,還有一種度量方法是Gini指數。
決策樹迭停止條件是所有觀測值都屬于同一類。但在實踐中,我們需要對龐大的決策樹進行剪枝操作,簡化決策樹的復雜度。
使用決策樹構建分類器的主要優點是消耗低,對未知實例分類的速度快。
決策樹可能會用于基于模型的RS方法中。一種可能性是使用內容特征去建立一個決策樹,它將所有與用戶偏好有關的變量都建模。另外,決策樹還可以作為RS的一部分,比如它可以過濾一部分用戶。
基于規則的分類器
基于規則的分類器使用“if...then...”規則的集合來分類數據。規則的前提或是條件是屬性連詞的表達式。規則的結論是一個正或者負的分類。
如果對象的屬性滿足規則的條件,我們可以說規則R覆蓋對象x。我們定義規則的覆蓋性為滿足前提的部分記錄。另一方面,我們定義準確性為既滿足前提又滿足結論的部分記錄。如果規則彼此之間是獨立的,我們說分類器包含互斥的規則(mutually exclusive rules)。最后,如果屬性值得所有可能組合都被覆蓋的話,即,一個記錄至少被一個規則覆蓋,我們認為分類器具有詳盡規則(exhausitive rules)。
為了建立一個基于規則的分類器,我們可以用從數據中直接抽取規則的直接方法。這種方法的例子是RIPPER,或CN2。另一方面,使用間接的方法從其它分類模型中抽取規則很常見,例如:決策樹模型或是神經模型。
基于規則分類器的優點是它們表示很明確,因為它們是符號化的并且可以在沒有任何轉化的情況下操作數據的屬性。
但是,與決策樹方法類似,建立一個完整基于規則的推薦模型是很難的。事實上,這種方法在推薦的環境中不是很流行,因為得到一個基于規則的系統意味著我們要么具有一些決策過程中的顯式的先驗知識,要么我們從另一個模型中提取規則,例如決策樹。但是基于規則的系統通過注入一些領域知識或者是商業規則來提高推薦系統的性能。
貝葉斯分類器
貝葉斯分類器是解決分類問題的一個概率框架。它基于條件概率和貝葉斯理論。貝葉斯學派使用概率來代表從數據中學習到的關系的不確定性。先驗代表了我們的期望值,或者真正關系可能是什么的先驗知識。特別地,給定數據后,模型的概率(后驗概率)是與似然值乘以先驗概率的乘積成比例的。似然值部分包含了數據的影響,而先驗概率則表明觀測數據之前模型的可信度。
貝葉斯分類器把每個屬性和類標簽都看做隨機變量。給定一個具有$N$個屬性($A_1,A_2,\dots,A_N$)的記錄,目標預測類$C_k$,方法是在給定數據$P(C_k|A_1,A_2,\dots,A_N)$,找到能夠最大化該類后驗概率的$C_k$的值。應用貝葉斯理論,$P(C_k|A_1,A_2,\dots,A_N)\propto P(A_1,A_2,\dots,A_N|C_k)P(C_k)$。
一個特殊但是最常用的分類器是樸素貝葉斯分類器。它假設屬性的概率是相互獨立的:$P(A_1,A_2,\dots,A_N|C_k)=P(A_1|C_k)P(A_2|C_k)\dots P(A_N|C_k)$。
樸素貝葉斯的主要好處是,受孤立噪音點和不相關的屬性的影響小,并且在概率估算期間可以通過忽略實例來處理缺失值。但是,獨立性假設對一些相互關聯的屬性來說可能不成立。在這種情況下,通常的方法是使用所謂的貝葉斯信念網絡(BBN)(或是簡稱貝葉斯網絡)。BBN使用非循環圖表示屬性之間的依賴性,并使用概率表表示結點與直接父親之間的聯系。和樸素貝葉斯分類器方法類似,BBN可以很好地處理不完整的數據,對于模型的過擬合有相當的健壯性。
貝葉斯分類器在基于模型的推薦系統中特別受歡迎。它們經常被用來為基于內容的推薦生成模型。當然,它們也被用于協同環境中。
人工神經網絡
人工神經網絡(ANN)由一組內連接點和帶權鏈接組成,其想法來自于生物大腦的結構。ANN中的節點被稱為神經元,類似于生物神經。這些簡單的功能單元組成網絡,網絡在用有效數據訓練之后能夠學習分類問題。
ANN的最簡單模型是感知器模型,如圖5所示。如果我們把激活函數$\phi$特指為簡單的閾值函數,則輸出就是根據每條鏈接的權重將輸入值累加,然后和某個閾值$\theta_K$相比較。輸出函數為:
[
y_k=\left{
\begin{array}{ll}
1,\ & if \sum x_iw_{ki}\geq\theta_k \
0,\ & if \sum x_iw_{ki}<\theta_k
\end{array}
\right.
]
感知模型是具有簡單和有效學習算法的線性聚類器。但是,除了使用在感知模型中的閾值函數之外,還有幾種其它對于激活函數通用的選擇,比如:多層感知機,正切雙曲,或者是階梯函數。
ANN可以有許多的層。在ANN中的層被分成三種類型:輸入,隱藏,輸出。輸入層的單元響應進入網絡的數據。隱藏層接受從輸入單元中的帶權輸出。輸出層響應隱藏層中的帶權輸出并且產生最終的網絡輸出。
ANN最主要的優點是(取決于激活函數)能做非線性的分類任務,并且由于并行屬性,它們高效甚至能夠在部分網絡受損的情況下操作。主要的缺點是,它很難對于給定的問題給出理想的網絡拓撲,并且一旦拓撲被決定它的表現水平就會位于分類錯誤率的下限。
ANN能夠以類似于貝葉斯網絡的方法被用來構建基于模型的推薦系統。但是,沒有令人信服的研究表明ANN是否會有性能的提升。
支持向量機
支持向量機分類的目標是發現數據的線性超平面(決策邊界),以邊界最大化的方式分離數據。例如,如果我們在二維平面上看兩類分離的問題,像圖6闡述的那樣,很容易觀察到分成兩個類有許多種可能的邊界線。每一個邊界線都有一個相關的邊緣。SVM后面的理論支持是,如果我們選擇邊緣最大化的那一個,我們將來對未知的物品分類出錯的可能性就越小。
兩類之間的一個線性劃分是通過函數$w\cdot x+b=0$來實現的。我們定義能夠劃分物品類+1或是-1的函數,只要這些物品是被來自類劃分函數的某個最小距離分開的。相應的函數為:
$$
f(x)=\left{
\begin{array}{ll}
1,\ & if\ w\cdot x+b\geq 1\
-1,\ & if\ w\cdot x+b\leq -1
\end{array}
\right.
$$
$$ Margin=\frac{2}{|w|^2} $$
根據SVM的主要原理,我們想要最大化兩個類之間的邊緣(Margin)。事實上這等價于在給定$f(x)$的條件下,最小化倒數$L(w)=\frac{|w|^2}{2}$。
如果物品不是線性分離的,我們可以通過引入一個松弛變量來把SVM轉變為軟邊緣分類器。在這種情況下,新的$f(x)$和$L(w)$函數定義如下:
$$ L(w)=\frac{|w|2}{2}+C\mathop{\sum}\limits_{i=1}N\varepsilon$$
$$
f(x)=\left{
\begin{array}{ll}
1,\ & if\ w\cdot x+b\geq 1-\varepsilon\
-1,\ & if\ w\cdot x+b\leq -1+\varepsilon
\end{array}
\right.
$$
另一方面,如果決策邊界是非線性的,我們需要轉換數據到高維的空間。這個轉換的完成得益于名為核技巧的數學變換。最基本的想法是通過核函數取代在公式2.8中的點積。對于核函數有許多不同的可行的選擇,比如:多項式或者是多層感知器。但是最常用的核函數是徑向基函數族(RBF)(高斯核)。
支持向量機最近已經在許多的環境中獲得較好的性能和效率。在推薦系統里,SVM最近也顯示出了顯著效果。
分類器的集成
使用分類器集成背后的最基本的思想是,從訓練數據構造一系列的分類器,并通過聚集預測值來預測類標簽。只要我們能假設這些分類器都是獨立的,分類器集成就有效。在這種情況下,我們可以確定分類器產生的最糟糕的結果與在集成中的最壞分類是一樣的。因此,結合具有相似的分類錯誤的獨立分類器將只會提升結果。
為了產生集成,有幾種可能的方法。最常用的兩個技術是Bagging和Boosting。在Bagging方法中,我們采用帶替換的抽樣,在每一個自舉樣本(bootstrap sample)上建立分類。每個樣本被選擇的概率為$(1-\frac{1}{N})^N$,注意如果$N$足夠大,它收斂至$1-\frac{1}{e}\approx 0.623$。在Boosting 方法中,我們通過更加關注之前錯誤分類的記錄,使用迭代過程自適應地改變訓練數據的分布。一開始,所有的記錄都被分配相同的權值。但是,不像Bagging 方法,在每一輪的提升中權值是可以變化的:被錯誤分類的記錄權值將會增加,同時正確分配的記錄的權值將會降低。Boosting 方法的例子是AdaBoost 算法。
分類器集成使用的例子在推薦領域里面非常的實用。事實上,任何一個混合技術都可以理解成以一種方式集成或另外幾個分類器的集成。實驗結果顯示,集成器能產生比其它任何孤立的分類器更好的結果。
評估分類器
推薦系統中被接受最常用的指標是預測興趣(評分)和測量值的均方差(MAE)或均方根誤差(RMSE)。這些指標在計算精度時對推薦系統的目標沒有任何假設。但是,正如McNee et al.指出的那樣,除了精確度之外還有許多指標來決定物品是否要被推薦。
下一步是考慮的是,“現實”中推薦系統的目的是產生一個topN推薦列表,以及依賴于能多好地分辨出值得推薦的物品來評估這個推薦系統。如果把推薦看作分類問題,就可以使用評估分類器的著名指標,諸如:準確度和召回率。
為了評估一個模型,我們一般考慮以下的指標:真正(TP):分到類A且真的屬于類A的實例數量;真負(TN):沒有分到類A且真的不屬于類A的實例數量;假正(FP):分到類A但不屬于類A的實例數量;假負(FN):沒有分到類A但屬于類A的實例數量。
最常用來衡量模型性能是定義正確分類的(屬于或不屬于給定的類)實例和總的實例數量之間的比率:精確度=$(TP+TN)/(TP+TN+FP+FN)$但是,精確度在許多的例子中有誤導。想象一個帶有99900個類A的樣本和100個類B的樣本的兩類分類問題。如果分類器簡單地預測一切屬于類A,計算精度可能是99.9%,但是模型性能值得懷疑,因為它從沒有發現類B中的樣本。改進這種估值的一種方法是定義代價矩陣,定義將類B的樣本分給類A的代價。
模型性能的其它常用指標,特別是在信息檢索中,是準確率和召回率。準確率,定義為$P = TP/(TP+FP)$,是一種在分樣本到類A中犯多少錯誤的指標。另一方面,召回率,$R = TP/(TP+FN)$,衡量沒有留下本應該劃分到類中的樣本的程度。$F_1$指標綜合了這兩個指標:$F_1=\frac{2RP}{R+P}=\frac{2TP}{2TP+FN+FP}$。
有時我們會比較幾個相互競爭的模型,而不是單獨評估它們的性能。為此,我們使用在1950年代開發的用來分析噪音信號的技術:接受特征曲線(ROC)。ROC曲線描述了正確擊中和假警告之間的特征。每一個分類的性能用曲線上的點表示(見圖7)。
聚類分析
聚類,也被稱作為無監督的學習,分配物品到一個組中使得在同一組中的物品比不同組中的物品更加類似:目的是發現存在數據中的自然(或者說是有意義)的組。相似度是由距離衡量來決定,諸如在2.1中敘述的。聚類算法的目標是在最小化群內距離的同時最大化群間距離。
聚類算法有兩個主要的類別:分層和劃分。劃分聚類算法把數據劃分成非重合的聚類,使得每一個數據項確切在一個聚類中。分層聚類算法在已知聚類上繼續聚合物品,生成聚類的嵌套集合,組成一個層級樹。
許多聚類算法試圖最小化一個函數來衡量聚類的質量。這樣的質量函數一般被稱為目標函數,因此聚類可以看作最優化的問題:理想聚類算法考慮所有可能數據劃分,并且輸出最小化質量函數的劃分。但相應的最優化問題是NP困難問題,因此許多算法采用啟發式方法(例如:k-means算法中局部最優化過程最可能結束于局部最小)。
k-Means
k-Means聚類是一種分塊方法。函數劃分$N$個物品的數據集到$k$個不相關的子集$S_j$,其中包含$N_j$個項目,以便于它們按照給定的距離指標盡可能的靠近。在分塊中每一個聚類通過它的$N_j$個成員和它的中心點$\lambda_j$來定義。每一個聚類的中心點是聚類中所有其它物品到它的距離之和最小的那個點。因此,我們能把k-means定義為一個最小化$E=\sum_1^k\sum_{n\in S_j}d(x_n,\lambda_j)$的一個迭代過程,$x_n$是代表第$n$個項目的向量,$\lambda_j$是$S_j$的中心點,$d$是距離函數。
算法一開始會隨機選擇k個中心點。所有物品都會被分配到它們最靠近的中心節點的類中。由于聚類新添加或是移出物品,新聚類的中心節點需要更新,聚類的成員關系也需要更新。這個操作會持續下去,直到再沒有物品改變它們的聚類成員關系。算法的第一次迭代的時候,大部分的聚類的最終位置就會發生,因此,跳出迭代的條件一般改變成“直到相對少的點改變聚類”來提高效率。
基礎的k-means是極其簡單和有效的算法。但是,它有幾個缺陷:(1)為了選擇合適的k值,假定有先驗的數據知識(2)最終的聚類對于初始的中心點非常敏感。(3)它會產生空聚類。k-means也有幾個關于數據的缺陷:當聚類是不同的大小,密度,非球狀形狀時,就會有問題,并且當數據包含異常值時它也會有問題。
改進的k-Means
基于密度的聚類算法。諸如:DBSCAN通過建立密度定義作為在一定范圍內的點的數量。例如:DBSCAN定義了三種點:核心點是在給定距離內擁有超過一定數量鄰居的點;邊界點沒有超過指定數量的鄰居但屬于核心點鄰居;噪音點是既不是核心點也不是邊界點。算法迭代移除掉噪音數據并且在剩下的點上進行聚類。
消息傳遞聚類算法。它是最近基于圖聚類方法的系列之一。消息傳遞算法沒有一開始就將節點的初始子集作為中心點,然后逐漸調適,而是一開始就將所有節點都看作中心點,一般稱為標本。在算法執行時,這些點,現在已經是網絡中的節點了,會交換消息直到聚類逐漸出現。相似傳播是這種系列算法的代表,通過定義節點之間的兩種信息來起作用:“責任”,反映了在考慮到其它潛在標本的情況下,接收點有多適合作為發送點的標本;“可用性”,從候選標本發送到節點,它反映了在考慮到其它選擇相同標本的節點支持的情況下,這個節點選擇候選標本作為其標本的合適程度。
分層聚類。它按照層級樹(樹枝形結構聯系圖)的結構產生一系列嵌套聚類。傳統的分層算法使用一個相似度或者是距離矩陣來合并或者是分裂一個聚類。有兩種主要方法來分層聚類。在聚集分層聚類中,我們以點作為個體聚類,并且每一個步合并最近的聚類對,直到只有一個(或是k個聚類)聚類剩下。分裂分層聚類從一個包含所有物品的聚類開始,并且每一個分裂每一聚類,直到每一聚類包含一個點(或是有K個聚類)。
就我們所知,諸如前面提到k-means的替代方法沒有應用在推薦系統中。k-means算法的簡單和效率優于它的替代算法。
關聯規則挖掘
關聯規則挖掘關注于規則的發現,其它能夠根據事務中出現其它物品來預測出現某個物品。兩個物品被發現相關只意味著共同出現,但是沒有因果關系。
我們定義物品集為一個或多個物品的集合(例如(牛奶,啤酒,尿布))。k-物品集是包含k個物品的集合。給定物品的頻繁度被稱之為支持量(比如:(牛奶,啤酒,尿布)=131)。并且物品集的支持度是包含它的事務的比例(例如:(牛奶,啤酒,尿布)=0.12)。頻繁物品集是支持度
大于或等于最小支持度閾值的物品集。關聯規則是公式$X\Rightarrow Y$公式的表達式,其中X和Y是物品集(例如:牛奶,尿布$\Rightarrow$啤酒)。
給定一組事務集合$T$,關聯規則挖掘的目標是發現具有支持度$\geq$最小支持度閾值以及置信度$\geq$最小置信度閾值的所有規則。由于暴力計算開銷巨大,我們采用兩步方法:(1)產生了所有支持度$\geq$ 最小支持度的物品集(頻繁項集生成)。(2)從每一頻繁物品集中產生高置信規則(規則產生)。
有幾個技術來優化頻繁物品集的產生。在一個廣泛的意義上,它們可以被分成這些:嘗試最小化候選集數量(M),降低事務量(N),降低比較量數量(NM)。但是最常用的方法是使用先驗規
則來降低候選數量。這個原則表明如果物品集是頻繁的,那么所有的子集也是頻繁的。支持度的衡量標準已經驗證了這一點,因為一個物品集的支持度永遠不會超過它子集的支持度。Apriori算法是這個規則實際的實現。
給定一個頻繁集L,產生規則時的目的是發現所有滿足最小的置信度需求的非空子集。如果$|L|=k$,那么有$2k2$條候選關聯規則。因此,在生成頻繁物品集時,需要找到高效的方法來生成規則。對于Apriori算法,我們能通過合并規則結果中共用相同前綴的兩個規則來產生候選規則。
關聯規則在發現模式和推動個性化市場營銷方面的顯著效果聞名已久了。但是,盡管這些方法和推薦系統的目標之間有明顯的關聯,但是它們還是沒有成為主流。主要原因是這種方法類似于基于物品的CF但缺少靈活性,因為它需要事務這個明確的概念--事件共同出現在某個給定的會話中。
總結
本章介紹了在設計推薦系統中可能用到的主要的數據挖掘方法和技術。我們也總結了在文獻中提到的用法,提供了如何以及在哪用到它們一些粗略指導。