推薦系統

來自ng ml-003 的16_XVI._Recommender_Systems 還有17 和18 ng的ml-003就可以看完了。算法

推薦系統,常見於廣告推送,好比亞馬遜或者京東,等你購買東西以後他就會知道你喜歡什麼。函數

1、推薦系統學習


假設一個電影評價系統,等級有5個星星,其中如今有4個評價者,在5部電影進行評價,r(I,j)表示某我的是否對某個電影進行評價。而y(I,j)就是評價的等級。flex

經過對某我的沒有看過的電影中向這我的推薦電影。this


這裏是基於內容的推薦系統,假設的例子仍是前面的額電影例子,對於每一個電影來講,有兩個特徵:romance(愛情片)和acition(動做片)(這裏雖然是特徵,但能夠當作是對電影不一樣程度的標籤,迴歸),經過左邊的幾個不一樣的電影來對這兩個特徵進行不一樣程度的賦值,好比第四部電影,那麼這和特徵來講更像是動做片,而不是愛情片。code

這裏經過引入x_0=1來將原本2維的特徵擴展到三維,而後經過簡單的theta T*x的模型來作預測,,這裏假設用戶1 對第三個電影的想看程度是4.95.orm


這裏就是上面的一個標準化處理方式,在上圖最後寫出了這個模型的目標函數,若是能夠還加上正則化項,在這裏面要注意目標函數第一項中的求和下面的那個,是個求真函數,只有當r(I,j)=1的時候才取j的值,否則就是跳過,這個在ufldl和ng在08年的教學視頻中都有說起,這裏正則化項是從1開始的,由於x_0 =1是常數項,(一般這一項都是省略的),由於對於目標函數來講,縮放 所獲得的最後結果是不變的,因此目標函數中先後兩項的1/m能夠劃掉,1/2不能,是由於留着後面求導用的視頻


上圖中上半部分是對單個的用戶來講的,下面是擴展到全部的用戶的目標函數。這其中發現是對應於一個用戶有一個模型,也就是說不一樣的用戶雖然使用的是線性迴歸,可是參數集確是本身的。ci


上圖就是如何使用梯度降低法來更新參數了,這其實和線性迴歸差很少,並且注意k等於0說的是第一個參數 由於咱們直接賦值爲1的, 在nn中這個叫作偏置部分,上圖中 對於偏置是不進行正則化項的,和上上圖同樣,可是卻須要相似於nn的權值更新。值得注意get

2、協同過濾


由於沒人會給出一個很好的電影的特徵,這個電影多少愛情成分,多少動做成分,並且代價太大,經過換個方法,對於不一樣的參數,即不一樣的用戶來講,讓他們給出本身的喜愛,這個不難,好比用戶1 所對應的參數就是偏心愛情片5  不喜歡動做片0,後面三個用戶以此類推。


、這裏是經過用戶給定的參數來逆推電影的特徵,好比第一個電影,由於前兩個用戶給了5分,並且這兩個用戶超喜歡愛情片,因此這個電影的愛情特徵就是1,相反的動做特徵就是0.



上圖就是經過知道參數的狀況下來獲得特徵的目標函數,和以前的目標函數是同樣的。


這就是協同算法(和em算無法好像),經過先瞎猜theta 來估計特徵 x,而後經過特徵x來從新訓練theta,以此進行直到差很少收斂。


上面的就是先經過給定特徵來按照目標函數進行估計參數theta。而後第二個就是經過給定的theta來按照目標函數估計特徵x。前面估計不一樣的參數的時候第一項是同樣的,可是正則化項是不一樣的,可是最下面的第三個是經過同時對兩個進行目標函數創建,將兩個正則化項放到一塊兒。並且前面第一項的下標要注意下。前兩個是交替的學習theta 和特徵x,第三個是同時進行學習,這裏爲何你們遵循這個不學習x_0=1的特徵,由於以前說了不學習theta0 因此第三項也是從x_1開始的,而每次都忽略theta 0是由於:Finally one last detail is that when we're learning the features this way. Previously we have been using this convention that we have a feature x0 equals one that corresponds to an interceptor. When we are using this sort of formalism where we're are actually learning the features, we are actually going to do away with this convention. And so the features we are going to learn x, will be in Rn. Whereas previously we had features x and Rn + 1 including the intercept term. By getting rid of x0 we now just have x in Rn.
And so similarly, because the parameters theta is in the same dimension, we now also have theta in RN because if there's no x0, then there's no need parameter theta 0 as well. And the reason we do away with this convention is because we're now learning all the features, right? So there is no need to  hard code the feature that is always equal to one. Because if the algorithm really wants a feature that is always equal to 1, it can choose to learn one for itself. So if the algorithm chooses, it can set the feature X1 equals 1.So there's no need to hard code the feature of 001, the algorithm now has the flexibility to just learn it by itself. So, putting everything together, here is our collaborative filtering algorithm.


上圖就是具體的過程,經過訓練好theta 和特徵x ,就能夠進行預測並知道用戶j 對電影 I 的評價了。

3、低秩矩陣因式分解

經過用戶購買的一個產品的信息,來推薦全部類似的產品給用戶


經過上一節中得到的數據進行組成個矩陣。


上面就是將用戶對電影的評價矩陣給分解成用戶theta矩陣和電影特徵矩陣x的乘積形式。


經過計算不一樣電影之間的2-範數,找到和所須要找的目標電影差距最小的電影來做爲類似電影推薦。

4、均值標準化


對於使用協同算法進行計算的時候,對於上圖中新增長的成員5,他沒有參與任何的電影評價,無法進行訓練,目標函數第一項來講,由於r(i,5)=0,因此第一項徹底跳過,對於參數theta來講,都是0,因此開始的預測值都是0.可是這沒啥幫助,由於不少人鍾愛第一部電影,那或多或少推薦第五我的他是否是也喜歡第一部電影來的好。


其實ng說的均值標準化,就是如上圖的將以前評分過的分數進行求均值,而後賦值給沒評分的,這個方法先不說更新數據量大,和在線學習差很少,並且感受精度好差,以爲也就是理解原理吧,在實際的系統上就是讓人知道如今大衆對這個的評價,感受很差。

相關文章
相關標籤/搜索