会员中心 |  会员注册  |  兼职信息发布    浏览手机版!    精选9.9元!    人工翻译    英语IT服务 贫困儿童资助 | 留言板 | 设为首页 | 加入收藏  繁體中文
当前位置:首页 > 机翻技术 > 识别技术 > 正文

基于协同过滤的推荐引擎

发布时间: 2023-04-01 09:47:00   作者:etogether.net   来源: 网络   浏览次数:



另一个常用的距离计算方法就是余弦相似度(cosine similarity),其计算的是两个向量夹角的余弦值。如果夹角为90度,则相似度为0;如果两个向量的方向相同,则相似度为1.0。同皮尔逊相关系数一样,余弦相似度的取值范围也在-1到+1之间,因此我们也将它归一化到0到1之间。计算余弦相似度值,我们采用的两个向量A和B夹角的余弦相似度的定义如下:


式3.png


其中,||A||、||B||表示向量A、B的2范数,你可以定义向量的任一范数,但是如果不指定范数阶数,则都假设为2范数。向量[4,2,2]的2范数为:


式4.png


同样,NumPy的线性代数工具箱中提供了范数的计算方法linalg.norm()。

接下来我们将上述各种相似度的计算方法写成Python中的函数。打开svdRec.py文件并加人下列代码。


程序清单1 相似度计算


程序清单1.png


程序中的3个函数就是上面提到的几种相似度的计算方法。为了便于理解,NumPy的线性代数工具箱linalg被作为1a导人,函数中假定inA和inB都是列向量。perasSim()函数会检查是否存在3个或更多的点。如果不存在,该函数返回1.0,这是因为此时两个向量完全相关。


下面我们对上述函数进行尝试。在保存好文件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


余弦相似度似乎也行,就再试试皮尔逊相关系数:

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

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

1.0


上面的相似度计算都是假设数据采用了列向量方式进行表示。如果利用上述函数来计算两个行向量的相似度就会遇到问题(我们很容易对上述函数进行修改以计算行向量之间的相似度)。这里采用列向量的表示方法,暗示着我们将利用基于物品的相似度计算方法。后面我们会阐述其中的原因。


2. 基于物品的相似度还是基于用户的相似度?

我们计算了两个餐馆菜肴之间的距离,这称为基于物品(item-based)的相似度。另一种计算用户距离的方法则称为基于用户(user-based)的相似度。回到图2,行与行之间比较的是基于用户的相似度,列与列之间比较的则是基于物品的相似度。到底使用哪一种相似度呢?这取决于用户或物品的数目。基于物品相似度计算的时间会随物品数量的增加而增加,基于用户的相似度计算的时间则会随用户数量的增加而增加。如果我们有一个商店,那么最多会有几千件商品。假如,最大的商店大概有100 000件商品。而在Netflix大赛中,则会有480000个用户和17700部电影。如果用户的数目很多,那么我们可能倾向于使用基于物品相似度的计算方法。

对于大部分产品导向的推荐引擎而言,用户的数量往往大于物品的数量,即购买商品的用户数会多于出售的商品种类。


3. 推荐引擎的评价

如何对推荐引擎进行评价呢?此时,我们既没有预测的目标值,也没有用户来调查他们对预测的满意程度。这里我们就可以采用前面多次使用的交叉测试的方法。具体的做法就是,我们将某些已知的评分值去掉,然后对它们进行预测,最后计算预测值和真实值之间的差异。

通常用于推荐引擎评价的指标是称为最小均方根误差(Root Mean Squared Error,RMSE)的指标,它首先计算均方误差的平均值然后取其平方根。如果评级在1星到5星这个范围内,而我们得到的RMSE为1.0,那么就意味着我们的预测值和用户给出的真实评价相差了一个星级。


责任编辑:admin


微信公众号

[上一页][1] [2] 【欢迎大家踊跃评论】
我来说两句
评分: 1分 2分 3分 4分 5分
评论内容:
验证码:
【网友评论仅供其表达个人看法,并不表明本站同意其观点或证实其描述。】
评论列表
已有 0 条评论(查看更多评论)