1. 程式人生 > >資料科學個人筆記:推薦系統之推薦演算法(基於內容+標籤+半監督學習模型)

資料科學個人筆記:推薦系統之推薦演算法(基於內容+標籤+半監督學習模型)

一、基於內容的模型

(一)推薦系統冷啟動問題

使用者冷啟動:給新使用者推薦

物品冷啟動:新物品被推薦

系統冷啟動:為新開發的網站(還沒有使用者和使用者行為,只有一些物品資訊)設計推薦系統

冷啟動問題的一些解決方案:1.推薦熱門;2.用註冊資訊進行粗粒度的個性化;3.利用社交網路賬號資訊做社會化推薦;4.在使用者登陸時對一些物品進行反饋;5.引入專家知識建立物品相關表;6.利用物品內容資訊解決物品冷啟動。

(二)基於物品內容資訊的推薦系統(TF-IDF)

1.向量空間模型VSM:

向量空間模型是一個文字文件空間表示方法。給定文件詞彙表是一個詞典,通過一些自然語言處理方法從所有文件中獲取,詞典中詞的數為n。每個文件被表示成一個n維空間中的向量,每一維對應給定文件詞彙表中的一個詞在該文件中的權重,文件dj和詞tk權重w(k,j)的計算方法如下:

TF-IDF(tk,dj)=(詞在文件中頻率/最常出現詞在文件中頻率)*log(文件數/出現過詞彙tk的文件數)

W(k,j)=TF-IDF(tk,dj)/sqrt(j文件中各詞TF-IDF平方的和)

2.度量兩個文件的接近程度

常使用餘弦相似度:

Sim(di,dj)=兩向量點積/兩向量模的積

(三)LDA模型(待完善)

1.話題模型:

隱含狄利克雷分佈簡稱LDA(latent dirichlet allocation),是主題模型(topic model)的一種。LDA的話題模型假設每篇文件的每個詞是生成方式是從由話題分佈中按照概率分佈隨機抽取話題並按照話題中的詞典分佈隨機選取話題中的詞。

LDA演算法通過觀察生成的文件判斷最可能的話題分佈是怎樣的。

主題模型屬於聚類方法,是一種無監督的學習方法。

2.頻率學派與貝葉斯學派

PLSA與LDA模型分屬此兩派。頻率學派認為分佈的引數是固定的,樣本是隨機生成的。貝葉斯學派認為樣本是固定的,引數是隨機變數,固定的操作模式是通過樣本觀測求後驗。

3.LDA中相當於求解P(主題|文件)和P(詞|文件)的兩個引數,用EM演算法求解。

二、基於標籤的模型

(一)UGC(使用者生成的內容)標籤系統

1.使用者會給物品打標籤,內容包括物品是什麼、物品種類、誰擁有物品、使用者觀點(例:有趣)、使用者相關的標籤(我最喜歡的)、使用者的任務(即將閱讀)。

2.標籤的流行度的log和標籤的數量的log幾乎是一條斜率為負的直線。

(二)簡單的基於標籤推薦

p(u,i)=sum[n(u,b)*n(b,i)],其中n(u,b)為使用者u打過標籤b的次數,n(b,i)為物品i被打過b標籤的次數。

1.演算法的改進

2..P(u,i)=sum[n(u,b)*n(b,i)/(log(1+nb(u)))],增加了分母項(為了懲罰熱門標籤),其中nb(u)記錄了標籤b被多少各不同使用者使用過,借鑑了TF-IDF的思想。

3..P(u,i)=sum[n(u,b)*n(b,i)/(log(1+nb(u)*log(1+ni(u))))],進一步擴充套件了分母項(為了懲罰熱門物品),其中ni(u)記錄了物品i被多少各不同使用者打過標籤。

(三)解決資料稀疏性(相似標籤的聚合)

現實中使用者和物品的交集標籤會很少,所以應將相似標籤聚合,計算標籤的餘弦相似度:

Sim(b,b’)=[sum(nbi*nb’i)/sqrt[sum(nbi^2)*sum(nb’i^2)]],nbi為給各物品打標籤b的使用者數,nb’i為給各物品打標籤b’的使用者數。

(四)標籤清理

1.去除詞頻很高的停止詞和表情緒的詞;2.去除因詞根、分隔符不同造成的同義詞。

3.也可採用讓使用者進行反饋的方式。

(五)如何給使用者推薦標籤

1.給使用者推薦標籤的目的:(1)方便使用者輸入標籤;(2)提高標籤質量。

2.方法:將使用者u最常使用的標籤和物品i最常被打的標籤線性加權。

三、半監督學習與推薦系統結合

(一)基於半監督混合聚類的推薦方法

1.高斯混合模型(EM演算法求解)

設有k個高斯分佈,每個分佈都有一組引數(mu,sigma^2),則在高斯混合模型中,一組觀測值出現的概率為P(y|theta)=sum(alfa(k)*f(y|mu,sigma^2)),即每個高斯分佈計算出的出現概率的加權,sum(alfa)=1,為權重。

該模型可用於聚類,一組觀測值是來自第k個模型的概率為【第k個模型計算的概率/總概率】。

2.求解高斯混合模型

使用EM演算法,先出初始化模型的各個引數alfa、mu、sigma,E步計算各資料屬於第k類的概率,M步迭代新一輪引數:

Mu(k)=各樣本累加(屬於k類的概率*樣本座標值)/各樣本累加(屬於k類的概率)

Sigma^2(k)=各樣本累加(屬於k類的概率*(樣本點-mu(k))^2)/各樣本累加(屬於k類的概率)

Alfa(k)=各樣本累加(屬於k類的概率)/樣本數

重複E步和M步直到收斂。

3.基於有標籤資料和馬氏距離度量的權重矩陣構建

(1)馬氏距離:dis(x,y)=sqrt((x-y)*S^(-1)*(x-y)),S^(-1)為所有樣本的協方差矩陣。

即:馬氏距離=sqrt【各維度累加(維度值的差的平方/維度上的標準差的平方)】。

4.權重矩陣:

若i,j都有標籤,Wij=1(同一類)或0(非)

若i有標籤j沒有,則設k類的中心為k類有標籤資料的均值,Wij=1(j到i所屬類的中心的距離小於到中心的k類有標籤資料的最遠距離)或0(非)

若i,j都沒有標籤,Wij=1(有一個類能讓i和j同時在其有標籤資料半徑內的)或0(非)

5..加了Kullback-Leibler散度的cost-function

設定控制任意兩個類對應的高斯分佈差異較小的正則項,將散度函式對稱化,即

Dij=1/2*(sum(Pi(c)*log(Pi(c)/Pj(c))+sum(Pj(c)*log(Pj(c)/Pi(c)))

R=sum(Dij*Wij)

Costfunction=原高斯混合模型costfunction-lamda*R

6.求解新的cost-function

使用EM演算法,先出初始化模型的各個引數alfa、mu、sigma,E步計算各資料屬於第k類的概率,M步迭代新一輪引數:

Mu(k)=樣本點

Sigma^2(k)=各樣本累加(屬於k類的概率*(樣本點-mu(k))^2)/各樣本累加(屬於k類的概率)

Alfa(k)=各樣本累加(屬於k類的概率)/樣本數

重複E步和M步直到收斂。

(二)基於主動學習與協同訓練的半監督推薦方法

1.協同訓練演算法:

標準的協同訓練需滿足3個基本條件:

(1)屬性集可以被自然地劃分為兩個集合;(2)每個屬性集的子集合都足以訓練一個分類器;(3)在給定標籤的情況下,這兩個屬性集是相互獨立的。

滿足上述條件的兩個屬性集被稱為充分冗餘檢視。

分別在兩個屬性集上訓練兩個分類器,將這兩個分類器運用到無標籤資料上,在選擇每個分類器分類結果置信度高的無標籤資料以及該資料的預測標籤加入另一個分類器的有標籤資料集中進行下一輪訓練。

2.主動學習演算法:

主動學習演算法利用訓練號的分類器對無標籤資料進行選擇,選擇出資訊量最大的(當前分類器認為不確定性最高的)無標籤資料交由領域專家進行標註。選擇樣本方式分以下三種:(1)樣本資格查詢:選擇的樣本由自己生成,可能在樣本集中並不存在;(2)基於流:每次獲得一組樣本時,在其中選擇一個;(3)基於池:將獲得的資料放在一個池中,進行選擇。

3.基於熵的檢視(屬性集)劃分方式:

在劃分檢視時,計算每個特徵對於關注標籤的熵值(計算方式見決策樹ID3),然後根據

Info=sum(按特徵劃分資料比例*-sum(pilog(pi))),按照各特徵的info值,儘量讓兩個檢視的info值對等。

4.樣本資訊量估計方法

基於的假設:若樣本置信度高,近鄰置信度低,樣本貢獻度低;若樣本置信度低,近鄰置信度高,樣本貢獻度高。由此公式如下:

樣本貢獻度=1/(類別數*置信度)+alfa*|sum(樣本置信度-近鄰置信度)|

5.演算法流程:

(1)利用熵的檢視劃分方法,並用分類演算法分別訓練模型。

(2)用兩模型分別對無標籤資料(也分兩個檢視)進行標註,其中高置信度的樣本標註後放入對方的訓練資料中,高貢獻度的樣本放入主動學習池中。