【我是产品,不是技术】在推荐系统中,这个公式没看懂,可能和我数学不行也有关系,求解,红包送上,
能够给解释一下公式或者计算逻辑就可以
百度
1、解释一下这个公式的含义即可
你这是什么书,上下文是什么,这就是协同过滤算法,但是具体含义要看上下文
每年到大三暑期实习季,学校基本会与很多企业联合开办几场暑期实习招聘专场,以便大学生们获得实习机会,同时学校官网、公众号上也会不定时推送各类公司暑期实习招聘信息,班级群内辅导员也会发布一些靠谱的实习机会,这些暑期实习机会都是免费且真实可靠的。如果你也有暑期实习的需求,建议关注下学校官网与公众号,或者咨询下就业办老师,会获得很多暑期实习机会。
我可以给出一些推荐算法相关的公式和解释:
def cosine_sim(a, b):
dot_product = np.dot(a, b)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
return dot_product / (norm_a * norm_b)
上面的公式用于计算两个向量之间的余弦相似度,可以用于推荐系统中的协同过滤算法。
def user_cf(data, user_id):
users = data.user_id.unique()
sim = {}
for u in users:
sim[u] = cosine_sim(data[data.user_id == user_id].rating.values,
data[data.user_id == u].rating.values)
wtu = data[data.user_id.isin(users)]['rating'].groupby(
data['user_id']).apply(list).apply(np.array)
ratings = wtu.to_dict()
preds = []
for item in data.item_id.unique():
if item not in data[data.user_id == user_id].item_id.unique():
numerator, denominator = 0.0, 0.0
for u in wtu.index:
if rating := ratings.get(u):
if item in data[data.user_id == u].item_id.unique():
s = sim[u]
numerator += s * (data[(data.user_id == u) &
(data.item_id == item)].rating.values[0] -
rating.mean())
denominator += abs(s)
if denominator != 0:
preds.append((item, rating.mean() + numerator / denominator))
return sorted(preds, key=lambda x: x[1], reverse=True)
上面的公式用于基于用户的协同过滤算法,用于给用户推荐物品。使用余弦相似度计算用户之间的相似度,然后用这些相似度给出预测评分。
def item_cf(data, user_id):
users = data.user_id.unique()
wti = data[data.user_id.isin(users)]['rating'].groupby(
data['item_id']).apply(list).apply(np.array)
item_ratings = wti.to_dict()
sim = {}
for item_i in data.item_id.unique():
for item_j in data.item_id.unique():
if item_i != item_j:
if (item_i, item_j) not in sim and (item_j, item_i) not in sim:
mask = data[(data.item_id == item_i) |
(data.item_id == item_j)].pivot_table(
index='user_id', columns='item_id',
values='rating', fill_value=0)
s = cosine_sim(mask[item_i].values, mask[item_j].values)
sim[(item_i, item_j)] = s
sim[(item_j, item_i)] = s
numerator, denominator = {}, {}
for i in wti.index:
numerator[i] = 0.0
denominator[i] = 0.0
for u in data[data.user_id == user_id].user_id.unique():
for i in data[data.user_id == u].item_id.unique():
rui = data[(data.user_id == u) & (data.item_id == i)].rating.values[0]
for j in wti.index:
if j != i:
if rating := item_ratings.get(j):
if u in data[data.item_id == j].user_id.unique():
s = sim[(i, j)]
ruj = data[(data.item_id == j) &
(data.user_id == u)].rating.values[0]
numerator[j] += s * (ruj - rating.mean())
denominator[j] += abs(s)
preds = []
for i in wti.index:
if i not in data[data.user_id == user_id].item_id.unique():
if denominator[i] != 0:
preds.append((i, item_ratings[i].mean() + numerator[i] / denominator[i]))
return sorted(preds, key=lambda x: x[1], reverse=True)
上面的公式用于基于物品的协同过滤算法,同样用于给用户推荐物品。使用余弦相似度计算物品之间的相似度,然后用这些相似度和用户和物品历史评分计算出预测评分。
希望这些公式和代码可以帮到你解决相关问题。