第八章 評分預測問題算法
一個評分記錄爲一個三元組(u,i,r)咱們用$r{ui}$表示一個用戶u給物品i的評分.機器學習
8.2 評分評測算法函數
(1) 平均值
學習
假設有兩個分類的函數,一個是用戶分類函數$\phi$,一個是物品分類函數$\varphi$.$\phi(u)$定義了用戶u所屬的類,$varphi(i)$定義了物品i所屬的類,評分預測值爲:
測試
(2) 基於領域的方法網站
基於用戶的領域算法認爲一個用戶對一個物品的評分,須要參考和這個用戶興趣類似的用戶對該物品的評分.ui
這裏, S(u, K) 是和用戶 u 興趣最類似的 K 個用戶的集合,N(i) 是對物品 i 評過度的用戶集合.$r_{ui}$是用戶v對物品i的評價,$\hat{r_v)}$是用戶v全部評分的平均值,用戶之間的類似度能夠經過皮爾遜係數計算:spa
(3) 隱語義模型與矩陣分解模型設計
用戶的評分行爲能夠表示成一個評分矩陣 R,其中 R [ u ][ i ] 就是用戶 u 對物品 i 的評分,評分系統在某種意義上是對矩陣中確實的值填空.要尋找的補全方法是一種對矩陣擾動最小的補全方法--既補充以前與以後矩陣的特徵值相差不大.blog
最開始使用SVD(奇異值分解)來解決這個問題,SVD對空間的要求以及其計算所需的高額時間負責度是大型推薦系統所不能接受的.Funk-SVD用了隱模型的方法來改進SVD,用機器學習訓練的方式去獲取矩陣(也就是LFM),這部分在第三章有詳細的說明.
加入偏置項的LFM
不管是用戶仍是物品,都有其各自的固定屬性,這裏用對應的偏置值來表述,改進後的LFM預測公式爲:$\hat{r_{ui}} = \mu+b_u+b_i+p_{u}^T*q_i$.新增的三項功能以下:(會有其可解釋性)
> $\mu$ 訓練集中全部記錄的評分的全局平均數,能夠用來表示網站自己對用戶評分的影響
> $b_u$ 用戶偏置項,用來表示用戶的固定屬性
> $b_i$ 物品偏置項,用來表示物品的固定屬性
這個模型稱爲biasSVD模型
考慮領域影響的LFM
上述的LFM模型並無顯示的考慮用戶的歷史行爲對用戶評分測試的影響.首先修改itemCF,讓其變爲一個可學習的模型,itemCF預測的方式修改以下:
這裏,$w_{ij}$不在是類似矩陣,而是有待學習的參數,學習的loss函數爲:
這樣改進還不夠,w是一個比較稠密的矩陣,對空間的要求比較高.koren將w矩陣進行分解,將參數個數下降到2*n*f個,模型以下;
$x_i$與$x_j$爲兩個F維的向量,用$x_{i}^Tx_j$代替了$w_{ij}$大大下降了參數的數量和存儲空間.改進後的模型以下所示:
加入時間信息
1. 基於領域的模型融合時間信息
主要描述基於物品的領域模型,稱爲TItemCF,預測公式以下:
$f(w_{ij},\Delta{t})$是一個考慮了時間衰減的類似函數,$w_{ij}$表示兩個物品的類似度,$\Delta{t}$是時間差,主要的目的是提升用戶最近的評分行爲對推薦系統的影響,f公式以下:
$\sigma(x)$爲sigmoid函數,隨着$\Delta{t}$增長,$f(w_{ij},\Delta{t})$會變小,也就是用戶的行爲對如今評測的影響隨着時間變長而不那麼重要.
2. 基於矩陣分解的模型融合時間信息
引入時間信息後,用戶評分矩陣再也不是一個二維的矩陣,而是三維矩陣,能夠仿照二維矩陣的分解方式對三維矩陣進行分解,biasSVD中新增長的三個部分能夠看作對二維矩陣的零維,一維分解.仿照這個思想,咱們能夠將用戶—物品—時間三維矩陣以下分解:
這裏$b_t$建模了系統總體平均分隨時間變化的效應,$x_{u}^Ty_t$建模了用戶平均分隨時間變化的效應,$s_{i}^Tz_t$了用戶平均分隨時間變化的,公式最後一項建模了用戶興趣隨着時間影響的效應.
3. 模型融合
(1) 模型級聯融合 (相似adaboost)
和加性模型相似,假設已經有一個模型$\hat{r^k}$,$r_{ui}$爲真實的數據,那麼相似前向分佈算法咱們能夠定義一個loss以下:
具體的過程相似adaboost,每次經過上述損失函數設計出一個新的模型,而後在必定參數的限制下加入原有的模型.
(2) 模型加權融合
帶權的線性融合:
通常來講,評分預測問題的解決須要在訓練集上訓練K個不一樣的預測器,而後在測試集上做出預測。可是,若是咱們繼續在訓練集上融合K個預測器,獲得線性加權係數,就會形成過擬合問題.採用如下三步來解決這個問題:
> 假設數據集已經被分爲了訓練集A和測試集B,那麼首先須要將訓練集A按照相同的分割方法分爲A1和A2,其中A2的生成方法和B的生成方法一致,且大小類似。
> 在A1上訓練K個不一樣的預測器,在A2上做出預測。由於咱們知道A2上的真實評分值,因此能夠在A2上利用最小二乘法計算出線性融合係數$\alpha_k$。
> 在A上訓練K個不一樣的預測器,在B上做出預測,而且將這K個預測器在B上的預測結果按照已經獲得的線性融合係數加權融合,以獲得最終的預測結果。