本文根據Andrew Ng的Machine Learning的課寫就。算法
=======================================1、預測電影評分==========================================機器學習
全文以「預測電影評分」例子展開學習
r(i,j)=0則代表user_j沒有對movie_i 沒有評分,優化
推薦系統要作的就是經過預測user_j對這些movie {i|r(i,j)=0}的評分來給user_j 推薦其可能會喜歡的電影<預測評分較高的movie>spa
=======================================2、基於內容的推薦=======================================get
對每一個movie_i引入特徵x(i)=(x1, x2),這種特徵可能代表user對movie類型的偏好:浪漫or動做等io
對於每一個user引入一個參數theta,而後對評分矩陣的每列(對應一個user)作線性迴歸,數據是{ (x(i), y(i,j)) |r(i,j)=1,for some j all i}class
像機器學習同樣,x(i)添加個1變量x(i)=(1, x1, x2)變量
那麼對於未評分的movie_t,咱們可使用線性迴歸訓練的參數theta與對應特徵x(t)作內積來獲得其預測評分
im
對每一個用戶都訓練一個參數theta_j,優化模型以下:
優化算法:注意正則項是不約束x(i)=(1, x1, x2)中1對應的參數theta的第一項theta0,因此k=0與k=1,2分別對待
=======================================3、協同過濾=======================================
如今換個角度:若是知道theta for all user j,如何來預測x(i) = (x1, x2) all i
仍然可使用線性迴歸,爲訓練每一個x(i),須要評分矩陣的第i行數據{ (x(i), y(i,j)) |r(i,j)=1,for some i all j}
theta_j = (0, theta1, theta2) ;theta1=5說明user_j喜歡romance類movie, theta2=5說明user_j喜歡action類movie,只能有一個等於5哦,
我以爲也能夠是:theta_j = (0, 4, 1) ;喜歡romance 4 action 1.
對應的優化:
協同過濾:交替優化theta與x
=========================================4、協同過濾算法=======================================
優化:
優化:注意去掉了theta和x的添加項
=========================================5、實現細節補充=======================================
實現細節:
若是有user沒有對任何電影評分或者全部評分的電影都是0分,那麼所學習到的參數是零向量,
則預測都是0值,這是不合理的。經過 將評分矩陣減去其行均值再進行線性迴歸來「避免」這種狀況
=========================================6、一點思考==========================================