1 推薦系統(tǒng)基礎(chǔ)##
1.1 個(gè)性化推薦概述###
1.1.1 推薦系統(tǒng)概述
首先,需要申明一點(diǎn)的就是推薦系統(tǒng)!=推薦算法。推薦系統(tǒng)是一套完善的推薦機(jī)制澡绩,包括前期數(shù)據(jù)的準(zhǔn)備、具體推薦的過(guò)程(這個(gè)過(guò)程可能是一套復(fù)雜的算法模型俺附,也可能是一個(gè)簡(jiǎn)單的規(guī)則英古,也可能是多種模型的混合結(jié)果等等)、后期數(shù)據(jù)的預(yù)測(cè)昙读、AB測(cè)試效果評(píng)估等等。
1.1.2 推薦算法模型概述
在算法模型上大體可以分:基于內(nèi)容的推薦膨桥、基于協(xié)同過(guò)濾的推薦蛮浑。
基于內(nèi)容推薦,即通過(guò)內(nèi)容本身的屬性只嚣,然后計(jì)算內(nèi)容的相似性沮稚,找到與某物品屬性相似的物品。協(xié)同過(guò)濾册舞,所謂協(xié)同過(guò)濾蕴掏,即不依賴于物品本身的物品屬性,而是通過(guò)其他相關(guān)特征,例如人參與的行為數(shù)據(jù)盛杰,來(lái)達(dá)到推薦物品的目的挽荡。
關(guān)于協(xié)同過(guò)濾,又分為以下幾個(gè)類別:基于物品的協(xié)同即供,即ItemCF定拟;基于用于的協(xié)同,即UserCF逗嫡;基于模型的協(xié)同青自,即ModelCF。
其中驱证,基于模型的協(xié)同又可以分為以下幾種類型:基于距離的協(xié)同過(guò)濾延窜;基于矩陣分解的協(xié)同過(guò)濾,即Latent Factor Model(SVD)抹锄;基于圖模型協(xié)同逆瑞,即Graph,也叫社會(huì)網(wǎng)絡(luò)圖模型祈远。
1.2 基于內(nèi)容的推薦###
其實(shí)但從字面上也好理解呆万,其推薦的依據(jù)為物品的內(nèi)容,即物品的具體相關(guān)屬性车份。換言之谋减,即我們希望找到的是跟當(dāng)前物品相似的物品。
那么扫沼,我們的目標(biāo)就明確了出爹,計(jì)算當(dāng)前物品與其他物品的相似度,然后生成一個(gè)相似TopN列表缎除,然后想要多少個(gè)推薦多少個(gè)严就。
通常我們會(huì)有以下兩種方式來(lái)計(jì)算相似度:通過(guò)物品間的距離去度量相似;通過(guò)直接計(jì)算相似度器罐。
1.2.1 計(jì)算物品距離的幾種方法
(1) 歐幾里得距離(Euclidean Distance)
最常見(jiàn)的距離度量方式梢为,衡量多維空間中兩點(diǎn)之間的絕對(duì)距離,要求維度的統(tǒng)一轰坊。
(2) 明可夫斯基距離(Minkowski Distance)
明氏距離是歐氏距離的擴(kuò)展铸董,是對(duì)多個(gè)距離度量公式的概括性的表述(可以看到,當(dāng)p=2時(shí)肴沫,其實(shí)就是歐式距離)粟害。
(3) 曼哈頓距離(Manhattan Distance)
曼哈頓距離來(lái)源于城市區(qū)塊距離,是將多個(gè)維度上的距離進(jìn)行求和后的結(jié)果颤芬,即當(dāng)上面的明氏距離中p=1時(shí)得到的距離度量悲幅。
還有其他的一些距離度量套鹅,但是都不太常用,最常用的依然是歐式距離度量汰具。
1.2.2 計(jì)算相似度量的幾種方法
(1) 向量空間余弦相似度(Cosine Similarity)
余弦相似度用向量空間中兩個(gè)向量夾角的余弦值作為衡量?jī)蓚€(gè)個(gè)體間差異的大小卓鹿。相比距離度量,余弦相似度更加注重兩個(gè)向量在方向上的差異郁副,而非距離或長(zhǎng)度上减牺。
(2) 皮爾森相關(guān)系數(shù)(Pearson Correlation Coefficient)
即相關(guān)分析中的相關(guān)系數(shù)r,分別對(duì)X和Y基于自身總體標(biāo)準(zhǔn)化后計(jì)算空間向量的余弦?jiàn)A角存谎。
基于內(nèi)容的推薦拔疚,還有一點(diǎn)需要注意的就是,對(duì)于物品自身屬性既荚,如果屬性值過(guò)少稚失,我們需要適當(dāng)進(jìn)行擴(kuò)大維度,如果維度過(guò)多恰聘,則需要進(jìn)行降維句各。
關(guān)于降維和升維,都是一個(gè)很大的研究方向晴叨,大體上可以說(shuō)一下幾種常見(jiàn)的方式凿宾。例如降維,我們可以進(jìn)行維度聚類兼蕊、主題抽取初厚,進(jìn)一步把相關(guān)維度進(jìn)行合并,進(jìn)一步減少維度孙技;而對(duì)于升維产禾,我們可以把維度進(jìn)行矩陣化,例如假設(shè)物品X有A和B兩個(gè)維度屬性牵啦,那么我們通過(guò)生成AB矩陣的方式亚情,把維度擴(kuò)充到AB個(gè)維度。
1.3 基于協(xié)同過(guò)濾的推薦###
1.3.1 基于用戶的協(xié)同(UserCF)
基于用戶的協(xié)同過(guò)濾哈雏,即我們希望通過(guò)用戶之間的關(guān)系來(lái)達(dá)到推薦物品的目的楞件,于是,給某用戶推薦物品裳瘪,即轉(zhuǎn)換為尋找為這個(gè)用戶尋找他的相似用戶履因,然后相似用戶喜歡的物品,那么也可能是這個(gè)用戶喜歡的物品(當(dāng)然會(huì)去重)盹愚。
來(lái)看一個(gè)表格:
用戶/物品 物品A? 物品B? 物品C? 物品D
用戶A? ? ? ? Y? ? ? ? ? ?? ? ? ? Y? ? ? ? ? 站故?
用戶 B? ? ? -? ? ? ? ? Y? ? ? ? ? –
用戶C? ? ? ? Y? ? ? ? ? -? ? ? ? ? Y? ? ? ? ? Y
其中Y表示對(duì)應(yīng)用戶喜歡對(duì)應(yīng)物品皆怕,-表示無(wú)交集毅舆,?表示需不需要推薦愈腾。
這是一個(gè)最簡(jiǎn)單的例子憋活,其實(shí)目的很簡(jiǎn)單,我們需要給用戶A推薦物品虱黄,而且可以看到悦即,用戶已經(jīng)喜歡了物品A和物品C,其實(shí)剩下也就B和D了橱乱,要么是B辜梳,要么是D。
那么根據(jù)UserCF算法泳叠,我們先計(jì)算用戶A與用戶BC之間的相似度作瞄,計(jì)算相似,我們前文說(shuō)了危纫,要么距離宗挥,要么余弦?jiàn)A角。
假如我們選擇計(jì)算夾角(四維):cosAB=0(90度的夾角)种蝶,cosAC=0.8199(角度自己算吧)契耿。所以相比來(lái)說(shuō),我們會(huì)發(fā)現(xiàn)用戶A與用戶C的相似度是稍微大一些的螃征。于是搪桂,我們觀察用戶C都喜歡了哪些物品,然后與用戶的去重会傲,然后會(huì)發(fā)現(xiàn)該給用戶A推薦物品D锅棕。
簡(jiǎn)單來(lái)講,UserCF就是如上過(guò)程淌山,但在實(shí)際的過(guò)程中裸燎,數(shù)據(jù)量肯定不止這么點(diǎn),于是我們需要做的是為用戶計(jì)算出相似用戶列表泼疑,然后在相似用戶中經(jīng)過(guò)去重之后德绿,計(jì)算一個(gè)推薦的物品列表(在計(jì)算推薦物品的時(shí)候,可以疊加用戶的相似程度進(jìn)一步疊加物品的權(quán)重)退渗。
然后在喜歡物品的表達(dá)形式上移稳,可以是如上的這種二值分類,即Yes Or No会油,也可以是帶有評(píng)分的程度描述个粱,比如對(duì)于某個(gè)物品打多少分的這種表現(xiàn)形式。這樣的話翻翩,針對(duì)于后一種情況都许,我們就需要在求在計(jì)算相似度時(shí)稻薇,加入程度的權(quán)重考量。
1.3.2 基于物品的協(xié)同(ItemCF)
不同于基于用戶的協(xié)同胶征,這里塞椎,我們計(jì)算的是物品之間的相似度弟劲,但是嗡载,請(qǐng)注意袒啼,我們計(jì)算物品相似度的時(shí)候念搬,與直接基于物品相似度推薦不同是读整,我們所用的特征并不是物品的自身屬性巡雨,而依然是用戶行為睛竣。
用戶/物品物品A物品B物品C
用戶AY-Y
用戶BYYY
用戶CY漫雕?急波?
其中Y表示對(duì)應(yīng)用戶喜歡對(duì)應(yīng)物品从铲,-表示無(wú)交集,澄暮?表示需不需要推薦名段。
同樣,這是一個(gè)簡(jiǎn)單實(shí)例泣懊。目的也明確伸辟,我們?cè)谥烙脩鬉B喜歡某些物品情況,以及在用戶C已經(jīng)喜歡物品C的前提下馍刮,為用戶C推薦一個(gè)物品信夫。
看表格很簡(jiǎn)單嘛。只有兩個(gè)選項(xiàng)卡啰,要么物品B静稻,要么物品C。那么到底是物品B還是物品C呢匈辱?
我們來(lái)計(jì)算物品A與其他兩種物品的相似度振湾,計(jì)算向量夾角。對(duì)于用戶A亡脸,物品A與物品B押搪,則對(duì)于AB向量為(1,0),(1,1),對(duì)于AC向量為(1,1),(1,1)浅碾,分別計(jì)算夾角cosAB=0.7,cosAC=1大州。或者用類似關(guān)聯(lián)規(guī)則的方法垂谢,計(jì)算兩者之間的共現(xiàn)厦画,例如AB共現(xiàn)1次,AC共現(xiàn)2次滥朱。通過(guò)類似這種方式根暑,我們就知道物品A與物品C在某種程度上是更相似的娃豹。
我要說(shuō)的就是類似共現(xiàn)類做計(jì)算的這種方式,在大規(guī)模數(shù)據(jù)的情況下是很有效的一種方式购裙,基于統(tǒng)計(jì)的方法在數(shù)據(jù)量足夠的時(shí)候,更能體現(xiàn)問(wèn)題的本質(zhì)鹃栽。
1.3.3 基于模型的協(xié)同(ModelCF)
除了我們熟悉的基于用戶以及基于物品的協(xié)同躏率,還有一類,基于模型的協(xié)同過(guò)濾民鼓。基于模型的協(xié)同過(guò)濾推薦丰嘉,基于樣本的用戶偏好信息,訓(xùn)練一個(gè)模型耍贾,然后根據(jù)實(shí)時(shí)的用戶喜好信息進(jìn)行預(yù)測(cè)推薦。
常見(jiàn)的基于模型推薦又有三種:最近鄰模型路幸,典型如K最近鄰荐开;SVD模型简肴,即矩陣分解;圖模型砰识,又稱為社會(huì)網(wǎng)絡(luò)圖模型能扒。
(1) 最近鄰模型
最近鄰模型,即使用用戶的偏好信息辫狼,我們計(jì)算當(dāng)前被推薦用戶與其他用戶的距離,然后根據(jù)近鄰進(jìn)行當(dāng)前用戶對(duì)于物品的評(píng)分預(yù)測(cè)越平。
典型如K最近鄰模型灵迫,假如我們使用皮爾森相關(guān)系數(shù),計(jì)算當(dāng)前用戶與其他所有用戶的相似度sim挣跋,然后在K個(gè)近鄰中狞换,通過(guò)這些相似用戶舟肉,預(yù)測(cè)當(dāng)前用戶對(duì)于每一個(gè)物品的評(píng)分查库,然后重新排序,最終推出M個(gè)評(píng)分最高的物品推薦出去整慎。
需要注意的是围苫,基于近鄰的協(xié)同推薦,較依賴當(dāng)前被推薦用戶的歷史數(shù)據(jù)拧揽,這樣計(jì)算出來(lái)的相關(guān)度才更準(zhǔn)確腺占。
(2) SVD矩陣分解
我們把用戶和物品的對(duì)應(yīng)關(guān)系可以看做是一個(gè)矩陣X湾笛,然后矩陣X可以分解為X=A*B。而滿足這種分解蓖墅,并且每個(gè)用戶對(duì)應(yīng)于物品都有評(píng)分临扮,必定存在與某組隱含的因子,使得用戶對(duì)于物品的評(píng)分逼近真實(shí)值杆勇,而我們的目標(biāo)就是通過(guò)分解矩陣得到這些隱性因子蚜退,并且通過(guò)這些因子來(lái)預(yù)測(cè)還未評(píng)分的物品。
有兩種方式來(lái)學(xué)習(xí)隱性因子蚂且,一為交叉最小二乘法幅恋,即ALS;而為隨機(jī)梯度下降法淑翼。
首先對(duì)于ALS來(lái)說(shuō),首先隨機(jī)化矩陣A玄括,然后通過(guò)目標(biāo)函數(shù)求得B遭京,然后對(duì)B進(jìn)行歸一化處理,反過(guò)來(lái)求A,不斷迭代戒财,直到A*B滿足一定的收斂條件即停止饮寞。
對(duì)于隨機(jī)梯度下降法來(lái)說(shuō),首先我們的目標(biāo)函數(shù)是凹函數(shù)或者是凸函數(shù)苦始,我們通過(guò)調(diào)整因子矩陣使得我們的目標(biāo)沿著凹函數(shù)的最小值慌申,或者凸函數(shù)的最大值移動(dòng),最終到達(dá)移動(dòng)閾值或者兩個(gè)函數(shù)變化絕對(duì)值小于閾值時(shí)咨油,停止因子矩陣的變化柒爵,得到的函數(shù)即為隱性因子。
使用分解矩陣的方式進(jìn)行協(xié)同推薦法瑟,可解釋性較差唁奢,但是使用RMSE(均方根誤差)作為評(píng)判標(biāo)準(zhǔn)驮瞧,較容易評(píng)判。
并且采郎,我們使用這種方法時(shí),需要盡可能的讓用戶覆蓋物品淫痰,即用戶對(duì)于物品的歷史評(píng)分記錄需要足夠的多整份,模型才更準(zhǔn)確。
(3) 社會(huì)網(wǎng)絡(luò)圖模型
所謂社會(huì)網(wǎng)絡(luò)圖模型火俄,即我們認(rèn)為每個(gè)人之間都是有聯(lián)系的讲冠,任何兩個(gè)用戶都可以通過(guò)某種或者多個(gè)物品的購(gòu)買行為而聯(lián)系起來(lái),即如果一端的節(jié)點(diǎn)是被推薦用戶谱仪,而另一端是其他用戶否彩,他們之間通過(guò)若干個(gè)物品列荔,最終能聯(lián)系到一起。
而我們基于社會(huì)網(wǎng)絡(luò)圖模型筷转,即研究用戶對(duì)于物品的評(píng)分行為悬而,獲取用戶與用戶之間的圖關(guān)系,最終依據(jù)圖關(guān)系的距離袭蝗,為用戶推薦相關(guān)的物品般婆。
目前這種協(xié)同推薦使用的較少蔚袍。
1.4 其他相關(guān)知識(shí)###
1.4.1 冷啟動(dòng)
所謂冷啟動(dòng)配名,即在推薦系統(tǒng)初期時(shí)晋辆,沒(méi)有任何用戶與物品的交集信息瓶佳,即無(wú)用戶的行為軌跡,無(wú)法通過(guò)類似協(xié)同的方式進(jìn)行過(guò)濾推薦为朋,這種時(shí)候厚脉,我們就稱推薦系統(tǒng)處于冷啟動(dòng)狀態(tài)。
這種情況融涣,我們需要盡快的累積起第一批用戶行為軌跡精钮。我們可以通過(guò)基于內(nèi)容的推薦剃斧,或者做一些其他類似的操作幼东,快速有效的進(jìn)行物品推薦。
一段時(shí)間后脓杉,累積到一定的用戶行為時(shí)简逮,整個(gè)系統(tǒng)就能夠正常使用協(xié)同過(guò)濾等方式進(jìn)行推薦了散庶。
但是,針對(duì)于新加入的用戶屋讶,或者新加入的物品须教,同樣也是出于冷啟動(dòng)狀態(tài)的,這個(gè)時(shí)候乐疆,我們通過(guò)需要對(duì)這種物品或者用戶做特殊的處理。
1.4.2 長(zhǎng)尾效應(yīng)/馬太效應(yīng)
所謂長(zhǎng)尾效應(yīng)迁筛,在推薦系統(tǒng)中的體現(xiàn)即耕挨,部分優(yōu)質(zhì)物品筒占,購(gòu)買的人數(shù)較多,即與其相關(guān)的的用戶行為軌跡會(huì)較多止邮。
這樣奏窑,在協(xié)同過(guò)濾推薦中,由于我們主要的依據(jù)就是我們的歷史行為行為數(shù)據(jù)撩匕,所以這種物品得到推薦的機(jī)會(huì)就越多止毕。
這樣漠趁,不斷循環(huán)迭代,得到推薦的物品都集中在少數(shù)的一些物品中谨朝,而大部分物品是沒(méi)有被推薦的機(jī)會(huì)的甥绿。
這就造成了造成長(zhǎng)尾現(xiàn)象妹窖。
而馬太效應(yīng)的意思是,通俗點(diǎn)說(shuō)就是共苛,強(qiáng)者愈強(qiáng),弱者愈弱澄峰。而長(zhǎng)尾的直接體現(xiàn)就是馬太效應(yīng)俏竞。
通常來(lái)講(當(dāng)然也有特殊情況)堂竟,一個(gè)推薦系統(tǒng),如果長(zhǎng)時(shí)間處于長(zhǎng)尾之中席楚,就會(huì)造成推薦疲勞烦秩,推薦的效果就會(huì)下降郎仆。
所以,很多時(shí)候抛寝,挖掘長(zhǎng)尾是推薦系統(tǒng)不可缺少的部分狡耻。即夷狰,我們需要把尾巴部分 并且是有價(jià)值的部分給適當(dāng)?shù)恼故境鰜?lái)郊霎。
挖掘長(zhǎng)尾的方法很多书劝,其中一種常見(jiàn)的方式就是給熱點(diǎn)物品適當(dāng)?shù)慕禉?quán)。比如物品猾昆,我們?yōu)闊狳c(diǎn)物品進(jìn)行權(quán)重下降垂蜗,這樣在最終推薦的結(jié)果中,非熱點(diǎn)物品得到推薦的機(jī)會(huì)就增大烘苹,從而適當(dāng)?shù)耐诰蛄碎L(zhǎng)尾片部。
1.5.3 AB分流測(cè)試
對(duì)于推薦系統(tǒng)來(lái)說(shuō)档悠,離線的評(píng)測(cè)其實(shí)并不能很準(zhǔn)確的判斷一個(gè)推薦算法的好壞。最準(zhǔn)確的判斷應(yīng)該是線上實(shí)際效果觀察黍图。
而AB測(cè)試是推薦系統(tǒng)評(píng)測(cè)的標(biāo)準(zhǔn)做法奴烙,即我們?cè)诰€上同時(shí)運(yùn)行兩種算法模型切诀,讓流量分別走不通的算法,最終通過(guò)收集結(jié)果數(shù)據(jù)進(jìn)行比較算法的優(yōu)劣丰滑。
通過(guò)AB測(cè)試必須滿足以下幾個(gè)條件:流量必須能夠控制褒墨,這是為了保證線上效果的穩(wěn)定性擎宝;必須保證流量的隨機(jī)性绍申,這樣的結(jié)果才具有說(shuō)服力。
X 參考資料
《淺談矩陣分解在推薦系統(tǒng)中的應(yīng)用》http://blog.csdn.net/sun_168/article/details/20637833
《基于ALS算法的簡(jiǎn)易在線推薦系統(tǒng)》http://blog.csdn.net/zhangyuming010/article/details/38958419
《Databricks孟祥瑞:ALS 在 Spark MLlib 中的實(shí)現(xiàn)》http://www.csdn.net/article/2015-05-07/2824641
《基于Spark MLlib平臺(tái)的協(xié)同過(guò)濾算法—電影推薦系統(tǒng)》http://snglw.blog.51cto.com/5832405/1662153
《SVD奇異值分解》http://blog.csdn.net/wangran51/article/details/7408414
《基于距離的計(jì)算方法》http://blog.sina.com.cn/s/blog_52510b1d01015nrg.html
《相似度算法》http://blog.sina.com.cn/s/blog_62b83291010127bf.html
《movielens數(shù)據(jù)集下載》http://grouplens.org/datasets/movielens/
《四種網(wǎng)絡(luò)模型》http://www.cnblogs.com/forstudy/archive/2012/03/20/2407954.html
《Spark官網(wǎng)ALS實(shí)例頁(yè)面》http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html
轉(zhuǎn)載請(qǐng)注明來(lái)自36大數(shù)據(jù)(36dsj.com)http://www.36dsj.com/archives/38018
作者:流川楓AI
鏈接:http://www.reibang.com/p/0c2835e3e662
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處仆百。