日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码

發布時間:2023/12/10 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先對Probabilistic Matrix Factorization這篇論文的核心公式進行講解和推導;然后用Python代碼在Movielens數據集上進行測試實驗。

一、 背景知識

文中作者提到,傳統的協同過濾算法有兩個不足:

1).不能很好地處理規模非常大的數據;

2). 不能很好地處理那些只給出極少評分的用戶。

概率矩陣分解則能很好的解決上述提到的這兩個問題。

二、算法推導

2.1 定義和描述

假設有

個用戶, 個商品,形成一個 維的評分矩陣 , 矩陣 中的元素 表示用戶 對商品 的評分。假設潛在特征個數為 ,那么 維的矩陣 表示用戶的潛在特征矩陣, 用戶 的潛在特征向量; 維的矩陣 表示商品的潛在特征矩陣, 商品 的潛在特征向量。概率模型圖如下圖所示:

圖1 PMF的概率模型圖

假設關于已知評分數據的條件分布滿足高斯分布:

(1)

其中,

為指示函數:如果用戶 已經對商品 進行了評分,則為1;否者為0。

再假設用戶潛在特征向量和商品潛在特征向量都服從均值為0的高斯先驗分布,即:

(2)

注意公式(2)中的

不是指示函數,表示一個對角陣。

然后,計算

和 的后驗概率:

等式兩邊取對數

后得到:

(3)

2.2 關鍵處推導

此處插入取對數收到得到公式(3)的詳細推導過程(對其中

這一項進行推導):

滿足高斯分布,所以可以得到:

其中

,其中 為對角陣,對上述式子取對數 得:

2.3 最優化目標函數

求等式(3)的最大值,等價于最小化目標函數:

(4)

其中,

。

等式

分別對 和 進行求導得:

然后用隨機梯度下降法(SGD)更新

和 :

其中

為步長,或者稱之為學習率。注意:下降的步長大小非常重要,因為如果太小,則找到函數最小值的速度就很慢,如果太大,則又可能會出現震蕩。

,上述式子簡化為:

(5)

(6)

直到滿足收斂條件或迭代至最大的迭代次數。

2.4 改進和優化

論文中還提到,用

函數 代替原來的線性高斯模型,因為線性高斯模型做預測時會產出評分的有效范圍。 故將等式(1)修改為如下:

(7)

原始評分

則通過函數 映射到 ,然后再參與運算。 為最大評分值。

三、程序實現

3.1 代碼及實現

偽代碼如下所示:

Input: the number of latent factor K, the learning rata eta, regularization parameters lambda_1,lambda_2, the max iteration Step, and the rating matrix RInitialization: Initialize a random matrix for user matrix U and item matrix Vfor t = 1, 2,...Step dofor (u,i,r) in Rmake prediction pr=Ui^T*Vjerror e=r-prupdate Ui and Vj by (5) and (6)the algorithm suffers a loss (Ui, Vj, r)end for end for

下面用python,在 MovieLens 100K 這個數據集上實現PMF算法。

核心代碼如下所示:

def update(p, q, r, learning_rate=0.001, lamda_regularizer=0.1):error = r - np.dot(p, q.T) p = p + learning_rate*(error*q - lamda_regularizer*p)q = q + learning_rate*(error*p - lamda_regularizer*q)loss = 0.5 * (error**2 + lamda_regularizer*(np.square(p).sum() + np.square(q).sum()))return p,q,loss

3.2 實驗結果

當訓練集:測試集=8:2時,可得到最終的RMSE為0.92左右,實驗曲線如下所示:

圖2 迭代過程中的loss值

圖3 迭代過程中的RMSE值

完整項目下載地址:

https://github.com/XiuzeZhou/Recommender-Systems?github.com

更多 矩陣分解內容和程序,請看我的最新博文:

周秀澤:推薦系統系列之二:矩陣分解家族?zhuanlan.zhihu.com

參考資料:

[1] 小木,推薦系統之概率矩陣分解的詳細推導過程(Probabilistic Matrix Factorization,PMF)

[2] 追溯星霜,PMF:概率矩陣分解

總結

以上是生活随笔為你收集整理的python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。