Collaborative Filter - Data Mining基础(ACM暑校)
2003年,Amazon公司的Linden、Smith、York大佬刊發(fā)了一篇名為《Item-to-Item Collaborative Filtering》的文章;這篇文章首次解釋了Amazon公司商品推薦系統(tǒng)的原理。從那時起,這類算法就一直主導(dǎo)著推薦領(lǐng)域。無論是Netflix、Amazon還是Facebook,每一個擁有大量用戶群的網(wǎng)站或應(yīng)用程序都會使用某種形式的協(xié)同過濾算法來推薦產(chǎn)品(可能是電影、產(chǎn)品或社交)。協(xié)同過濾試圖利用社交網(wǎng)絡(luò)的力量提供可靠、相關(guān)、有時甚至令人驚喜的推薦。如果Alice和Bob在很大程度上喜歡同一部電影(比如The Lion King、Aladdin和Toy Story),而愛麗絲也喜歡Finding Nemo,那么沒有看過Finding Nemo鮑勃很可能也會喜歡。這樣的推薦結(jié)果往往符合一類群體的訴求。為了構(gòu)建穩(wěn)定的、良好的協(xié)同濾波推薦算法,掌握最基本的Data Mining算法是必須的。今天學(xué)習(xí)主要關(guān)注以下部分:
- 相似性測度Similarity measures:對于兩個產(chǎn)品,如何從數(shù)學(xué)上量化它們之間有多不同或相似?相似性度量有助于我們回答這個問題。在ACM暑校培訓(xùn)構(gòu)建內(nèi)容推薦引擎時,已經(jīng)使用了相似性度量(余弦分數(shù))。今天又學(xué)到了更多的相似性分數(shù)測度方法~~
- 數(shù)據(jù)降維Dimensionality reduction:在構(gòu)建協(xié)同濾波推薦算法時,通常要處理數(shù)百萬用戶對數(shù)百萬個產(chǎn)品的評級。在這種情況下,用戶和產(chǎn)品向量的維度將達到數(shù)百萬。為了提高推薦模型的性能、加快計算速度并避免維度爆炸的詛咒,通常最好在保留大部分信息的同時大幅減少維度的數(shù)量。
- 監(jiān)督學(xué)習(xí)Supervised learning:監(jiān)督學(xué)習(xí)是一類機器學(xué)習(xí)算法,它利用標簽數(shù)據(jù)推斷出一個映射函數(shù),然后用它來預(yù)測未標記數(shù)據(jù)的標簽(或類)。這里將研究一些最流行的監(jiān)督學(xué)習(xí)算法,例如支持向量機、邏輯回歸、決策樹和嵌套。
- 聚類Clustering:聚類是一種無監(jiān)督學(xué)習(xí),算法試圖將所有數(shù)據(jù)點劃分成一定數(shù)量的聚類。因此,在不使用標簽數(shù)據(jù)集的情況下,聚類算法能夠?qū)㈩惙峙浣o所有未標記的點。在本文中,我們將研究k-means聚類,這是一種簡單但功能強大的算法,廣泛應(yīng)用于協(xié)同過濾推薦算法中。
- 評估方法Evaluation methods:用于衡量這些算法性能的評估指標。這些指標包括準確性accuracy、精確性precision、召回率recall、F1 score等。
1. 問題背景
第i個用戶與第j個產(chǎn)品組成的評級矩陣,利用rij表示協(xié)同過濾算法試圖解決預(yù)測問題。換句話說,我們得到一個i用戶和j產(chǎn)品的矩陣。第i行和第j列中的值(用rij表示)表示用戶i對第j項給出的評級。我們的工作是完成這個矩陣。換句話說,我們需要預(yù)測矩陣中沒有數(shù)據(jù)的所有單元格。例如,在前面的圖中,我們被要求預(yù)測用戶e是否喜歡音樂播放器項。為了完成這項任務(wù),有些評級是可用的(例如用戶A喜歡音樂播放器和視頻游戲),而其他評級則不可用(例如,我們不知道用戶C和D是否喜歡游戲)。
2. 相似性測度
從前面的評分矩陣中,我們看到每個用戶都可以表示為一個j維向量,其中第k維表示該用戶對第k個產(chǎn)品的評分。假設(shè)1表示相似,-1表示不喜歡,0表示沒有評級。因此,用戶B的偏好向量可以表示為(0,1,-1,-1)。同理,每一個產(chǎn)品也可以表示為一個i維的向量,其中第k個維度表示第k個用對該產(chǎn)品的評級。因此,上圖中游戲這個產(chǎn)品可以表示為(1,-1,0,0,-1)。
- 歐氏距離?Euclidean distance
歐幾里得距離可以定義為連接在n維笛卡爾平面上繪制的兩個數(shù)據(jù)點的線段長度。歐幾里得分數(shù)可以取0到無窮大之間的任何值。歐幾里得分數(shù)(或距離)越低,兩個向量之間越相似。
import numpy as npdef euclidean(v1, v2):diff = np.power(np.array(v1)- np.array(v2), 2)sigma_val = np.sum(diff)euclid_score = np.sqrt(sigma_val)return euclid_scoreu1 = [5,1,2,4,5] u2 = [1,5,4,2,1] euclidean(u1,u2)>>> output : 7.483314773547883- 皮爾遜相關(guān)系數(shù)?Pearson correlation
考慮兩個用戶,Alice和Bob,他們同時給相同的五部電影打分。Alice對她的收視率非常吝嗇,對任何電影都不超過4分。另一方面,Bob比較開明,在給電影打分時從不給低于2分的分數(shù)。計算他們之間的的歐幾里得距離如下:
alice = [1,1,3,2,4] bob = [2,2,4,3,5] euclidean(alice, bob)>>> output : 2.2360679774997898歐幾里得距離約為2.23。然而,仔細觀察后,我們發(fā)現(xiàn)Bob的評分總是比Alice高。因此,我們可以說Alice和Bob的評分是極為相關(guān)的。換句話說,如果我們知道Alice對一部電影的評價,我們可以高精度地計算Bob對同一部電影的評價(在本例中,只需添加1)。考慮相反的情況,假設(shè)Eve的電影偏好與Alice極端地相反:
eve = [5,5,3,4,2] euclidean(eve, alice)>>> output : 6.324555320336759歐拉分數(shù)高達6.32分,表明這兩個人非常不同。雖然一個人的評級非常不同,但可以用來準確預(yù)測另一個人的相應(yīng)評級。從數(shù)學(xué)上講,認為Alice和Eve的評分有很強的負相關(guān)。
歐幾里得距離強調(diào)幅度,在這個例子中,不能很好地度量兩個用戶相似或不同的程度。Pearson相關(guān)性正可以彌補這個缺陷。Pearson相關(guān)性是-1和1之間的一個分數(shù),其中-1表示總負相關(guān)(與Alice和Eve的情況一樣),1表示總正相關(guān)(與Alice和Bob的情況一樣),而0表示兩個實體之間沒有任何關(guān)聯(lián)(或相互獨立)。
from scipy.stats import pearsonr pearsonr(alice, bob) pearsonr(alice, eve)>>> output : (1.0, 0.0) (-1.0, 0.0)- 余弦相似性?Cosine similarity
余弦相似度分數(shù)計算N維空間中兩個向量之間角度的余弦。當(dāng)余弦分數(shù)為1(或角度為0)時,向量完全相似。另一方面,余弦分數(shù)為-1(或角度180度)表示這兩個向量完全不同。不同的相似性評分適用于不同的場景。對于幅度很重要的情況,歐幾里得距離是一個合適的度量標準。然而,正如在皮爾遜相關(guān)小節(jié)中所描述的案例中所看到的,幅度對我們來說不如相關(guān)性重要。因此,在構(gòu)建協(xié)同過濾推薦算法時,使用Pearson和余弦相似性分數(shù)是最常用的手段。
3. 聚類?Clusterin
協(xié)作過濾背后的一個主要想法是,如果用戶A對產(chǎn)品的看法與用戶B相同,那么A對另一個產(chǎn)品的看法也比隨機選擇的用戶更可能與B相同。聚類是協(xié)同過濾算法中最常用的技術(shù)之一。它是一種無監(jiān)督的學(xué)習(xí),將數(shù)據(jù)點分組到不同的類中,使屬于特定類的數(shù)據(jù)點比屬于不同類的數(shù)據(jù)點更相似。這里重點介紹K-means聚類方法。
- k均值聚類?k-means clustering
k均值算法是目前最簡單、最流行的機器學(xué)習(xí)算法之一。它以數(shù)據(jù)點和簇數(shù)k作為輸入。接下來,它在平面上隨機繪制k個質(zhì)心。在隨機繪制K個質(zhì)心之后,重復(fù)執(zhí)行以下兩個步驟,直到K個質(zhì)心集不再發(fā)生變化。①?將數(shù)據(jù)點指定給質(zhì)心:將每個數(shù)據(jù)點指定給與其最近的質(zhì)心。分配給特定質(zhì)心的數(shù)據(jù)點集合稱為簇。因此,對K個質(zhì)點的分配導(dǎo)致了K簇的形成;②?質(zhì)心的重新分配:在下一步中,將每個簇的質(zhì)心重新計算為簇的中心(或簇中所有點的平均值)。然后將所有數(shù)據(jù)點重新分配給新的質(zhì)心。
k=2情況下,k-means聚類算法的可視化效果 # generating three clusters from sklearn.datasets.samples_generator import make_blobs import matplotlib.pyplot as plt X, y = make_blobs(n_samples=300, centers=3, cluster_std=0.50, random_state=0) plt.scatter(X[:,0],X[:,1], s=50) plt.show()# using k-means cluster from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=3, init='random', max_iter=10) kmeans.fit(X) y_pred = kmeans.predict(X) plt.scatter(X[:,0], X[:,1], c=y_pred, s=50) centroids = kmeans.cluster_centers_ plt.scatter(centroids[:, 0], centroids[:, 1], c='black', s=100, marker='X') plt.show() 3-cluster數(shù)據(jù)生成 -> k-means聚類結(jié)果- 其他的聚類算法?Other clustering algorithms
k均值算法雖然功能強大,但并不適用于所有場合(針對cluster呈現(xiàn)高斯分布或近似高斯分布效果最好)。特例如下:
2-moon-shaped -> k-means cluster結(jié)果 -> spectral cluster結(jié)果 # generating moon-shape samples from sklearn.datasets import make_moons x_m, y_m = make_moons(300, noise=0.05, random_state=0) plt.scatter(x_m[:,0], x_m[:,1], s=50) plt.show()# using k-means cluster kmm = KMeans(n_clusters=2, init='random', max_iter=10) kmm.fit(x_m) y_m_pred = kmm.predict(x_m) plt.scatter(x_m[:,0], x_m[:,1], c=y_m_pred, s=50) centroids = kmm.cluster_centers_ plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=100, marker='X') plt.show()# using spectral cluster from sklearn.cluster import SpectralClustering model = SpectralClustering(n_clusters=2, affinity='nearest_neighbors') y_m_sc = model.fit_predict(x_m) plt.scatter(x_m[:,0], x_m[:,1], c=y_m_sc, s=50) plt.show()4. 降維?Dimensionality reduction
隨著數(shù)據(jù)的維度數(shù)量增加,大多數(shù)機器學(xué)習(xí)算法往往表現(xiàn)不佳。這種現(xiàn)象通常被稱為維數(shù)災(zāi)難。因此,最好減少數(shù)據(jù)中特征的數(shù)量,同時保留盡可能多的信息。實現(xiàn)這一點有兩種方法
① 特征選擇?Feature selection:該方法包括識別預(yù)測能力最低的特征,并將它們?nèi)縿h除。因此,特征選擇涉及到識別對于特定場景最重要的特征子集。特征選擇的一個重要區(qū)別是它保持了每個被保留特征的原始含義。例如,假設(shè)有一個包含價格、面積和房間數(shù)量的住房數(shù)據(jù)集作為特征。現(xiàn)在,如果我們要取消區(qū)域功能,剩余的價格和房間數(shù)量功能仍然意味著它們最初的功能。
② 特征提取?Feature extraction:特征提取接收M維數(shù)據(jù)并將其轉(zhuǎn)換為N維輸出空間(通常M>>N),同時保留大部分信息。然而,在這樣做的過程中,它創(chuàng)建了沒有內(nèi)在含義的新特性。例如,如果使用相同的住房數(shù)據(jù)集并使用特征提取將其輸出到二維空間中,那么新的特征并不意味著價格、面積或房間數(shù)量。
在不討論深度模型(DeepLearning)之前,常用的數(shù)據(jù)降維方法就是主成分分析Principle Component Analysis。
- 主成分分析 Principle Component Analysis
主成分分析是一種無監(jiān)督特征提取算法,它采用m維輸入來創(chuàng)建一組n(m>>n)線性不相關(guān)變量(稱為主成分),使得n維由于(m-n)維的丟失而損失盡可能小的方差(或信息)。PCA中的線性變換是這樣進行的:第一個主分量保持最大方差(或信息)。它是通過考慮那些相互高度相關(guān)的變量來實現(xiàn)的。每個主成分比每個后續(xù)成分都有更多的方差,并且與前面的成分是正交的。一個基因分析的例子如下:
其他的降維方法如Linear-discriminant analysis、Singular value decomposition因為用的比較少,這里先不做展開討論。
5. 監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)是一類機器學(xué)習(xí)算法,它以一系列向量及其相應(yīng)的輸出(連續(xù)值或類)作為輸入,生成一個可用于映射新實例的推斷函數(shù)。使用監(jiān)督學(xué)習(xí)的一個重要前提是標記數(shù)據(jù)的可用性。換句話說,我們有必要訪問已經(jīng)知道正確輸出的輸入。監(jiān)督學(xué)習(xí)可以分為兩類:分類和回歸。分類問題有一組離散的值作為目標變量(例如,喜歡和不喜歡),而回歸問題有一個連續(xù)的值作為目標(例如,平均評級在1到5之間)。考慮前面定義的評級矩陣。可以將(m-1)列作為輸入,將m-th列作為目標變量。這樣,應(yīng)該可以通過傳遞相應(yīng)的(m-1)維向量來預(yù)測m-th列中的不存在的值。監(jiān)督學(xué)習(xí)是機器學(xué)習(xí)中最成熟的子領(lǐng)域之一,因此,有許多有效的算法可用于執(zhí)行精確的預(yù)測。這里只介紹在各種應(yīng)用程序(包括協(xié)作過濾)中成功使用的一些最流行的算法,當(dāng)然仍不包含深度學(xué)習(xí)模型。
- k最近鄰?k-nearest neighbors
k-最近鄰(kNN)可能是最簡單的機器學(xué)習(xí)算法。在分類情況下,它通過K最近鄰的多數(shù)投票結(jié)果,將一個類分配給特定的數(shù)據(jù)點。換言之,數(shù)據(jù)點被分配給K最近鄰中最常見的類。在回歸情況下,根據(jù)目標變量的k-最近鄰計算目標變量的平均值。與大多數(shù)機器學(xué)習(xí)算法不同,KNN本質(zhì)上是非參數(shù)的和懶惰的。前者意味著KNN不會對數(shù)據(jù)的分布做出任何基礎(chǔ)假設(shè)。換句話說,模型結(jié)構(gòu)完全由數(shù)據(jù)決定。后者意味著K-NN幾乎不需要任何的訓(xùn)練。它只在預(yù)測階段計算特定點的k-最近鄰。
- 支持向量機?Support vector machines
支持向量機是目前工業(yè)上應(yīng)用最廣泛的分類算法之一。它以一個n維數(shù)據(jù)集作為輸入,并以類的最大間隔的方式構(gòu)造(n-1)維超平面。以上圖數(shù)據(jù)的二分類為例;他存在三個可能的超平面(直線),把數(shù)據(jù)分成兩個類。很明顯,實線是具有最大的類間隔。換句話說,這個超平面最大限度地分隔了這兩個類。超平面下的任何點都將被劃分為一個紅色的正方形,而上面的任何點都將被劃分為一個藍色的圓。SVM模型只依賴于支持向量;這些點決定了兩個類之間可能的最大邊界。上圖中,實心的正方形和圓形是支持向量,其余數(shù)據(jù)點對SVM模型并沒有任何貢獻。其實,通過核函數(shù)技巧(如高斯徑向核),SVM模型非常適合非線性數(shù)據(jù)分類,這也是在深度模型出現(xiàn)之前,SVM備受算法研究人員青睞的原因。
- Ensembling -?Bagging and random forests
集成背后的主要思想是多個算法的預(yù)測能力遠遠大于單個算法。決策樹是構(gòu)建集成模型時最常用的基礎(chǔ)算法。Bagging是bootstrap aggregating的簡稱。與大多數(shù)其他集成方法一樣,對大量基本分類模型進行平均,并對結(jié)果平均,以實現(xiàn)最終預(yù)測。建立一個bagging模型可以遵循以下步驟:①自助采樣;②挑選基類分類器,如決策樹,并利用采樣后的數(shù)據(jù)進行訓(xùn)練;③重復(fù)訓(xùn)練N個模型,最終的模型輸出就是N個分類器的平均輸出。Bagging模型的代表是隨機森林。除了采樣數(shù)據(jù)點之外,隨機森林集成方法還強制每個基礎(chǔ)分類器隨機選擇特征子集(通常是等于特征總數(shù)平方根的數(shù)字)。選擇樣本的子集以及特征來構(gòu)建基礎(chǔ)決策樹,極大地增強了每一棵樹的隨機性。這反過來又增加了隨機林的魯棒性,并允許它在有噪聲數(shù)據(jù)的情況下運行得非常好。此外,從特征子集構(gòu)建基礎(chǔ)分類器并分析它們對最終預(yù)測的貢獻,允許隨機森林確定每個特征的重要性。因此,可以使用隨機森林進行特征選擇。
- Ensembling -?Boosting?
由于自助采樣的原因,Bagging和隨機森林模型所訓(xùn)練的基礎(chǔ)分類器是完全彼此依賴的。這個時候Boosting就派上用場了。與隨機森林一樣,Boosting模型使用樣本和特征的子集構(gòu)建基礎(chǔ)分類模型。不同的是,在構(gòu)建下一個基礎(chǔ)分類器的同時,Boosting模型試圖糾正前一個分類器所犯的錯誤。不同的提升算法以不同的方式實現(xiàn)這一點。Boosting一類算法性能非常強大。常常應(yīng)用在數(shù)據(jù)科學(xué)研究領(lǐng)域。
總結(jié)
以上是生活随笔為你收集整理的Collaborative Filter - Data Mining基础(ACM暑校)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EmEditor Professiona
- 下一篇: 《南方都市报》:中国互联网“公共性”正在