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

歡迎訪問 生活随笔!

生活随笔

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

python

python新闻推荐系统_python实现推荐系统(一)

發(fā)布時間:2025/3/19 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python新闻推荐系统_python实现推荐系统(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

協(xié)同過濾分為 memory-based 和 model based

1. memory-based 利用用戶物品之間相似度進行推薦

一種是 item-item 即喜歡這個物品的用戶還喜歡..

一種是 user-item 即與你有相似愛好的用戶還喜歡..

現(xiàn)在有個評分矩陣R,行表示用戶,列表示物品,R(i,j)表示用戶i對物品j的評分,R(:,j)表示所有用戶對物品j的評分列,R(i,:)表示用戶i對所有物品的評分行,用戶與物品沒有交互,評分自然為0,可以知道一般的矩陣R是稀疏的。

由user-item 計算每個用戶的相似度,一般取(余弦相似度),即 cos(R(i,:),R(k,:)), 利用在sklearn中的模塊很容易計算得到用戶相似矩陣

from sklearn.metrics.pairwise importpairwise_distances

user_similarity= pairwise_distances(R, metric='cosine')

由item-item 計算每件商品相似度,

item_similarity = pairwise_distances(R.T, metric='cosine')

得到相似度就可以計算預測矩陣P, 即將用戶與商品之間沒有交互的R(i,j)賦上一個預測值

先考慮 item-item 我們可以知道如果物品m與某個物品b相似度較高,那么 與b有交互的用戶k對b的評分會很接近于m,最簡單的是m=b,那么評分相等,可以給出公式來預估k對m的評分,其中分母起到正則化的作用

用戶k對物品m的評分預測:分子表示 物品m與其他所有物品b相似度 與 用戶對其他物品b 的乘積 的和,相當于加權平均

考慮user-item 如果兩個用戶相似,自然他們對某個物品評分應該接近,但如果總有些用戶a喜歡給物品評很高的分,這時候即使兩個用戶不相似,按照item-item 的公式,他們也能占到很高的權重,這就相當于一種干擾,一種噪聲, 這樣,對每個用戶評分做一個平均,標準化

用戶k對物品m的評分預測: 用戶k對所有物品評分平均+ (用戶k與其他所有用戶a相似度 與 (其他用戶a對m的評分-其他用戶a對所有物品的平均評分)的加權和)/分母

這樣我們就可以編寫預測函數(shù)

def predict(R, similarity, type='item'):if type == 'user':

mean_user_rating= R.mean(axis=1)# axis=1 計算每行

rating_d = (R -mean_user_rating[:, np.newaxis]) #np.newaxis根據 R 調整矩陣

prediction= mean_user_rating[:, np.newaxis] + similarity.dot(rating_d) / np.array([np.abs(similarity).sum(axis=1)]).Telif type == 'item':

prediction= ratings.dot(similarity) / np.array([np.abs(similarity).sum(axis=1)])return prediction

通常我們還要對預測結果進行評價,有多種評價函數(shù),一般可以用RMSE(根平均平方誤差)

自然我們要拿R的非0值進行比較,計算預測前后的誤差

from sklearn.metrics importmean_squared_errordefrmse(prediction, test_R):

prediction=prediction[test_R.nonzero()].flatten()

test_R=test_R[test_R.nonzero()].flatten()return sqrt(mean_squared_error(prediction, test_R))

2 model-based 采用矩陣因子分解來近似填充原矩陣

一般來說矩陣R是稀疏的,考慮矩陣計算中的奇異值分解(SVD),通過將其分解成三個矩陣,其中S對角元素稱為奇異值,通過過濾前k大的奇異值,可以近似保存原先矩陣的信息,正如一個圖像矩陣,選取合適的k,重新計算得到的新圖像可以在感官上與原圖像無差異。

具體公式如

X 是m×n , U 是m×k , S 是 k×k , V.T 是k×n

這樣通過計算就可以得到預測矩陣X

importscipy.sparse as spfrom scipy.sparse.linalg importsvds

U, s, VT = svds(train_R, k = 15) #選擇k=15

S=np.diag(s)

X=np.dot(np.dot(U, S), VT)

本文主要介紹了memory-based 和 model-based的協(xié)同過濾方法

總結

以上是生活随笔為你收集整理的python新闻推荐系统_python实现推荐系统(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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