把腿张开老子臊烂你多p视频软件,free性国产高清videos,av在线亚洲男人的天堂,hdsexvideos中国少妇,俄罗斯真人性做爰

會員中心 |  會員注冊  |  兼職信息發(fā)布    瀏覽手機版!    超值滿減    人工翻譯    英語IT服務 貧困兒童資助 | 留言板 | 設為首頁 | 加入收藏  繁體中文
當前位置:首頁 > 機翻技術 > 識別技術 > 正文

基于協(xié)同過濾的推薦引擎

發(fā)布時間: 2023-04-01 09:47:00   作者:etogether.net   來源: 網絡   瀏覽次數(shù):



另一個常用的距離計算方法就是余弦相似度(cosine similarity),其計算的是兩個向量夾角的余弦值。如果夾角為90度,則相似度為0;如果兩個向量的方向相同,則相似度為1.0。同皮爾遜相關系數(shù)一樣,余弦相似度的取值范圍也在-1到+1之間,因此我們也將它歸一化到0到1之間。計算余弦相似度值,我們采用的兩個向量A和B夾角的余弦相似度的定義如下:


式3.png


其中,||A||、||B||表示向量A、B的2范數(shù),你可以定義向量的任一范數(shù),但是如果不指定范數(shù)階數(shù),則都假設為2范數(shù)。向量[4,2,2]的2范數(shù)為:


式4.png


同樣,NumPy的線性代數(shù)工具箱中提供了范數(shù)的計算方法linalg.norm()。

接下來我們將上述各種相似度的計算方法寫成Python中的函數(shù)。打開svdRec.py文件并加人下列代碼。


程序清單1 相似度計算


程序清單1.png


程序中的3個函數(shù)就是上面提到的幾種相似度的計算方法。為了便于理解,NumPy的線性代數(shù)工具箱linalg被作為1a導人,函數(shù)中假定inA和inB都是列向量。perasSim()函數(shù)會檢查是否存在3個或更多的點。如果不存在,該函數(shù)返回1.0,這是因為此時兩個向量完全相關。


下面我們對上述函數(shù)進行嘗試。在保存好文件svdRec.py之后,在Python提示符下輸入如下命令:

>>> reload(svdRec)

<module 'gvdRec' from 'svdRec.pyc'>

>>> myMat=mat (svdRec.loadExData())

>>> svdRec.ecludSim(myMat[:,0],myMat[:,4])

0.12973190755680383

>>> svdRec.ecludSim(myMat [:,0],myMat[:,0])

1.0


歐氏距離看上去還行,那么接下來試試余弦相似度:

>>> svdRec.cosSim (myMat [:,0],myMat [:,4]]

0.5

>>> svdRec.cosSim(myMat [:,0],myMat [:,0])

1.0000000000000002


余弦相似度似乎也行,就再試試皮爾遜相關系數(shù):

>>> svdRec.pearsSim(myMat [:,0],myMat [:,4])

0.20596538173840329>>> svdRec.pearsSim(myMat[:,0],myMat[:,0])

1.0


上面的相似度計算都是假設數(shù)據(jù)采用了列向量方式進行表示。如果利用上述函數(shù)來計算兩個行向量的相似度就會遇到問題(我們很容易對上述函數(shù)進行修改以計算行向量之間的相似度)。這里采用列向量的表示方法,暗示著我們將利用基于物品的相似度計算方法。后面我們會闡述其中的原因。


2. 基于物品的相似度還是基于用戶的相似度?

我們計算了兩個餐館菜肴之間的距離,這稱為基于物品(item-based)的相似度。另一種計算用戶距離的方法則稱為基于用戶(user-based)的相似度。回到圖2,行與行之間比較的是基于用戶的相似度,列與列之間比較的則是基于物品的相似度。到底使用哪一種相似度呢?這取決于用戶或物品的數(shù)目。基于物品相似度計算的時間會隨物品數(shù)量的增加而增加,基于用戶的相似度計算的時間則會隨用戶數(shù)量的增加而增加。如果我們有一個商店,那么最多會有幾千件商品。假如,最大的商店大概有100 000件商品。而在Netflix大賽中,則會有480000個用戶和17700部電影。如果用戶的數(shù)目很多,那么我們可能傾向于使用基于物品相似度的計算方法。

對于大部分產品導向的推薦引擎而言,用戶的數(shù)量往往大于物品的數(shù)量,即購買商品的用戶數(shù)會多于出售的商品種類。


3. 推薦引擎的評價

如何對推薦引擎進行評價呢?此時,我們既沒有預測的目標值,也沒有用戶來調查他們對預測的滿意程度。這里我們就可以采用前面多次使用的交叉測試的方法。具體的做法就是,我們將某些已知的評分值去掉,然后對它們進行預測,最后計算預測值和真實值之間的差異。

通常用于推薦引擎評價的指標是稱為最小均方根誤差(Root Mean Squared Error,RMSE)的指標,它首先計算均方誤差的平均值然后取其平方根。如果評級在1星到5星這個范圍內,而我們得到的RMSE為1.0,那么就意味著我們的預測值和用戶給出的真實評價相差了一個星級。


責任編輯:admin


微信公眾號

[上一頁][1] [2] 【歡迎大家踴躍評論】
我來說兩句
評論列表
已有 0 條評論(查看更多評論)