引言
昨日看到幾個關(guān)鍵詞:語義分析,協(xié)同過濾,智能推薦,想著想著便興奮了。于是昨天下午開始到今天凌晨3點,便研究了一下推薦引擎,做了初步了解。日后,自會慢慢深入仔細研究(日后的工作亦與此相關(guān))。當然,此文也會慢慢補充完善。
本文作為對推薦引擎的初步介紹的一篇導(dǎo)論性的文章,將略去大部分的具體細節(jié),側(cè)重用最簡單的語言簡要介紹推薦引擎的工作原理以及其相關(guān)算法思想,且為了著重淺顯易懂有些援引自本人1月7日在微博上發(fā)表的文字(特地整理下,方便日后隨時翻閱),盡量保證本文的短小。不過,事與愿違的是,文章后續(xù)補充完善,越寫越長了。
同時,本文所有相關(guān)的算法都會在日后的文章一一陸續(xù)具體闡述。本文但求微言導(dǎo)論,日后但求具體而論。若有任何問題,歡迎隨時不吝賜教或批評指正。謝謝。
?
1.推薦引擎原理
推薦引擎盡最大努力的收集盡可能多的用戶信息及行為,所謂廣撒網(wǎng),勤捕魚,然后“特別的愛給特別的你”,最后基于相似性的基礎(chǔ)之上持續(xù)“給力”,原理如下圖所示(圖引自本文的參考資料之一:探索推薦引擎內(nèi)部的秘密):
2.推薦引擎的分類
推薦引擎根據(jù)不同依據(jù)如下分類:
1、根據(jù)其是不是為不同的用戶推薦不同的數(shù)據(jù),分為基于大眾行為(網(wǎng)站管理員自行推薦,或者基于系統(tǒng)所有用戶的反饋統(tǒng)計計算出的當下比較流行的物品)、及個性化推薦引擎(幫你找志同道合,趣味相投的朋友,然后在此基礎(chǔ)上實行推薦);
2、根據(jù)其數(shù)據(jù)源,分為基于人口統(tǒng)計學的(用戶年齡或性別相同判定為相似用戶)、基于內(nèi)容的(物品具有相同關(guān)鍵詞和Tag,沒有考慮人為因素),以及基于協(xié)同過濾的推薦(發(fā)現(xiàn)物品,內(nèi)容或用戶的相關(guān)性推薦,分為三個子類,下文闡述);
3、根據(jù)其建立方式,分為基于物品和用戶本身的(用戶-物品二維矩陣描述用戶喜好,聚類算法)、基于關(guān)聯(lián)規(guī)則的(The Apriori algorithm算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項集的算法)、以及基于模型的推薦(機器學習,所謂機器學習,即讓計算機像人腦一樣持續(xù)學習,是人工智能領(lǐng)域內(nèi)的一個子領(lǐng)域)。
關(guān)于上述第二個分類(2、根據(jù)其數(shù)據(jù)源)中的基于協(xié)同過濾的推薦:隨著 Web2.0 的發(fā)展,Web 站點更加提倡用戶參與和用戶貢獻,因此基于協(xié)同過濾的推薦機制因運而生。它的原理很簡單,就是根據(jù)用戶對物品或者信息的偏好,發(fā)現(xiàn)物品或者內(nèi)容本身的相關(guān)性,或者是發(fā)現(xiàn)用戶的相關(guān)性,然后再基于這些關(guān)聯(lián)性進行推薦。
而基于協(xié)同過濾的推薦,又分三個子類:
1、基于用戶的推薦(通過共同口味與偏好找相似鄰居用戶,K-鄰居算法,你朋友喜歡,你也可能喜歡),
2、基于項目的推薦(發(fā)現(xiàn)物品之間的相似度,推薦類似的物品,你喜歡物品A,C與A相似,可能也喜歡C),
3、基于模型的推薦(基于樣本的用戶喜好信息構(gòu)造一個推薦模型,然后根據(jù)實時的用戶喜好信息預(yù)測推薦)。
我們看到,此協(xié)同過濾算法最大限度的利用用戶之間,或物品之間的相似相關(guān)性,而后基于這些信息的基礎(chǔ)上實行推薦。下文還會具體介紹此協(xié)同過濾。
不過一般實踐中,我們通常還是把推薦引擎分兩類:
? 第一類稱為協(xié)同過濾,即基于相似用戶的協(xié)同過濾推薦(用戶與系統(tǒng)或互聯(lián)網(wǎng)交互留下的一切信息、蛛絲馬跡,或用戶與用戶之間千絲萬縷的聯(lián)系),以及基于相似項目的協(xié)同過濾推薦(盡最大可能發(fā)現(xiàn)物品間的相似度);
? 第二類便是基于內(nèi)容分析的推薦(調(diào)查問卷,電子郵件,或者推薦引擎對本blog內(nèi)容的分析)。
?
3.新浪微博推薦機制
在新浪微博推薦好友的機制中:
1、我與A非好友,但我的好友中有不少人與A是好友,即我和A有不少共同的好友,那么系統(tǒng)便會把A也推薦給我(新浪稱之為共同好友);
2、我關(guān)注的人中有不少人關(guān)注了B,那么系統(tǒng)推測我也可能會喜歡B,從而亦會把B也推薦給我(新浪稱之為間接關(guān)注人)。
但新浪實際操作起來,這兩種方式會攪在一起,如我關(guān)注的人中,有不少人關(guān)注了B,但事實上這關(guān)注B的不少人中有些也是我的好友。以上推薦方式,統(tǒng)稱為基于相似用戶的協(xié)同過濾推薦(無非就是找到:用戶與用戶之間千絲萬縷的聯(lián)系,或是從你的好友入手,或是從你關(guān)注的人入手)。
當然,還有一類比如人氣用戶推薦,便是上文所述的基于大眾行為的推薦,即人云亦云、跟風。系統(tǒng)推測大家都喜歡的,可能你也會喜歡。如大家都知道姚晨新浪微博粉絲數(shù)量排第一,則爭相關(guān)注,最終粉絲量越推越高。兩種推薦方式如下圖所示:
不過,上述不論是基于用戶的推薦方式,還是基于大眾行為的推薦都并沒有真正尋找到用戶與用戶之間共同的興趣,偏好和口味,因為很多的時候,朋友的朋友不一定能成為你自己的朋友,且有的人清高于世,你們都追求的,我偏不屑。所以,從分析用戶發(fā)表的微博的內(nèi)容相關(guān)入手,找到各自共同的關(guān)注點、興趣點才是王道。當然新浪微博最近讓用戶選擇給自己發(fā)表的微博內(nèi)容打上標簽,以利于日后尋找微博內(nèi)容中相關(guān)用戶共同的標簽tag,關(guān)鍵詞,此種推薦方式正是基于微博內(nèi)容分析的推薦。如下圖:
?
只是問題是,誰會不遺余力發(fā)完微博后,還去給它添加什么標簽?zāi)??所以,新浪微博還得努力,尋找另一種更好地分析微博內(nèi)容的方式。不然系統(tǒng)全盤掃描海里用戶的海量微博內(nèi)容,則恐怕吃不消也負擔不起。
然個人覺得倒是可以從微博關(guān)鍵詞(標簽tag云)和每個用戶為自己打的標簽(打著越多的共同標簽可定義為相似用戶)入手,如下圖左右部分所示:
?
?
也就是說,通過共同的好友和通過間接關(guān)注的人來定義相似用戶是不靠譜的,只有通過基于微博內(nèi)容的分析尋找相似用戶才是可行之道,同時,更進一步,通過微博內(nèi)容分析得到標簽tag云后,再從中找到相同或相近的標簽tag云尋找相似的用戶無疑比已有推薦好友方式(通過共同的好友和通過間接關(guān)注的人來定義相似用戶)更靠譜。
3.1、多種推薦方式結(jié)合
在現(xiàn)行的 Web 站點上的推薦往往都不是單純只采用了某一種推薦的機制和策略,他們往往是將多個方法混合在一起,從而達到更好的推薦效果。
舉個例子如Amazon中除此基于用戶的推薦之外,還會用到基于內(nèi)容的推薦(物品具有相同關(guān)鍵詞和Tag):如新產(chǎn)品的推薦;基于項目的協(xié)同過濾推薦(喜歡A,C與A類似,可能也喜歡C):如捆綁銷售and別人購買/瀏覽的商品。
總之,多種推薦方式結(jié)合,加權(quán)(用線性公式(linear formula)將幾種不同的推薦按照一定權(quán)重組合起來,具體權(quán)重的值需要在測試數(shù)據(jù)集上反復(fù)實驗,從而達到最好的推薦效果。)、切換、分區(qū)、分層等混合。但不論是哪種推薦方式,一般也就涵蓋在上文所述的推薦方式中。
?
4.協(xié)同過濾推薦
協(xié)同過濾是利用集體智慧的一個典型方法。要理解什么是協(xié)同過濾 (Collaborative Filtering, 簡稱 CF),首先想一個簡單的問題,如果你現(xiàn)在想看個電影,但你不知道具體看哪部,你會怎么做?大部分的人會問問周圍的朋友或者稱之為廣義上的鄰居(neighborhood),看看最近有什么好看的電影推薦,而我們一般更傾向于從口味比較類似的朋友那里得到推薦。這就是協(xié)同過濾的核心思想。如下圖,你能從圖中看到多少信息?
4.1、協(xié)同過濾推薦步驟
做協(xié)同過濾推薦,一般要做好以下幾個步驟:
1)若要做協(xié)同過濾,那么收集用戶偏好則成了關(guān)鍵??梢酝ㄟ^用戶的行為諸如評分(如不同的用戶對不同的作品有不同的評分,而評分接近則意味著喜好口味相近,便可判定為相似用戶),投票,轉(zhuǎn)發(fā),保存,書簽,標記,評論,點擊流,頁面停留時間,是否購買等獲得。如下面第2點所述:所有這些信息都可以數(shù)字化,如一個二維矩陣表示出來。
2)收集了用戶行為數(shù)據(jù)之后,我們接下來便要對數(shù)據(jù)進行減噪與歸一化操作(得到一個用戶偏好的二維矩陣,一維是用戶列表,另一維是物品列表,值是用戶對物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮點數(shù)值)。下面再簡單介紹下減噪和歸一化操作:
所謂減噪:用戶行為數(shù)據(jù)是用戶在使用應(yīng)用過程中產(chǎn)生的,它可能存在大量的噪音和用戶的誤操作,我們可以通過經(jīng)典的數(shù)據(jù)挖掘算法過濾掉行為數(shù)據(jù)中的噪音,這樣可以是我們的分析更加精確(類似于網(wǎng)頁的去噪處理)。
所謂歸一化:將各個行為的數(shù)據(jù)統(tǒng)一在一個相同的取值范圍中,從而使得加權(quán)求和得到的總體喜好更加精確。最簡單的歸一化處理,便是將各類數(shù)據(jù)除以此類中的最大值,以保證歸一化后的數(shù)據(jù)取值在 [0,1] 范圍中。至于所謂的加權(quán),很好理解,因為每個人占的權(quán)值不同,類似于一場唱歌比賽中對某幾個選手進行投票決定其是否晉級,觀眾的投票抵1分,專家評委的投票抵5分,最后得分最多的選手直接晉級。
3)找到相似的用戶和物品,通過什么途徑找到呢?便是計算相似用戶或相似物品的相似度。
4)相似度的計算有多種方法,不過都是基于向量Vector的,其實也就是計算兩個向量的距離,距離越近相似度越大。在推薦中,用戶-物品偏好的二維矩陣下,我們將某個或某幾個用戶對莫兩個物品的偏好作為一個向量來計算兩個物品之間的相似度,或者將兩個用戶對某個或某幾個物品的偏好作為一個向量來計算兩個用戶之間的相似度。
相似度計算算法可以用于計算用戶或者項目相似度。以項目相似度計算(Item Similarity Computation)為列,通性在于都是從評分矩陣中,為兩個項目i,j挑選出共同的評分用戶,然對這個共同用戶的評分向量,進行計算相似度si,j,如下圖所示,行代表用戶,列代表項目(注意到是從i,j向量中抽出共有的評論,組成的一對向量,進行相似度計算):
?
所以說,很簡單,找物品間的相似度,用戶不變,找多個用戶對物品的評分;找用戶間的相似度,物品不變,找用戶對某些個物品的評分。
5)而計算出來的這兩個相似度則將作為基于用戶、項目的兩項協(xié)同過濾的推薦。
常見的計算相似度的方法有:歐幾里德距離,皮爾遜相關(guān)系數(shù)(如兩個用戶對多個電影的評分,采取皮爾遜相關(guān)系數(shù)等相關(guān)計算方法,可以抉擇出他們的口味和偏好是否一致),Cosine相似度,Tanimoto系數(shù)。
下面,簡單介紹其中的歐幾里得距離與皮爾遜相關(guān)系數(shù):
? 歐幾里德距離(Euclidean Distance)是最初用于計算歐幾里德空間中兩個點的距離,假設(shè) x,y 是 n 維空間的兩個點,它們之間的歐幾里德距離是:
可以看出,當 n=2 時,歐幾里德距離就是平面上兩個點的距離。當用歐幾里德距離表示相似度,一般采用以下公式進行轉(zhuǎn)換:距離越小,相似度越大(同時,避免除數(shù)為0):
? 余弦相似度Cosine-based Similarity
兩個項目 i ,j 視作為兩個m維用戶空間向量,相似度計算通過計算兩個向量的余弦夾角,那么,對于m*n的評分矩陣,i ,j 的相似度sim( i , j ) 計算公式:
(其中 " · "記做兩個向量的內(nèi)積)
? 皮爾遜相關(guān)系數(shù)一般用于計算兩個定距變量間聯(lián)系的緊密程度,為了使計算結(jié)果精確,需要找出共同評分的用戶。記用戶集U為既評論了 i 又評論了 j 的用戶集,那么對應(yīng)的皮爾森相關(guān)系數(shù)計算公式為:
其中Ru,i 為用戶u 對項目 i 的評分,對應(yīng)帶橫杠的為這個用戶集U對項目i的評分評分。
6)相似鄰居計算。鄰居分為兩類:1、固定數(shù)量的鄰居K-neighborhoods (或Fix-size neighborhoods),不論鄰居的“遠近”,只取最近的 K 個,作為其鄰居,如下圖A部分所示;2、基于相似度門檻的鄰居,落在以當前點為中心,距離為 K 的區(qū)域中的所有點都作為當前點的鄰居,如下圖B部分所示。
?
再介紹一下K最近鄰(k-Nearest Neighbor,KNN)分類算法:這是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別。
7)經(jīng)過4)計算出來的基于用戶的CF(基于用戶推薦之用:通過共同口味與偏好找相似鄰居用戶,K-鄰居算法,你朋友喜歡,你也可能喜歡),基于物品的CF(基于項目推薦之用:發(fā)現(xiàn)物品之間的相似度,推薦類似的物品,你喜歡物品A,C與A相似,那么你可能也喜歡C)。
4.2、基于基于用戶相似度與項目相似度
上述3.1節(jié)中三個相似度公式是基于項目相似度場景下的,而實際上,基于用戶相似度與基于項目相似度計算的一個基本的區(qū)別是,基于用戶相似度是基于評分矩陣中的行向量相似度求解,基于項目相似度計算式基于評分矩陣中列向量相似度求解,然后三個公式分別都可以適用,如下圖:
?
?
(其中,為0的表示未評分)
? 基于項目相似度計算式計算如Item3,Item4兩列向量相似度;
? 基于用戶相似度計算式計算如User3,User4量行向量相似度。
千言萬語不如舉個例子。我們來看一個具體的基于用戶相似度計算的例子。
假設(shè)我們有一組用戶,他們表現(xiàn)出了對一組圖書的喜好。用戶對一本圖書的喜好程度越高,就會給其更高的評分。我們來通過一個矩陣來展示它,行代表用戶,列代表圖書。
如下圖所示,所有的評分范圍從1到5,5代表喜歡程度最高。第一個用戶(行1)對第一本圖書(列1)的評分是4,空的單元格表示用戶未給圖書評分。
?
使用基于用戶的協(xié)同過濾方法,我們首先要做的是基于用戶給圖書做出的評價,計算用戶之間的相似度。
讓我們從一個單一用戶的角度考慮這個問題,看圖1中的第一行,要做到這一點,常見的做法是將使用包含了用戶喜好項的向量(或數(shù)組)代表每一個用戶。相較于使用多樣化的相似度量這種做法,更直接。
在這個例子中,我們將使用余弦相似性去計算用戶間的相似度。
當我們把第一個用戶和其他五個用戶進行比較時,就能直觀的看到他和其他用戶的相似程度。
對于大多數(shù)相似度量,向量之間相似度越高,代表彼此更相似。本例中,第一個用戶第二、第三個用戶非常相似,有兩本共同書籍,與第四、第五個用戶的相似度低一些,只有一本共同書籍,而與最后一名用戶完全不相似,因為沒有一本共同書籍。
?更一般的,我們可以計算出每個用戶的相似性,并且在相似矩陣中表示它們。這是一個對稱矩陣,單元格的背景顏色表明用戶相似度的高低,更深的紅色表示它們之間更相似。
?
?所以,我們找到了與第一個用戶最相似的第二個用戶,刪除用戶已經(jīng)評價過的書籍,給最相似用戶正在閱讀的書籍加權(quán),然后計算出總和。
在這種情況下,我們計算出n=2,表示為了產(chǎn)生推薦,需要找出與目標用戶最相似的兩個用戶,這兩個用戶分別是第二個和第三個用戶,然后第一個用戶已經(jīng)評價了第一和第五本書,故產(chǎn)生的推薦書是第三本(4.5分),和第四本(3分)。
?
?
此外,什么時候用item-base,什么時候用user-base呢:http://weibo.com/1580904460/zh ... otime?
一般說來,如果item數(shù)目不多,比如不超過十萬,而且不顯著增長的話,就用item-based 好了。為何?如@wuzh670所說,如果item數(shù)目不多+不顯著增長,說明item之間的關(guān)系在一段時間內(nèi)相對穩(wěn)定(對比user之間關(guān)系),對于實時更新item-similarity需求就降低很多,推薦系統(tǒng)效率提高很多,故用item-based會明智些。
反之,當item數(shù)目很多,建議用user-base。當然,實踐中具體情況具體分析。如下圖所示(摘自項亮的《推薦系統(tǒng)實踐》一書):
?5.聚類算法
聚類聚類,通俗的講,即所謂“物以類聚,人以群分”。聚類 (Clustering) 是一個數(shù)據(jù)挖掘的經(jīng)典問題,它的目的是將數(shù)據(jù)分為多個簇 (Cluster),在同一個簇中的對象之間有較高的相似度,而不同簇的對象差別較大。
5.1、K 均值聚類算法
K-均值(K-Means)聚類算法與處理混合正態(tài)分布的最大期望算法很相似,因為他們都試圖找到數(shù)據(jù)中自然聚類的中心。此算法假設(shè)對象屬性來自于空間向量,目標是使各個群組內(nèi)部的均方誤差總和最小。
K均值聚類算法首先會隨機確定K個中心位置(位于空間中代表聚類中心的點),然后將各個數(shù)據(jù)項分配給最臨近的中心點。待分配完成之后,聚類中心就會移到分配給該聚類的所有節(jié)點的平均位置處,然后整個分配過程重新開始。這一過程會一直重復(fù)下去,直到分配過程不再產(chǎn)生變化為止。下圖是包含兩個聚類的K-均值聚類過程:
?
以下代碼所示即是此K-均值聚類算法的python實現(xiàn):
?k-Means是一種機器學習領(lǐng)域中的一種非監(jiān)督學習。下面,簡要介紹下監(jiān)督學習與無監(jiān)督學習:
? 監(jiān)管學習的任務(wù)是學習帶標簽的訓(xùn)練數(shù)據(jù)的功能,以便預(yù)測任何有效輸入的值。監(jiān)管學習的常見例子包括將電子郵件消息分類為垃圾郵件,根據(jù)類別標記網(wǎng)頁,以及識別手寫輸入。創(chuàng)建監(jiān)管學習程序需要使用許多算法,最常見的包括神經(jīng)網(wǎng)絡(luò)、Support Vector Machines (SVMs) 和 Naive Bayes 分類程序。
? 無監(jiān)管學習的任務(wù)是發(fā)揮數(shù)據(jù)的意義,而不管數(shù)據(jù)的正確與否。它最常應(yīng)用于將類似的輸入集成到邏輯分組中。它還可以用于減少數(shù)據(jù)集中的維度數(shù)據(jù),以便只專注于最有用的屬性,或者用于探明趨勢。無監(jiān)管學習的常見方法包括K-Means,分層集群和自組織地圖。
5.2、Canopy 聚類算法
Canopy 聚類算法的基本原則是:首先應(yīng)用成本低的近似的距離計算方法高效的將數(shù)據(jù)分為多個組,這里稱為一個 Canopy,我們姑且將它翻譯為“華蓋”,Canopy 之間可以有重疊的部分;然后采用嚴格的距離計算方式準確的計算在同一 Canopy 中的點,將他們分配與最合適的簇中。Canopy 聚類算法經(jīng)常用于 K 均值聚類算法的預(yù)處理,用來找合適的 k 值和簇中心。
5.3、模糊 K 均值聚類算法
模糊 K 均值聚類算法是 K 均值聚類的擴展,它的基本原理和 K 均值一樣,只是它的聚類結(jié)果允許存在對象屬于多個簇,也就是說:它屬于我們前面介紹過的可重疊聚類算法。為了深入理解模糊 K 均值和 K 均值的區(qū)別,這里我們得花些時間了解一個概念:模糊參數(shù)(Fuzziness Factor)。
與 K 均值聚類原理類似,模糊 K 均值也是在待聚類對象向量集合上循環(huán),但是它并不是將向量分配給距離最近的簇,而是計算向量與各個簇的相關(guān)性(Association)。假設(shè)有一個向量 v,有 k 個簇,v 到 k 個簇中心的距離分別是 d1,d2? dk,那么 V 到第一個簇的相關(guān)性 u1可以通過下面的算式計算:
計算 v 到其他簇的相關(guān)性只需將 d1替換為對應(yīng)的距離。從上面的算式,我們看出,當 m 近似 2 時,相關(guān)性近似 1;當 m 近似 1 時,相關(guān)性近似于到該簇的距離,所以 m 的取值在(1,2)區(qū)間內(nèi),當 m 越大,模糊程度越大,m 就是我們剛剛提到的模糊參數(shù)。
其余聚類算法本文不再介紹。關(guān)于冷啟動、數(shù)據(jù)稀疏、可擴展性、可移植性、可解釋性、多樣性、推薦信息的價值等問題則待后續(xù)闡述。
?
6.分類算法
接下來,分類算法有很多,本文介紹決策樹學習,與貝葉斯定理。
6.1、決策樹學習
咱們直接切入正題。所謂決策樹,顧名思義,是一種樹,一種依托于策略抉擇而建立起來的樹。
機器學習中,決策樹是一個預(yù)測模型;他代表的是對象屬性與對象值之間的一種映射關(guān)系。樹中每個節(jié)點表示某個對象,而每個分叉路徑則代表的某個可能的屬性值,而每個葉結(jié)點則對應(yīng)從根節(jié)點到該葉節(jié)點所經(jīng)歷的路徑所表示的對象的值。決策樹僅有單一輸出,若欲有復(fù)數(shù)輸出,可以建立獨立的決策樹以處理不同輸出。
從數(shù)據(jù)產(chǎn)生決策樹的機器學習技術(shù)叫做決策樹學習, 通俗說就是決策樹。
來理論的太過抽象,下面舉兩個淺顯易懂的例子:
第一個例子:通俗來說,決策樹分類的思想類似于找對象?,F(xiàn)想象一個女孩的母親要給這個女孩介紹男朋友,于是有了下面的對話:
女兒:多大年紀了?
母親:26。
女兒:長的帥不帥?
母親:挺帥的。
女兒:收入高不?
母親:不算很高,中等情況。
女兒:是公務(wù)員不?
母親:是,在稅務(wù)局上班呢。
女兒:那好,我去見見。
這個女孩的決策過程就是典型的分類樹決策。相當于通過年齡、長相、收入和是否公務(wù)員對將男人分為兩個類別:見和不見。假設(shè)這個女孩對男人的要求是:30歲以下、長相中等以上并且是高收入者或中等以上收入的公務(wù)員,那么這個可以用下圖表示女孩的決策邏輯:
?
?
也就是說,決策樹的簡單策略就是,好比公司招聘面試過程中篩選一個人的簡歷,如果你的條件相當好比如說清華博士畢業(yè),那么二話不說,直接叫過來面試,如果非重點大學畢業(yè),但實際項目經(jīng)驗豐富,那么也要考慮叫過來面試一下,即所謂具體情況具體分析、決策。
第二個例子來自Tom M.Mitchell著的機器學習一書:
小王的目的是通過下周天氣預(yù)報尋找什么時候人們會打高爾夫,他了解人們決定是否打球的原因最主要取決于天氣情況。而天氣狀況有晴,云和雨;氣溫用華氏溫度表示;相對濕度用百分比;還有有無風。如此,我們便可以構(gòu)造一棵決策樹,如下(根據(jù)天氣這個分類決策這天是否合適打網(wǎng)球):
?
?
上述決策樹對應(yīng)于以下表達式:(Outlook=Sunny ^Humidity<=70)V (Outlook = Overcast)V (Outlook=Rain ^ Wind=Weak)。得到的最佳分類屬性如下圖所示:
?
?
在上圖中,計算了兩個不同屬性:濕度(humidity)和風力(wind)的信息增益,最終humidity這種分類的信息增益0.151>wind增益的0.048。說白了,就是在星期六上午是否適合打網(wǎng)球的問題訣策中,采取humidity較wind作為分類屬性更佳,決策樹由此而來。
ID3算法決策樹的形成
OK,下圖為ID3算法第一步后形成的部分決策樹。這樣綜合起來看,就容易理解多了。
1、overcast樣例必為正,所以為葉子結(jié)點,總為yes;
2、ID3無回溯,局部最優(yōu),而非全局最優(yōu),還有另一種樹后修剪決策樹。下圖是ID3算法第一步后形成的部分決策樹:
?
[圖片上傳中...(image-7700c8-1533977318617-3)]
?
6.2、貝葉斯分類的基礎(chǔ):貝葉斯定理
貝葉斯定理:已知某條件概率,如何得到兩個事件交換后的概率,也就是在已知P(A|B)的情況下如何求得P(B|A)。這里先解釋什么是條件概率:
表示事件B已經(jīng)發(fā)生的前提下,事件A發(fā)生的概率,叫做事件B發(fā)生下事件A的條件概率。其基本求解公式為:
?
貝葉斯定理之所以有用,是因為我們在生活中經(jīng)常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關(guān)心P(B|A),貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路。
下面不加證明地直接給出貝葉斯定理(公式被網(wǎng)友指出有問題,待后續(xù)驗證改正):
?
?
7.推薦實例擴展
7.1、閱讀推薦
先來看一段文字(摘自36kr):
”北京十分科技也非??春瞄喿x推薦類的應(yīng)用,他們花了非常大的精力(一年60人團隊),才在今天推出了iPhone 版“酷云閱讀”。
為什么要投入這么多人去做這個閱讀應(yīng)用?CEO 李鵬告訴我,這個團隊超過一半的人都在做后臺相關(guān)的東西,包括語義分析、機器學習等算法。他們的目的是將互聯(lián)網(wǎng)“語義化”以后,把人的興趣明確,最后把每個人感興趣的內(nèi)容推薦給相關(guān)的人。在iPhone 上,酷云的大致做法和Zite iPad 版類似,用戶的行為也是有“喜歡”、“不喜歡”,以及點擊相應(yīng)的媒體來源或者相關(guān)的標簽來告訴酷云你希望以后看到更多這些內(nèi)容。
這個目的是大部分閱讀推薦應(yīng)用都有的,但是酷云的做法似乎更加變態(tài)。他們除了每天要抓取來自互聯(lián)網(wǎng)的超過10萬篇文章之外,還對全國200個的電視臺播出的視頻內(nèi)容進行了索引,以便用戶也可以通過文字搜索出視頻、以及對視頻內(nèi)容進行一樣的推薦。大致做法是先把這些節(jié)目都錄制下來,然后把聲音轉(zhuǎn)文字,最后建立摘要和索引?!?/p>
一般的推薦系統(tǒng)應(yīng)用的算法是有上文所述的什么協(xié)同過濾那般復(fù)雜呢?以下是援引自本人1月21日所發(fā)在微博上的文字:
1、大多數(shù)推薦閱讀應(yīng)用一般會給文章根據(jù)內(nèi)容打上標簽:算法,iphone(點擊相當于為此標簽加分加權(quán)重),并邀請對文章作出評價:喜歡,或不喜歡。每一次點擊都被推薦系統(tǒng)記錄了下來,最終漸漸形成用戶的標簽tag云(與此同時,還可基于相同或相似的標簽tag尋找相似用戶,從而基于用戶推薦),而后系統(tǒng)每檢索一篇新的文章,提取出文章的關(guān)鍵字,匹配用戶的標簽取向,進行推送。
2、目前手機上的新聞閱讀做到了分類,如科技,教育,但一般不會采取如網(wǎng)頁那般評分表態(tài),所以也就無法記錄用戶的行為特征,也就不會有新的文章出來后后續(xù)的推薦閱讀服務(wù),于是造就了一批手機推薦閱讀的問世,如 @酷云閱讀 ,指閱等。
3、但一般用戶的習慣是看完一段新聞便完事了,擇日要看則擇日看。例如有幾個用戶愿意為了評價一篇文章而特地去注冊一個帳號呢?如何盡量讓用戶付出額外代價去使用這類閱讀器,改變用戶習慣,個人認為,是關(guān)鍵。
然后我還對上面的那句:先把這些視頻節(jié)目都錄制下來,然后把聲音轉(zhuǎn)文字有點疑問。我們已經(jīng)知道如果是音樂的話像豆瓣FM可能是如下的做法:
1、你喜歡一些歌曲,而我也喜歡一些歌曲,如果你我喜歡的歌曲中有很多是重復(fù)類似的,則系統(tǒng)會把你我定義為好友,即相似用戶,基于用戶的協(xié)同過濾推薦:朋友喜歡,你也可能喜歡 ;
2、還有一個就是針對歌曲的推薦,你喜歡一首歌曲A,而另一首歌曲B與歌曲A類似(如都是有關(guān)愛情、感傷一類的),所以系統(tǒng)猜測你也可能喜歡B,而把B推薦給你。這就是基于項目(物品)的協(xié)同過濾推薦。
根據(jù)所聽歌曲的重復(fù)類似判定為好友從而基于用戶的協(xié)同過濾進行推薦,通過某些歌曲是差不多類似的來基于項目的協(xié)同過濾進行推薦,但問題出來了,重復(fù)的好說,同一首歌曲同一個歌手嘛,可那些相似音樂歌曲又如何定義判定呢?通過系統(tǒng)去分析歌曲的頻譜?區(qū)別各個歌曲節(jié)奏的快慢,音頻?此舉雖然看起來有效,但實際實行起來不太現(xiàn)實。
我覺得應(yīng)該是為那些音樂打上標簽tag(估計視頻也是這么做的,便于日后查找索引。全視頻的實錄目前覺得還是不靠譜),如打上“愛情”“感傷”一類的tag,而后tag相同的則可判定為相似歌曲。但關(guān)鍵是怎么打?語音識別?
7.2、標簽tag怎么打
初期可以人肉,爬蟲,買數(shù)據(jù)庫,等流量上來了,可以考慮ugc。所謂ugc,用戶產(chǎn)生內(nèi)容。但是用戶一般不太可能自己給音樂打標簽,太繁瑣了(如最近的新浪微博的每條微博內(nèi)容下多了一個“加標簽”的提示,但有多少用戶愿去理它呢?),當然有的系統(tǒng)也會為你自動產(chǎn)生一些標簽tag(當然,你也可以自行加上一些標簽),如新浪博客:
?如何做到的呢?我的想法是,
應(yīng)該是系統(tǒng)在背后掃描你的文章一遍,然后提取一些關(guān)鍵詞作為tag,供你選擇。取哪些關(guān)鍵詞呢?當然是取高頻詞。掃描整篇文章,統(tǒng)計每個單詞出現(xiàn)的頻率。
然后取其前TOP K,如上面截圖中的“算法”在那篇文章中出現(xiàn)了4次,“博客”出現(xiàn)了3次,所以系統(tǒng)為你自動匹配這些標簽。
至于采取何種數(shù)據(jù)結(jié)構(gòu)或方法來統(tǒng)計這些關(guān)鍵詞的頻率呢。一般的應(yīng)用hash+堆(十一、從頭到尾徹底解析Hash表算法),或trie樹(從Trie樹談到后綴樹)均可。但當trie樹面對的是漢字中文的時候,就比較麻煩了。所以hash+堆是比較理想的選擇。
同樣,針對視頻的話,應(yīng)該也是類似的:
1、通過系統(tǒng)或機器讀取視頻內(nèi)容,把視頻轉(zhuǎn)換為文字,然后提取其中頻率出現(xiàn)高的關(guān)鍵詞(如何提取關(guān)鍵詞呢,這就涉及到一個關(guān)鍵問題了:分詞。本blog日后闡述),把提取出來的這些關(guān)鍵詞作為此視頻的標簽tag;
2、然后針對這些tag建立索引摘要(什么樣的索引?倒排索引。至于什么是倒排索引,參考編程藝術(shù)第二十四章:第二十三、四章:楊氏矩陣查找,倒排索引關(guān)鍵詞Hash不重復(fù)編碼實踐),最終方便于日后用戶或系統(tǒng)的查找(此節(jié)系與編程藝術(shù)內(nèi)的朋友討論整理總結(jié)而出)。
具體細節(jié)后續(xù)闡述。
8、參考文獻
2、探索推薦引擎內(nèi)部的秘密,作者:趙晨婷,馬春娥;
3、集體智慧編程,TobySeganra著。
4、推薦系統(tǒng)之協(xié)同過濾概述。
5、http://www.cnblogs.com/leoo2sk/。
6、Mitchell, Tom M. Machine Learning. McGraw-Hill, 1997(機器學習領(lǐng)域的開山之作).
7 http://zh.wikipedia.org/wiki/% ... %2591。
8、http://www.36kr.com/p/75415.html。
9、智能web算法,第三章推薦系統(tǒng)(實現(xiàn)了用戶及項目的相似度的計算,值得一看)
10、協(xié)同過濾推薦算法和基于內(nèi)容的過濾算法:https://time.geekbang.org/article/1947?