ALS算法讲解
Kendall秩相關(guān)系數(shù)(Kendall rank correlation coefficient)
對于秩變量對:
?
?
?
?
注:Sir Maurice George Kendall,1907~1983,英國統(tǒng)計(jì)學(xué)家。這個(gè)人職業(yè)生涯的大部分時(shí)間都是一個(gè)公務(wù)員,二戰(zhàn)期間出任英國船運(yùn)協(xié)會(huì)副總經(jīng)理。1949年以后擔(dān)任倫敦大學(xué)教授。
參見:
https://en.wikipedia.org/wiki/Kendall_rank_correlation_coefficient
Tanimoto系數(shù)
?
?
該系數(shù)由Taffee T. Tanimoto于1960年提出。Tanimoto生平不詳,從名字來看,應(yīng)該是個(gè)日本人。在其他領(lǐng)域,它還有另一個(gè)名字Jaccard similarity coefficient。(兩者的系數(shù)公式一致,但距離公式略有差異。)
注:Paul Jaccard,1868~1944,蘇黎世聯(lián)邦理工學(xué)院(ETH Zurich)博士,蘇黎世聯(lián)邦理工學(xué)院植物學(xué)教授。ETH Zurich可是出了24個(gè)諾貝爾獎(jiǎng)得主的。
參見:
https://en.wikipedia.org/wiki/Jaccard_index
ALS算法原理
http://www.cnblogs.com/luchen927/archive/2012/02/01/2325360.html
上面的網(wǎng)頁概括了ALS算法出現(xiàn)之前的協(xié)同過濾算法的概況。
ALS算法是2008年以來,用的比較多的協(xié)同過濾算法。它已經(jīng)集成到Spark的Mllib庫中,使用起來比較方便。
從協(xié)同過濾的分類來說,ALS算法屬于User-Item CF,也叫做混合CF。它同時(shí)考慮了User和Item兩個(gè)方面。
用戶和商品的關(guān)系,可以抽象為如下的三元組:<User,Item,Rating>。其中,Rating是用戶對商品的評(píng)分,表征用戶對該商品的喜好程度。
假設(shè)我們有一批用戶數(shù)據(jù),其中包含m個(gè)User和n個(gè)Item,則我們定義Rating矩陣,其中的元素表示第u個(gè)User對第i個(gè)Item的評(píng)分。
在實(shí)際使用中,由于n和m的數(shù)量都十分巨大,因此R矩陣的規(guī)模很容易就會(huì)突破1億項(xiàng)。這時(shí)候,傳統(tǒng)的矩陣分解方法對于這么大的數(shù)據(jù)量已經(jīng)是很難處理了。
另一方面,一個(gè)用戶也不可能給所有商品評(píng)分,因此,R矩陣注定是個(gè)稀疏矩陣。矩陣中所缺失的評(píng)分,又叫做missing item。
針對這樣的特點(diǎn),我們可以假設(shè)用戶和商品之間存在若干關(guān)聯(lián)維度(比如用戶年齡、性別、受教育程度和商品的外觀、價(jià)格等),我們只需要將R矩陣投射到這些維度上即可。這個(gè)投射的數(shù)學(xué)表示是:
?
?
這里的表明這個(gè)投射只是一個(gè)近似的空間變換。
不懂這個(gè)空間變換的同學(xué),可參見《機(jī)器學(xué)習(xí)(十二)》中的“奇異值分解”的內(nèi)容,或是本節(jié)中的“主成分分析”的內(nèi)容。
一般情況下,k的值遠(yuǎn)小于n和m的值,從而達(dá)到了數(shù)據(jù)降維的目的。
幸運(yùn)的是,我們并不需要顯式的定義這些關(guān)聯(lián)維度,而只需要假定它們存在即可,因此這里的關(guān)聯(lián)維度又被稱為Latent factor。k的典型取值一般是20~200。
這種方法被稱為概率矩陣分解算法(probabilistic matrix factorization,PMF)。ALS算法是PMF在數(shù)值計(jì)算方面的應(yīng)用。
為了使低秩矩陣X和Y盡可能地逼近R,需要最小化下面的平方誤差損失函數(shù):
?
?
考慮到矩陣的穩(wěn)定性問題,使用Tikhonov regularization,則上式變?yōu)?#xff1a;
?
?
優(yōu)化上式,得到訓(xùn)練結(jié)果矩陣。預(yù)測時(shí),將User和Item代入,即可得到相應(yīng)的評(píng)分預(yù)測值。
同時(shí),矩陣X和Y,還可以用于比較不同的User(或Item)之間的相似度,如下圖所示:
?
ALS算法的缺點(diǎn)在于:
1.它是一個(gè)離線算法。
2.無法準(zhǔn)確評(píng)估新加入的用戶或商品。這個(gè)問題也被稱為Cold Start問題。
ALS算法優(yōu)化過程的推導(dǎo)
公式2的直接優(yōu)化是很困難的,因?yàn)閄和Y的二元導(dǎo)數(shù)并不容易計(jì)算,這時(shí)可以使用類似坐標(biāo)下降法的算法,固定其他維度,而只優(yōu)化其中一個(gè)維度。
對求導(dǎo),可得:
?
?
令導(dǎo)數(shù)為0,可得:
?
?
同理,對求導(dǎo),由于X和Y是對稱的,因此可得類似的結(jié)論:
?
?
因此整個(gè)優(yōu)化迭代的過程為:
1.隨機(jī)生成X、Y。(相當(dāng)于對迭代算法給出一個(gè)初始解。)?
Repeat until convergence {?
2.固定Y,使用公式3更新。?
3.固定X,使用公式4更新。?
}
一般使用RMSE(root-mean-square error)評(píng)估誤差是否收斂,具體到這里就是:
?
?
其中,N為三元組<User,Item,Rating>的個(gè)數(shù)。當(dāng)RMSE值變化很小時(shí),就可以認(rèn)為結(jié)果已經(jīng)收斂。
算法復(fù)雜度:
1.求:
2.求:
可以看出當(dāng)k一定的時(shí)候,這個(gè)算法的復(fù)雜度是線性的。
因?yàn)檫@個(gè)迭代過程,交替優(yōu)化X和Y,因此又被稱作交替最小二乘算法(Alternating Least Squares,ALS)。
隱式反饋
用戶給商品評(píng)分是個(gè)非常簡單粗暴的用戶行為。在實(shí)際的電商網(wǎng)站中,還有大量的用戶行為,同樣能夠間接反映用戶的喜好,比如用戶的購買記錄、搜索關(guān)鍵字,甚至是鼠標(biāo)的移動(dòng)。我們將這些間接用戶行為稱之為隱式反饋(implicit feedback),以區(qū)別于評(píng)分這樣的顯式反饋(explicit feedback)。
隱式反饋有以下幾個(gè)特點(diǎn):
1.沒有負(fù)面反饋(negative feedback)。用戶一般會(huì)直接忽略不喜歡的商品,而不是給予負(fù)面評(píng)價(jià)。
2.隱式反饋包含大量噪聲。比如,電視機(jī)在某一時(shí)間播放某一節(jié)目,然而用戶已經(jīng)睡著了,或者忘了換臺(tái)。
3.顯式反饋表現(xiàn)的是用戶的喜好(preference),而隱式反饋表現(xiàn)的是用戶的信任(confidence)。比如用戶最喜歡的一般是電影,但觀看時(shí)間最長的卻是連續(xù)劇。大米購買的比較頻繁,量也大,但未必是用戶最想吃的食物。
4.隱式反饋非常難以量化。
ALS-WR
針對隱式反饋,有ALS-WR算法(ALS with Weighted--Regularization)。
首先將用戶反饋分類:
?
?
但是喜好是有程度差異的,因此需要定義程度系數(shù):
?
?
這里的表示原始量化值,比如觀看電影的時(shí)間;
這個(gè)公式里的1表示最低信任度,表示根據(jù)用戶行為所增加的信任度。
最終,損失函數(shù)變?yōu)?#xff1a;
?
?
除此之外,我們還可以使用指數(shù)函數(shù)來定義:
?
?
ALS-WR沒有考慮到時(shí)序行為的影響,時(shí)序行為相關(guān)的內(nèi)容,可參見:
http://www.jos.org.cn/1000-9825/4478.htm
參考
參考論文:
《Large-scale Parallel Collaborative Filtering forthe Netflix Prize》
《Collaborative Filtering for Implicit Feedback Datasets》
《Matrix Factorization Techniques for Recommender Systems》
其他參考:
http://www.jos.org.cn/html/2014/9/4648.htm
http://www.fuqingchuan.com/2015/03/812.html
http://www.docin.com/p-714582034.html
http://www.tuicool.com/articles/fANvieZ
http://www.68idc.cn/help/buildlang/ask/20150727462819.html
總結(jié)
- 上一篇: SPARK RDD JAVA API 用
- 下一篇: RDD的几种创建方式