《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇

在上一篇博客里面分享的是《推荐系统实践》中冷启动相关的处理算法,对此还不熟悉的读者可以戳这里

关于这个系列会分为如下几个部分:

《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇
《推荐系统实践》算法纯享(附代码链接)(二)—— 协同过滤篇
《推荐系统实践》算法纯享(附代码链接)(三)—— 冷启动篇
《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇
《推荐系统实践》算法纯享(附代码链接)(五)—— 借助上下文信息推荐篇
《推荐系统实践》算法纯享(附代码链接)(六)—— 借助社交网络推荐篇
《推荐系统实践》算法纯享(附代码链接)(七)—— 评分预测篇

完整代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice

下面将开始本系列的第四部分——UGC推荐篇

4 UGC推荐

用户的标签行为数据集一般由(u, i, b)三元组组成,表示用户u给物品i打上了标签b的行为。

4.1 基于用户UGC标签进行推荐

代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice/blob/master/Chapter4/基于用户标签的推荐系统.ipynb

4.1.1 最简单的算法(SimpleTagBased)

在拿到用户标签行为数据之后,一个最容易想到的方法就是:

  1. 统计每个用户最常用的标签
  2. 对于每个标签,统计被打过这个标签次数最多的物品
  3. 对于每个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品进行推荐

用公式表示用户u对物品i的兴趣为,其中, n u , b n_{u,b} nu,b是用户u打过标签b的次数, n b , i n_{b,i} nb,i是物品i被打过标签b的次数。

p ( u , i ) = ∑ b n u , b n b , i p(u, i) = \sum_b n_{u,b}n_{b,i} p(u,i)=bnu,bnb,i

4.1.2 利用TF-IDF进行改进(TagBasedTFIDF和TagBasedTFIDF++)

上面的公式倾向于给热门标签对应的热门物品很大的权重,从而不能反映用户个性化的兴趣,因此可以借鉴TF-IDF思想,对上述公式进行改进(TagBasedTFIDF):

p ( u , i ) = ∑ b n u , b l o g ( 1 + n b ( u ) ) n b , i p(u,i)=\sum_b \frac{n_{u,b}}{log(1+n_b^{(u)})} n_{b,i} p(u,i)=blog(1+nb(u)<

# -*- coding: utf-8 -*- import pandas as pd import numpy as np from math import sqrt critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0}, 'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5}, 'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 4.0}, 'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 2.5}, 'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0}, 'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5}, 'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}} df_critics=pd.DataFrame(critics) ##欧氏距离 def sim_distance(prefs,person1,person2): si={} for item in prefs[person1]: if item in prefs[person2]: si[item]=1 if len(si)==0: return 0 sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2) for item in prefs[person1] if item in prefs[person2]]) return 1/(1+sqrt(sum_of_squares)) ##numpy pandas 方法 def sim_distance2(prefs,person1,person2): return 1/(1+np.linalg.norm(prefs[person1]-prefs[person2])) ##皮尔逊相关系数 def sim_pearson(prefs,p1,p2): si={} for item in prefs[p1]: if item in prefs[p2]: si[item]=1 n=len(si) if n==0: return 1 ##对所有偏好求和 sum1=sum([prefs[p1][it] for it in si]) sum2=sum([prefs[p2][it] for it in si]) ##求平方和 sum1Sq=sum([pow(prefs[p1][it]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值