【基于协同过滤算法的电影推荐】

本文深入探讨了协同过滤算法在电影推荐中的应用,包括UserCF和ItemCF的区别、实现及K值影响实验。通过MovieLens数据集展示了两种算法的效果,分析了它们在评价指标、适用场景和模型融合方面的特点。
摘要由CSDN通过智能技术生成

目录

 

1 协同过滤算法

1.1 CF与 User/Item 推荐算法区别

1.2 UserCF

1.3 ItemCF

2 评价指标

3 基于userCF与itemCF电影推荐

3.1 MovieLens数据集

3.2 userCF代码实现

3.3 K值影响实验(userCF)

3.4 itemCF代码实现

3.5 K值影响实验(itemCF)

4 userCF与itemCF比较

4.1 区别

4.2 适用场景

4.3 模型融合 


1 协同过滤算法

1.1 CF与 User/Item 推荐算法区别

基于用户内容的推荐:利用用户人口统计学特征(age/gender/..)计算相似度

基于物品内容的推荐:利用物品的本身属性内容计算相似度

CF:通过分析用户的行为数据,根据用户对物品的偏好发现用户和物品的相关性,基于这种关联推荐(userCF/item/CF)

1.2 UserCF

a 找到与目标用户兴趣相似的用户集合

相似度计算 (Jaccard公式、余弦相似度)

 Jccard: w_{u v}=\frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|}

cosin: w_{\mathrm{tw}}=\frac{|N(u) \cap N(v)|}{\sqrt{|N(u)||N(v)|}}

相似度改进,惩罚热门物品(对冷门物品的相同喜爱,更能表明两个人相似)

w_{u v}=\frac{\sum_{i \in N(u) \cap N(v)} \frac{1}{\log 1+|N(i)|}}{\sqrt{|N(u)||N(v)|}}

但是,如果计算目标用户与所有用户的相似度,复杂度太高O(u*u),实际上很多用户并没有与其有相同的感兴趣物品。

建立物品-用户倒排表(统计每一件物品对应的用户集合),遍历找到N(u)&N(v)不为零的,两两用户的相似度值C[u][v]+1,再除以分母。C[u][v]=N,表示用户u与v共有的爱好物品数量为N个。

 

b 找到该集合中所有用户喜欢的物品,然后排除目标用户已经看过的物品,推荐排在前n的物品

计算感兴趣度:p(u, i)=\sum_{v \in S(u, K) \cap N(i)} w_{u v} r_{v i}  ,其中wuv表示用户u和v的相似度,rvi表示用户v对物品i的兴趣度

1.3 ItemCF

原理同userCF,先计算物品的相似度(被喜欢的人越多越相似),然后生成推荐列表

相似度计算:

w_{i j}=\frac{|N(i) \cap N(j)|}{|N(i)|},N(i)表示喜欢i物品的用户数量

改进:惩罚热门物品,利于挖掘长尾物品

w_{i j}=\frac{|N(i) \cap N(j)|}{\sqrt{|N(i)||N(j)|}} 

建立用户--物品倒排表(统计每一个用户对应的物品列表)

兴趣度:

p_{u j}=\sum_{k=N(u) \cap S(j, K)} w_{j i} r_{u i},S(j,K)是和物品j最相似的K个物品集合,wji是物品j和i的相似度,rui是用户u对i的兴趣度

2 评价指标

\text { Recall }=\frac{\sum_{u}|R(u) \cap T(u)|}{\sum_{u}|T(u)|}\text { Precision }=\frac{\sum_{u}|R(u) \cap T(u)|}{\sum_{u}|R(u)|}\text { Coverage }=\frac{ \|_{u \in U} R(u) |}{|I|}

recall: 预测准确的占真实列表的比例

precision:预测正确的占预测集合的比例

coverage:预测的物品类别占总类别的比例

还有一些其他的评价指标:

用户满意度(无法离线测量:在线或用户调查)、多样性、新颖性、精细度、信任度、实时性、健壮性...

3 基于userCF与itemCF电影推荐

3.1 MovieLens数据集

MovieLens数据集(Small: 100,000 ratings and 3,600 tag applications applied to 9,000 movies by 600 users. )

userid/ movieid/ ratings/ timestrap,这里忽略时间戳,只利用前三个特征构造用户行为矩阵。

这里只预测目标用户的可能会进行评分的电影,不涉及评分高低,所以感兴趣度计算公式rank[movie] += wuv*rvi,rvi置为1,忽略评分高低的影响。

3.2 userCF代码实现

# coding = utf-8
# userCF推荐算法实现
import random

import math
from operator import itemgetter


class UserB
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值