推薦系統_基本知識點-牢記

目錄

 

1 推薦系統的分類

2 常見評測標準

3 用戶行爲數據

4 相似度

4.1 同現相似度   

4.2 歐氏距離相似度

4.3 皮爾遜相關係數(pearson Correlation Coefficient)

4.4 Cosine相似度(Cosine Similarity)

4.5 Tanimoto係數(Tanimoto Coefficient)

5 常見推薦系統算法

5.1 關聯規則

5.1.1 Apriori

5.1.2 FPGrowth

5.2 協同過濾

5.2.1 基於鄰域的方法

5.2.1.1 基於用戶的協同過濾算法(User CF)

5.1.2.2 基於物品的協同過濾算法(Item CF)

5.2.2 隱語義模型(基於模型的協同過濾算法)

5.3 基於內容的推薦

5.3.1 隱語義模型(LFM),矩陣分解,潛在語義模型(LSA),SVD之間的關係

5.3.2 隱語義模型(基於模型的協同過濾算法)

5.3.3 LSA

5.3.4 基於標籤的推薦

6 推薦系統案例


1 推薦系統的分類


於應用領域分類:電子商務推薦,社交好友推薦,搜索引擎推薦,信息內容推薦
基於設計思想:基於協同過濾的推薦,基於內容的推薦,基於知識的推薦,混合推薦
基於使用何種數據:基於用戶行爲數據的推薦,基於用戶標籤數據的推薦,基於社交網絡數據,基於上下文信息(時間上下文,地點上下文等等)

2 常見評測標準


http://blog.csdn.net/u011263983/article/details/51544495

3 用戶行爲數據


            從用戶的行爲和偏好中發現規律,並基於此進行推薦,所以收集用戶的偏好信息成爲系統推薦效果最基礎的決定因素。用戶有很多方式向系統提供自己的偏好信息,比如:評分、投票、轉發、保存書籤、購買、點擊流、頁面停留時間等
           以上用戶行爲都是通用的,在實際推薦引擎設計中可以自己多添加一些特定的用戶行爲,並用他們表示用戶對物品的喜好程度。通常情況下,在一個推薦系統中,用戶行爲都會多於一種,那麼如何組合這些不同的用戶行爲呢?基本上有如下兩種方式 。
                   1,將不同的行爲分組
                           一般可以分爲查看和購買,然後基於不同的用戶行爲,計算不同用戶或者物品的相似度。類似於噹噹網或者亞馬遜給出的“購買了該 書的人還購買了” “查看了該書的人還查看了”等。
                   2,對不同行爲進行加權
                           對不同行爲產生的用戶喜好進行加權,然後求出用戶對物品的總體喜好。

           當我們收集好用戶的行爲數據後,還要對數據進行預處理,最核心的工作就是減噪和歸一化。
                     減噪:因爲用戶數據在使用過程中可能存在大量噪聲或誤操作,所以需要過濾掉這些噪聲。
                     歸一化:不同行爲數據的差別比較大,比如用戶的查看數據肯定比購買數據大得多。通過歸一化,才能使數據更加準確。
           
           通過上述步驟的處理,就得到了一張二維表,其中一維是用戶列表,另一維是商品列表,值是用戶對商品的喜好,如下

4 相似度


       對用戶的行爲分析得到用戶的偏好後,可以根據用戶的偏好計算相似用戶和物品,然後可以基於相似用戶或物品進行推薦。這就是協同過濾中的兩個分支了,即基於用戶的協同過濾和基於物品的協同過濾。
       關於相似度的計算,現在 有幾種基本方法都是基於向量的,其實也就是計算兩個向量的距離,距離越近相似度越大。在推薦的場景中,在用戶-物品偏好的二維矩陣中,我們可以將一個用戶對所有物品的偏好作爲一個向量來計算用戶之間的相似度,或者將所有用戶對某個物品的偏好作爲一個向量來計算物品之間的相似度。下面是幾種常見的相似度計算方法

4.1 同現相似度   


       物品i和物品j的同現相似度公式定義:     


                                         
        其中,分母是喜歡物品i的用戶數,而分子是同時喜歡物品i和物品j的用戶數據。因此,上述公式可以理解爲喜歡物品i的用戶中有多少比例的用戶也喜歡物品j。
       上述公式存在一個問題,如果物品 j 是熱門物品,很多人都喜歡,那麼 wij 就會很大,接近1,因此,該公式會造成任何物品都和熱門物品有很大的相似度。爲了避免推薦出熱門的物品,可以用如下公式:


                                  
        這個公式懲罰了物品 j 的權重,因此減輕了熱門物品與很多物品相似的可能性。

4.2 歐氏距離相似度


         最初用於計算歐幾里得空間中兩個點的距離,假設x,y是n維空間的兩個點,它們之間的歐幾里得距離是:


                                      
         可以看出,當 n = 2時,歐幾里得距離就是平面上兩個點的距離。
         當用歐幾里得距離表示相似度時,一般採用如下公式進行轉換:距離越小,相似度越大。


                                       

4.3 皮爾遜相關係數(pearson Correlation Coefficient)


          皮爾遜相關係數一般用戶計算兩個定距變量間聯繫的緊密程度,它的取值在[-1,+1]之間。

4.4 Cosine相似度(Cosine Similarity)


            Cosine相似度被廣泛應用於計算文檔數據的相似度:
                               

4.5 Tanimoto係數(Tanimoto Coefficient)


            Tanimoto係數也被稱爲Jaccard係數,是Cosina相似度的擴展,也多用於計算文檔數據的相似度:


                              


           在計算用戶之間的相似度時,是將一個用戶對所有物品的偏好作爲一個向量;而在計算物品之間的相似度時,是將所有用戶對某個物品的偏好作爲一個向量。求出相似度後,接下來可以求相鄰用戶和相鄰物品。
               

5 常見推薦系統算法


5.1 關聯規則


5.1.1 Apriori


見 http://blog.csdn.net/u011263983/article/details/51505108 博客

5.1.2 FPGrowth


見 http://blog.csdn.net/u011263983/article/details/51505108 博客

5.2 協同過濾


5.2.1 基於鄰域的方法


          根據相似度計算用戶和物品的相似度後,可以分別基於用戶或者物品進行協同過濾推薦。

5.2.1.1 基於用戶的協同過濾算法(User CF)


          基於用戶的CF的基本思想相當簡單:基於用戶對物品的偏好找到相鄰的鄰居用戶,然後將鄰居用戶喜歡的推薦給當前用戶。在計算上,就是將一個用戶對所有物品的偏好作爲一個向量來計算用戶之間的相似度,找到K鄰居後,根據鄰居的相似度權重及其對物品的偏好,預測當前用戶沒有偏好的未涉及物品,計算得到一個排序的物品列表作爲推薦。如下圖:
                           
           對於用戶A,根據用戶的歷史偏好,這裏只計算得到一個鄰居-用戶C,然後將用戶C喜歡的物品D推薦給用戶A。
           
           從上面的描述中可以看到,基於用戶的協同過濾算法主要包括兩個步驟: 
                    1,找到和目標用戶興趣相似的用戶集合;
                    2,找到這個集合中的用戶喜歡的,且目標用戶沒有聽說過的物品推薦給目標用戶。
     
            舉例說明:
                  舉例說明UserCF計算用戶興趣相似度的例子。再該例子中,用戶A對物品{a,b,d}有過行爲,用戶B對物品{a,c}有過行爲,利用餘弦相似度公式計算用戶A和用戶B的興趣相似度爲:
                           
               
                    得到用戶之間的興趣相似度後,UserCF算法會給用戶推薦和他興趣最相似的K個用戶喜歡的物品。如下的公式度量了UserCF算法中用戶u對物品i的感興趣程度:
                           
                               
                    
                    
                       鄰居(K)的圈定:
                              一般有兩種方法: 
                                       1,固定數量的鄰居:K-neighborhoods
                                        2,基於相似度門檻的鄰居:Threshold-based neighborhoods

5.1.2.2 基於物品的協同過濾算法(Item CF)


          基於物品的CF的原理和基於用戶的CF類似,只是子計算鄰居時採用物品本身,而不是從用戶的角度。即基於用戶對物品的偏好找到相似的物品,然後根據用戶的歷史偏好,推薦相似的物品給他。從計算的角度看,就是將所有用戶對某個物品的偏好作爲一個向量來計算物品之間的相似度,得到物品的相似度後,根據用戶歷史的偏好預測當前用戶還沒有表示偏好的物品,計算得到一個排序的物品列表作爲推薦。如下圖


                           
           對於物品A,根據所有用戶的歷史偏好,喜歡物品A的用戶都喜歡物品C,得出物品A和物品C比較相似,而用戶C喜歡物品A,那麼可以退出用戶C可能也喜歡物品C。
           從上面的描述中可以看到,基於物品的協同過濾算法主要包括兩個步驟: 
                    1,計算物品之間的相似度。
                    2,根據物品的相似度和用戶的歷史行爲給用戶生成推薦列表
        
           舉例說明:
                   用戶喜歡《C++ Primer中文版》和《編程之美》兩本書。然後ItemCF會爲這兩本書分別找出和它們最相似的3本書,然後根據公式的定義計算用戶對每本書的感興趣程度。比如,ItemCF給用戶推薦《算法導論》,是因爲這本書和《C++ Primer中文版》相似,相似度爲0.4,而且這本書也和《編程之美》相似,相似度時0.5,。考慮到用戶對《C++ Primer中文版》的興趣是1.3,對《編程之美》的興趣度是0.9,那麼用戶對《算法導論》的興趣就是1.3*0.4+0.9*0.5=0.97。
                   


5.2.2 隱語義模型(基於模型的協同過濾算法)


       轉到本文章:在5.3 基於內容的推薦----5.3.1 隱語義模型(基於模型的協同過濾算法)  原因:分類不唯一。感覺隱語義模型就是挖掘內容潛在的價值。

5.3 基於內容的推薦


         基於內容的推薦,其主要思想就是:我們首先給商品劃分一些屬性,你也可以稱爲分類,比如說,對汽車分爲一些類別,比如微型車,中型車,大型車,豪華車等等,每一類中又可以在細分,例如按照馬力,門數等等,我們建立了這些屬性數據以後,我們怎麼樣進行推送呢?當用戶看某一個商品的時候,可以給他推薦一些同類的,比如說它的屬性比較相近,或者分類在同一類裏面,或者說不是同一類但是是相近的分類的這麼一些其它的汽車給他,這個就是一種稱爲內容的推薦。還有一種就是根據用戶標籤進行的推薦,這個標籤就是我們給商品或者人打上的一些屬性信息,這個跟前面的分類的區別:其實標籤本質上也是一種分類,但是我們之前所說的對於汽車的分類可能是一種比較嚴肅的分類,比如說網站聘用了一些專業的編輯回來,這些編輯有比較強的業務能力,他對這個專業裏面的知識理解的比較透徹,有這些人對這些商品進行分類;而標籤應該是那種比較隨意的,比較鬆散的,這個一般是由用家,玩家來做的,比如說玩家看一輛車,對這輛車打上一個標籤,例如可愛,大氣等等,或者說可能是機器給你加的,機器可能根據瀏覽的一些人的情況給這些商品加上標籤,對人的標籤也是一樣,例如在移動公司裏面,在它的交換機上得到一個日誌,這個日誌記錄着用戶訪問網站的信息,有了用的訪問的鏈接之後,可以通過這些鏈接把用戶訪問的網頁抓回來,然後對抓回來的網頁做一些文本挖掘,比如分詞,提取一些關鍵字,然後分析一下這篇文章是屬於哪種類型的,比如說是科技類文章,旅遊類文章,電影類等等,可以知道用戶是屬於那種類型的人,對什麼東西感興趣,例如用戶到週末經常看一些電影院,電影的網站,可能斷定該用戶是一個電影愛好者,移動就可以贈送給這個用戶電影票來綁定該用戶。所以說不光是商品,人其實也可以打標籤,人的標籤可以是人與人之間打標籤,例如說qq上面給好友打標籤,作評價,也可以是機器給人打標籤,例如剛纔所說的移動公司的例子。  不論是專業編輯給它賦屬性也好,或者是業餘人士(用戶)隨意的給它打上標籤也好,也可能是機器打上去的,我們基於這種分類來做推薦的話,我們稱之爲基於內容的推薦(有些人稱之爲基於標籤的推薦)。

 

5.3.1 隱語義模型(LFM),矩陣分解,潛在語義模型(LSA),SVD之間的關係


       最近這幾年做機器學習和數據挖掘研究的人經常會看到下面的各種名詞,即隱含語義模型(Latent Class Model)、隱語義模型(Latent Factor Model)、pLSA、LDA、Topic Model、Matrix Factorization(矩陣分解)、Factorized Model
      這些名詞在本質上應該是同一種思想體系的不同擴展。在推薦系統領域,提的最多的就是潛在語義模型和矩陣分解模型,其實,這兩個名詞說的是一回事,就是如何通過降維的方法來評分矩陣補全。
      用戶的評分行爲可以表示成一個評分矩陣R,其中R[u][i]就是用戶u對物品i的評分。但是,用戶不會對所有的物品評分,所以這個矩陣裏有很多元素都是空的,這些空的元素稱爲缺失值。因此,評分預測從某種意義上來說就是填空,如果一個用戶對一個物品沒有評過分,那麼推薦系統就要預測這個用戶是否會對這個物品評分以及回評幾分。
      矩陣分解技術是實現隱語義模型使用最爲廣泛的一種方法,其思想也正是來源於此,著名的推薦領域大神Yehuda Koren更是憑藉矩陣分解模型勇奪Netflix Prize推薦比賽冠軍,以矩陣分解爲基礎,Yehuda Koren在數據挖掘和機器學習相關的國際頂級會議(SIGIR,SIGKDD,RecSys等)發表了很多文章,將矩陣分解模型的優勢發揮得淋漓盡致。實驗結果表明,在個性化推薦中使用矩陣分解模型要明顯優於傳統的基於鄰域的協同過濾(又稱基於記憶的協同過濾)方法,如UserCF、ItemCF等,這也使得矩陣分解成爲了目前個性化推薦研究領域中的主流模型。

    本文將隱語義模型和矩陣分解看作同一概念。

    另外,奇異值分解(Singular Value Decomposition, SVD),非負矩陣分解(Non-negative Matrix Factorization, NMF),概率矩陣分解(Probability Matrix Factorization, PMF)等方法雖然也使用矩陣分解的思想,屬於矩陣分解的範疇,但是其分解方法和LFM有所不同。

   個人觀點:矩陣分解是隱語義模型(LFM)採用的一種方法,是對傳統潛在語義分析(LSA)就是的改進,傳統潛在語義分析採用的是SVD。

    


5.3.2 隱語義模型(基於模型的協同過濾算法)


       本節以LFM爲例介紹隱含語義分析在推薦系統中的應用。
       首先說明一下隱語義模型的歷史:
               源於對SVD(奇異值分解)方法的改進,傳統SVD是線性代數典型問題;
               SVD可用於推薦系統評分矩陣補全,但由於計算量太大,實際上只是適用於覎模很小的系統;
               Simon Funk改進SVD(Funk-SVD),後來被稱爲Latent Factor Model(SVD是純矩陣問題,運算過程中會產生一巨大的矩陣,          一般適合比較小的系統,Fuck改進以後,他不用矩陣計算,變成用迭代計算,使用梯度下降法來求解,比較容易計算。即用梯度下降算         法解決一個SVD問題)。

       隱語義模型LFM和LSI,LDA,Topic Model其實都屬於隱含語義分析技術,是一類概念,他們在本質上是相通的,都是找出潛在的主題或分類。這些技術一開始都是在文本挖掘領域中提出來的,近些年它們也被不斷應用到其他領域中,並得到了不錯的應用效果。比如,在推薦系統中它能夠基於用戶的行爲對item進行自動聚類,也就是把item劃分到不同類別/主題,這些主題/類別可以理解爲用戶的興趣。
        對於一個用戶來說,他們可能有不同的興趣。就以作者舉的豆瓣書單的例子來說,用戶A會關注數學,歷史,計算機方面的書,用戶B喜歡機器學習,編程語言,離散數學方面的書, 用戶C喜歡大師Knuth, Jiawei Han等人的著作。那我們在推薦的時候,肯定是向用戶推薦他感興趣的類別下的圖書。那麼前提是我們要對所有item(圖書)進行分類。那如何分呢?大家注意到沒有,分類標準這個東西是因人而異的,每個用戶的想法都不一樣。拿B用戶來說,他喜歡的三個類別其實都可以算作是計算機方面的書籍,也就是說B的分類粒度要比A小;拿離散數學來講,他既可以算作數學,也可當做計算機方面的類別,也就是說有些item不能簡單的將其劃歸到確定的單一類別;拿C用戶來說,他傾向的是書的作者,只看某幾個特定作者的書,那麼跟A,B相比它的分類角度就完全不同了。
        顯然我們不能靠由單個人(編輯)或team的主觀想法建立起來的分類標準對整個平臺用戶喜好進行標準化。原因如下:
               使用專業人員(編輯)對商品進行整理分類,但這樣會產生成本和效率瓶頸
               受限於編輯的專業水平,編輯的意見未必能代表用戶的意見
               分類的粒度難於控制
              如果商品有多個分類,很難考慮周全
              多維度,多規角分類
              編輯很難決定商品在類別裏的權重

      爲了解決上面的問題,研究人員提出:爲什麼我們不從數據出發,自動地找到那些類,然後進行個性化推薦?於是,隱含語義分析(latent variable analysis)出現了。隱含語義分析技術因爲採取基於用戶行爲統計的自動聚類,較好地解決了上面提出的5個問題。
      下面我們就來看看LFM是如何解決上面的問題的?對於一個給定的用戶行爲數據集(數據集包含的是所有的user, 所有的item,以及每個user有過行爲的item列表),使用LFM對其建模後,我們可以得到如下圖所示的模型:(假設數據集中有3個user, 4個item, LFM建模的分類數爲4)

       R矩陣是user-item矩陣,矩陣值Rij表示的是user i 對item j的興趣度,這正是我們要求的值。對於一個user來說,當計算出他對所有item的興趣度後,就可以進行排序並作出推薦。LFM算法從數據集中抽取出若干主題,作爲user和item之間連接的橋樑,將R矩陣表示爲P矩陣和Q矩陣相乘。其中P矩陣是user-class矩陣,矩陣值Pij表示的是user i對class j的興趣度;Q矩陣式class-item矩陣,矩陣值Qij表示的是item j在class i中的權重,權重越高越能作爲該類的代表。所以LFM根據如下公式來計算用戶U對物品I的興趣度


                                                          
      我們發現使用LFM後,
             我們不需要關心分類的角度,結果都是基於用戶行爲統計自動聚類的,全憑數據自己說了算。
             不需要關心分類粒度的問題,通過設置LFM的最終分類數就可控制粒度,分類數越大,粒度約細。
             對於一個item,並不是明確的劃分到某一類,而是計算其屬於每一類的概率,是一種標準的軟分類。
             對於一個user,我們可以得到他對於每一類的興趣度,而不是隻關心可見列表中的那幾個類。
             對於每一個class,我們可以得到類中每個item的權重,越能代表這個類的item,權重越高。
    舉個例子: 假如LFM把所有物品分成3個類型[語文, 數學, 英語], 用戶A非常喜歡中國文學, 因此用戶A的p(u,k)向量可以寫成[1,0,0], 現在有兩本書<微積分>和<唐詩三百首>, 分別以q1(i,k)=[0,1,0]和q2(i,k)=[1,0,0]表示, 那麼我們就可以計算用戶A分別對兩本書的喜愛程度了
                    A對<微積分>的喜愛程度p1 = p(u,k) * q1(i,k) = [1,0,0] * [0,1,0] = 0
                    A對<唐詩三百首>的喜愛程度p2 = p(u,k) * q2(i,k) = [1,0,0] * [1,0,0] = 1
             這樣就可以判斷A對於<唐詩三百首>比<微積分>的喜愛程度要高,然後給他推薦<唐詩三百首>.
      舉例2:
                 

那麼,接下去的問題就是如何計算矩陣P和矩陣Q中參數值。一般做法就是最優化損失函數來求參數。在定義損失函數之前,我們需要準備一下數據集並對興趣度的取值做一說明。
      需要根據用戶的行爲數據構建訓練集
                a.      顯性反饋數據
                         用戶對和教育平臺上的產品或者教育資源進行的”打分”, “點贊”或者”踩”的行爲就是顯性反饋數據的來源.
                b.      隱性反饋數據
                        相對於顯性反饋數據, 隱性反饋數據比較難以獲取. 如果把用戶經常瀏覽的教育資源作爲對某個隱分類的正反饋數據, 現在的困難就在於如何獲得用戶的負反饋                         數據, 因爲不可能把用戶沒有瀏覽過的教育資源就當成用戶不喜歡的教育資源. 我覺得應該在熱門推薦系統的基礎上選取一些熱門的但是用戶沒有瀏覽過或者                           表達過偏好的教育資源當成是用戶不喜歡的資源, 因爲一些熱門的資源在用戶看來應該是經常能夠看到的,在這個前提下用戶卻沒有去看, 發生這種小概率事件                           就可以看成用戶不喜歡這一類型的資源.
                在隱性反饋數據下產生負樣本的幾種方法:
                              
                        然後喜歡設定rui爲1,不喜歡設定爲rui爲0(最簡單)

接下來求解計算矩陣P和矩陣Q中參數值
     損失函數:


                 
    損失函數的意義是, 用戶u對物品i的真實喜愛程度與推算出來的喜愛程度的均方根誤差, 通俗來說就是真實的喜愛程度與推算的喜愛程度的誤差,要使模型最合理當然就是使這個誤差達到最小值. 公式中最後兩項是懲罰因子, 用來防止分類數取得過大而使誤差減少的不合理做法的發生, Lambda參數是一個常數, 需要根據經驗和業務知識進行反覆嘗試決定的.
對損失函數求最小值可以使用梯度下降法(或者採用最小二乘法 Spark Mllib 的ALS 就是採用最小二乘法求解的),本次採用梯度下降算法.(梯度下降算法是同時求出兩個參數,最小二乘法的思想就是固定一個求解另一個,類似於SMO算法)
      1,對兩組未知數求偏導數
       
      2,根據隨機梯度下降法得到梯度公式
           
      其中α是在梯度下降的過程中的步長(也可以稱作學習速率), 這個值不宜過大也不宜過小, 過大會產生震盪而導致很難求得最小值, 過小會造成計算速度下降. 需要經過試驗得到最合適的值.
      最終會求得每個用戶對於每個隱分類的喜愛程度矩陣和每個物品與每個隱分類的匹配程度矩陣. 在用戶-物品的矩陣中, 通過兩次迭代可以求得每個用戶對每個物品的喜愛程度,選取喜愛程度最高而且用戶沒有反饋過的物品進行推薦.
LFM中的重要參數:

        a, 模型中隱特徵個數F(嘗試,根據經驗)
        b, 梯度下降法中選取的學習率
        c, 損失凼數中的懲罰項係數lambda
        d, 訓練集的負樣本/正樣本比例ratio(一般取1)

    這四項參數需要在試驗過程中獲得最合適的值.acd三項需要根據推薦系統的準確率,召回率,覆蓋率,流行度作爲參考, 而b項則是要通過參考模型的訓練效率.

當估算出P和Q矩陣後,我們就可以使用公式計算用戶U對各個item的興趣度值(Rui),並將興趣度值最高的N個iterm(即TOP N)推薦給用戶。

下面介紹一個改進的LFM的方法:假如偏置項後的LFM

剛纔說的LFM預測公式:

                                    

這個預測公式通過隱類將用戶和物品聯繫在了一起。但是,實際情況下,一個評分系統有些固有屬性和用戶物品無關,而用戶也有些屬性和物品無關,物品也有些屬性和用戶無關。因此,Netflix Prize中提出了另一種LFM,其預測公式如下:

                                                                     

這個預測公式中加入了3項u,bu,bi。他們的作用如下:

      1,u   訓練集中多有記錄的評分的全局平均數。在不同的 網站中,因爲網站定位和銷售的物品不同,網站的整體評分分佈也顯示出一下差異。比如有些網站的用戶就是喜歡打高分,而另一些網站的用戶就是喜歡打低分。而全局平均數可以表示網站本身對用戶評分的影響。

     2, bu  用戶偏執(user bias)項。這一項表示了用戶的評分習慣中和物品沒有關係的那種因素。比如有些用戶就是比較苛刻,對什麼東西要求都很高,他們的評分就會偏低,而有些用戶比較寬容,對什麼東西都覺得不錯,那麼他的評分就會偏高。

     3, 物品偏執(item bias)項。這一項表示了物品接受的評分中和用戶沒有關係的因素。比如有些物品本身質量就很高,因此獲得的評分相對都比較高,而有些物品本身質量很差,因此獲得的評分相對都比較低。

     增加的3個參數中,只有bu、bi是要通過機器學習訓練出來的。同樣可以求導,然後用梯度下降求解這兩個參數。

     Spark MLlib中的ALS提供了求解帶偏置矩陣分解的交替最小二乘算法


5.3.3 LSA


        LSA(latent semantic analysis)潛在語義分析,也被稱爲LSI(latent semantic index),是Scott Deerwester, Susan T. Dumais等人在1990年提出來的一種新的索引和檢索方法。該方法和傳統向量空間模型(vector space model)一樣使用向量來表示詞(terms)和文檔(documents),並通過向量間的關係(如夾角)來判斷詞及文檔間的關係;而不同的是,LSA將詞和文檔映射到潛在語義空間,從而去除了原始向量空間中的一些“噪音”,提高了信息檢索的精確度。

場景:

         

求解LSA的步驟:

        分析文檔集合,建立Term-Document矩陣。
        對Term-Document矩陣進行奇異值分解。
        對SVD分解後的矩陣進行降維,也就是奇異值分解一節所提到的低階近似。
        使用降維後的矩陣構建潛在語義空間,或重建Term-Document矩陣。

例子:

   然後對分解後的矩陣降維,這裏保留{S}的最大兩個奇異值,相應的{W}{P}矩陣如圖,注意{P}在公式中需要轉置。

   到了這一步後,我們有兩種處理方法,論文Introduction to Latent Semantic Analysis是將降維後的三個矩陣再乘起來,重新構建了{X}矩陣如下:

    


觀察{X}矩陣和{X^}矩陣可以發現:

{X}中human-C2值爲0,因爲C2中並不包含human單詞,但是{X^}中human-C2爲0.40,表明human和C2有一定的關係,爲什麼呢?因爲C2:”A survey of user opinion of computer system response time”中包含user單詞,和human是近似詞,因此human-C2的值被提高了。同理還可以分析其他在{X^}中數值改變了的詞。

   SVD分解是早期推薦系統研究常用的矩陣分解方法,不過該方法具有一下缺點,因此很難再實際系統中應用。

          1,改方法首先需要一個簡單的方法補全稀疏評分矩陣。一般來說,推薦系統中的評分矩陣是非常稀疏的,一般都有95%以上的元素是缺失的。而一旦補全,評分矩陣就會變成一個稠密矩陣,從而使評分矩陣的存儲需要非常大的空間,這種空間的需求在實際系統中是不可能接受的。

          2,改方法依賴的SVD分解方法的計算複雜度很高,特別是在稠密的大規模矩陣上更是非常慢。一般來說,這裏的SVD分解用戶1000維以上的矩陣就已經非常慢了,而實際系統動輒是上千萬的用戶和幾百萬的物品,所以這一方法無法使用。如果仔細研究關於這一方面的論文可以發現,實驗都是在幾百個用戶、幾百個物品的數據集上進行的。

     正是由於上面的兩個缺點,SVD分解算法提出幾年後在推薦系統領域都沒有得到廣泛的關注。知道2006年Netflix prize開始後,Simon Funk在博客上公佈了一個算法(成爲Funk-SVD),一下子引爆了學術界對矩陣分解類方法的關注,而且Simon Funk的博客也成爲了很多學術論文經常引用的對象。Simon Funk提出的矩陣分解方法後來被Netflix Prize的冠軍Koren成爲Latent Factor Model(簡稱LFM)。

 

5.3.4 基於標籤的推薦


  見 http://blog.csdn.net/u011263983/article/details/51507306 博文中的基於標籤的推薦系統

 

6 推薦系統案例


     見:http://blog.csdn.net/u011263983/article/details/51610568
————————————————
版權聲明:本文爲CSDN博主「漠小淺」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011263983/article/details/51549693

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