(第9篇)大數據的的超級應用——數據挖掘-推薦系統

數據挖掘——推薦系統

      大數據可以認爲是許多數據的聚合,數據挖掘是把這些數據的價值發掘出來,比如有過去10年的氣象數據,通過數據挖掘,幾乎可以預測明天的天氣是怎麼樣的,有較大概率是正確的。

機器學習是人工智能的核心,對大數據進行發掘,靠人工肯定是做不來的,那就得靠機器代替人工得到一個有效模型,通過該模型將大數據中的價值體現出來。

本章內容:

1) 數據挖掘機器學習概念

2) 一個機器學習應用方向——推薦系統

3) 推薦算法——基於內容的推薦方法

4) 推薦算法——基於協同過濾的推薦方法

5) 基於MapReduce的協同過濾算法的實現

1. 數據挖掘機器學習概念

機器學習和數據挖掘技術已經開始在多媒體、計算機圖形學、計算機網絡乃至操作系統、軟件工程等計算機科學的衆多領域中發揮作用,特別是在計算機視 覺和自然語言處理領域,機器學習和數據挖掘已經成爲最流行、最熱門的技術,以至於在這些領域的頂級會議上相當多的論文都與機器學習和數據挖掘技術有關。總的來看,引入機器學習和數據挖掘技術在計算機科學的衆多分支領域中都是一個重要趨勢。

對於數據挖掘數據庫提供數據管理技術,機器學習提供數據分析技術。通常我們要處理的大數據通過HDFS雲存儲平臺來進行數據管理,目前Hadoop生態圈已經發展成熟,各種工具和接口基本滿足大多數數據管理的需要面對這樣龐大的數據資源,需要有一種方法需要其中的價值體現出來機器學習提供了一系列的分析挖掘數據的方法。

Hadoop生態圈中有一個機器學習開源項目——Mahout,提供豐富可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序,Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。

2. 一個機器學習應用方向——推薦領域

推薦算法是最爲大衆所知的一種機器學習模型推薦很多網站背後的核心組件之一,也是一個重要的收入來源。

一般來講,推薦系統試圖對用戶與某類物品之間的聯繫建模。比如我們利用推薦系統來告訴用戶有哪些電影他們會可能喜歡如果這一點做的很好的話,就能夠吸引更多的用戶持續使用我們的服務這對雙方都有好處同樣,如果能準確告訴用戶有哪些電影與某一個電影相似,就能方便用戶在站點上找到更多感興趣的信息。這也能提升用戶的體驗參與度以及站點內容對用戶的吸引力對於大型網站來說很多內容是來自於獨立的第三方——內容提供商,比如淘寶的商品寶貝基本來自各個店鋪、奇藝上的電影很多來自與專業的傳媒集團和工作室、微信製作精良的廣告也是來自於各個行業的廣告主

wKiom1jI6LLihg9QAABLR7B4kGM408.png 

建立一個良好的推薦生態圈,對於用戶、網站平臺以及內容提供商,都是有好處的,首先用戶得到他們想要的物品,平臺獲得更多的流量和收入,內容提供商售賣其物品的效率也會提高所以是一個三者共贏的一個場景所以一個好的推薦系統帶來很大的價值。

3. 推薦算法——基於內容的推薦方法

基於內容的推薦(Content Based)應該算最早被使用的推薦方法,它根據用戶過去喜歡的產品(本文統稱爲 item),爲用戶推薦和他過去喜歡的產品相似的產品。例如,一個推薦飯店的系統可以依據某個用戶之前喜歡很多的烤肉店而爲他推薦烤肉店。 CB最早主要是應用在信息檢索系統當中,所以很多信息檢索及信息過濾裏的方法都能用於CB中。

CB的過程一般包括以下三步:

1) Item Representation:爲每個item抽取出一些特徵(也就是item的content了)來表示此item;

2) Profile Learning:利用一個用戶過去喜歡(及不喜歡)的item的特徵數據,來學習出此用戶的喜好特徵(profile);

3) Recommendation Generation:通過比較上一步得到的用戶profile與候選item的特徵,爲此用戶推薦一組相關性最大的item。

wKioL1jI6MfhNLknAAFarMnzOEg123.png 

舉個例子說明前面的三個步驟。對於個性化閱讀來說,一個item就是一篇文章。根據上面的第一步,我們首先要從文章內容中抽取出代表它們的屬性。常用的方法就是利用出現在一篇文章中詞來代表這篇文章,而每個詞對應的權重往往使用信息檢索中的tf-idf來計算。比如對於本文來說,詞“CB”、“推薦”和“喜好”的權重會比較大,而“烤肉”這個詞的權重會比較低。利用這種方法,一篇抽象的文章就可以使用具體的一個向量來表示了。第二步就是根據用戶過去喜歡什麼文章來產生刻畫此用戶喜好的 profile了,最簡單的方法可以把用戶所有喜歡的文章對應的向量的平均值作爲此用戶的profile。比如某個用戶經常關注與推薦系統有關的文章,那麼他的profile中“CB”、“CF”和“推薦”對應的權重值就會較高。在獲得了一個用戶的profile後,CB就可以利用所有item與此用戶profile的相關度對他進行推薦文章了。一個常用的相關度計算方法是cosine。最終把候選item裏與此用戶最相關(cosine值最大)的N個item作爲推薦返回給此用戶。

 

接下來我們詳細介紹下上面的三個步驟。

1) Item Representation

真實應用中的item往往都會有一些可以描述它的屬性。這些屬性通常可以分爲兩種:結構化的(structured)屬性與非結構化的(unstructured)屬性。所謂結構化的屬性就是這個屬性的意義比較明確,其取值限定在某個範圍;而非結構化的屬性往往其意義不太明確,取值也沒什麼限制,不好直接使用。比如在交友網站上,item就是人,一個item會有結構化屬性如身高、學歷、籍貫等,也會有非結構化屬性(如item自己寫的交友宣言,博客內容等等)。對於結構化數據,我們自然可以拿來就用;但對於非結構化數據(如文章),我們往往要先把它轉化爲結構化數據後才能在模型里加以使用。真實場景中碰到最多的非結構化數據可能就是文章了(如個性化閱讀中)。下面我們就詳細介紹下如何把非結構化的一篇文章結構化。

如何代表一篇文章在信息檢索中已經被研究了很多年了,下面介紹的表示技術其來源也是信息檢索,其名稱爲向量空間模型(Vector Space Model,簡稱VSM)。

記我們要表示的所有文章集合爲 wKioL1jI6O7R-5DBAAAJyICUQWw894.png,而所有文章中出現的詞(對於中文文章,首先得對所有文章進行分詞)的集合(也稱爲詞典)爲wKioL1jI6RLAOLbjAAAH2uzFjOY644.png。也是說,我們有N篇要處理的文章,而這些文章裏包含了n個不同的詞。我們最終要使用一個向量來表示一篇文章,比如第j篇文章被表示爲wKioL1jI6R6TDnaZAAAFszaFtfM938.png,其中wKiom1jI6SuBz7nuAAACLO5eVvU631.png表示第1個詞wKioL1jI6VayVSy2AAABuiisJOI039.png在文章j中的權重,值越大表示越重要;wKiom1jI6WSzystjAAABvumHeaA033.png中其他向量的解釋類似。所以,爲了表示第j篇文章,現在關鍵的就是如何計算wKioL1jI6iCQBOmfAAABvumHeaA983.png各分量的值了。例如,我們可以選取wKiom1jI6jvxDICMAAACLO5eVvU313.png1,如果詞wKiom1jI6tOjdjl2AAABuiisJOI007.png出現在第 j 篇文章中;選取爲0,如果wKiom1jI6vKDeqBUAAABuiisJOI644.png未出現在第j篇文章中。我們也可以選取wKioL1jI6wnAYIkPAAACLO5eVvU070.png爲詞wKioL1jI6yTRVXivAAABuiisJOI588.png出現在第 j 篇文章中的次數(frequency)。但是用的最多的計算方法還是信息檢索中常用的詞頻-逆文檔頻率(term frequency–inverse document frequency,簡稱tf-idf)。第j篇文章中與詞典裏第k個詞對應的tf-idf爲:

wKioL1jI6zei6XodAAAi_tTEICE246.png

其中wKioL1jI61yDRSRnAAAHQrEgo_c274.png是第k個詞在文章j中出現的次數,而wKiom1jI64CiKmulAAACle1it6g725.png是所有文章中包括第k個詞的文章數量。

      最終第k個詞在文章j中的權重由下面的公式獲得:

wKiom1jI63aAJHJDAAAoKskEbTY193.png 

做歸一化的好處是不同文章之間的表示向量被歸一到一個量級上,便於下面步驟的操作。

2) Profile Learning

假設用戶u已經對一些item給出了他的喜好判斷,喜歡其中的一部分item,不喜歡其中的另一部分。那麼,這一步要做的就是通過用戶u過去的這些喜好判斷,爲他產生一個模型。有了這個模型,我們就可以根據此模型來判斷用戶u是否會喜歡一個新的item。所以,我們要解決的是一個典型的有監督分類問題,理論上機器學習裏的分類算法都可以照搬進這裏。

下面我們簡單介紹下CB裏常用的學習算法——KNN

對於一個新的item,最近鄰方法首先找用戶u已經評判過並與此新item最相似的k個item,然後依據用戶u對這k個item的喜好程度來判斷其對此新item的喜好程度。這種做法和CF中的item-based kNN很相似,差別在於這裏的item相似度是根據item的屬性向量計算得到,而CF中是根據所有用戶對item的評分計算得到。

對於這個方法,比較關鍵的可能就是如何通過item的屬性向量計算item之間的兩兩相似度。[2]中建議對於結構化數據,相似度計算使用歐幾里得距離;而如果使用向量空間模型(VSM)來表示item的話,則相似度計算可以使用cosine。

3) Recommendation Generation

通過上一步的學習,得到一個推薦列表,們直接把這個列表中與用戶屬性最相關的n個item作爲推薦返回給用戶即可。

4. 推薦算法——基於協同過濾的推薦方法

俗話說“物以類聚、人以羣分”,繼續拿看電影這個例子來說,如果你喜歡《蝙蝠俠》、《碟中諜》、《星際穿越》、《源代碼》等電影,另外有個人也都喜歡這些電影,而且他還喜歡《鋼鐵俠》,則很有可能你也喜歡《鋼鐵俠》這部電影。

所以說,當一個用戶 A 需要個性化推薦時,可以先找到和他興趣相似的用戶羣體G,然後把 G 喜歡的、並且 A 沒有聽說過的物品推薦給 A,這就是基於用戶的系統過濾算法。

根據上述基本原理,我們可以將基於用戶的協同過濾推薦算法拆分爲兩個步驟:

1) 發現興趣相似的用戶

通常用 Jaccard 公式或者餘弦相似度計算兩個用戶之間的相似度。設 N(u) 爲用戶 u 喜歡的物品集合,N(v) 爲用戶 v 喜歡的物品集合,那麼 u 和 v 的相似度是多少呢:

Jaccard 公式:

wKiom1jI67PyTs9_AAAoKskEbTY253.png 

      餘弦相似度:

wKioL1jI676ATk63AAAFky4bX8A045.png 

假設目前共有4個用戶: A、B、C、D;共有5個物品:a、b、c、d、e。用戶與物品的關係(用戶喜歡物品)如下圖所示:

wKiom1jI68nTcnZVAAAGc7j3XZM508.png 

如何一下子計算所有用戶之間的相似度呢?爲計算方便,通常首先需要建立“物品—用戶”的倒排表,如下圖所示:

wKioL1jI69Ty-SaTAAAuDYiNiOA358.png 

然後對於每個物品,喜歡他的用戶,兩兩之間相同物品加1。例如喜歡物品 a 的用戶有 A 和 B,那麼在矩陣中他們兩兩加1。如下圖所示:

wKiom1jI6-nijve0AAA5MN4Pg7Y727.png 

計算用戶兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以餘弦相似度爲例,對上圖進行進一步計算:

wKiom1jI6_SwNjPNAABAMx7w530626.png 

到此,計算用戶相似度就大功告成,可以很直觀的找到與目標用戶興趣較相似的用戶。

2) 推薦物品

首先需要從矩陣中找出與目標用戶 u 最相似的 K 個用戶,用集合 S(u, K) 表示,將 S 中用戶喜歡的物品全部提取出來,並去除 u 已經喜歡的物品。對於每個候選物品 i ,用戶 u 對它感興趣的程度用如下公式計算:

wKiom1jI7FrCLjFNAAAGtA1Aatk715.png 

      其中 rvi 表示用戶 v 對 i 的喜歡程度,在本例中都是爲 1,在一些需要用戶給予評分的推薦系統中,則要代入用戶評分。

      舉個例子,假設我們要給 A 推薦物品,選取 K = 3 個相似用戶,相似用戶則是:B、C、D,那麼他們喜歡過並且 A 沒有喜歡過的物品有:c、e,那麼分別計算 p(A, c) 和 p(A, e):

wKiom1jI7GzjAk1VAAAHs_qY1Jg858.png

wKioL1jI7HvgtI5uAAAH374wCmU656.png

看樣子用戶 A 對 c 和 e 的喜歡程度可能是一樣的,在真實的推薦系統中,只要按得分排序,取前幾個物品就可以了。

如何用4個月學會Hadoop開發並找到年薪25萬工作?

 

免費分享一套17年最新Hadoop大數據教程100Hadoop大數據必會面試題

因爲鏈接經常被和諧,需要的朋友請加微信 ganshiyun666 來獲取最新下載鏈接,註明“51CTO”

 

教程已幫助300+人成功轉型Hadoop開發,90%起薪超過20K,工資比之前翻了一倍。

百度Hadoop核心架構師親自錄製

內容包括0基礎入門、Hadoop生態系統、真實商業項目實戰3大部分。其中商業案例可以讓你接觸真實的生產環境,訓練自己的開發能力。

wKioL1mdQGiDPhHeAAAuZtp-5xs706.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章