You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于协同过滤的NMF算法Top5标签推荐实现求助

NMF协同过滤标签Top5推荐实现步骤

你已经完成了NMF的矩阵分解和重构,接下来可以按以下步骤实现Top5标签推荐:

核心逻辑

NMF重构后的矩阵NMF_matrix中,每一行对应一个用户,每一列对应一个标签,矩阵值代表模型预测的用户对该标签的偏好程度。我们需要基于这个得分,筛选出用户未使用过的标签,再取得分最高的前5个。

修改后的代码实现

import numpy as np
from sklearn.decomposition import NMF

# 假设matrix是用户-标签矩阵(行=用户,列=标签,值=用户是否使用过该标签或使用频次)
model = NMF(n_components=2, init='random', random_state=0)
W = model.fit_transform(matrix)
H = model.components_
NMF_matrix = np.dot(W, H)

# 目标用户索引(比如测试集中的第i个用户)
target_user_idx = i

# 1. 获取目标用户的标签偏好得分向量
user_scores = NMF_matrix[target_user_idx]

# 2. 获取该用户已使用过的标签索引(假设matrix中1表示已使用,0表示未使用,可根据实际数据调整)
used_tag_indices = np.where(matrix[target_user_idx] > 0)[0]

# 3. 将已使用标签的得分设为极低值,确保不会被推荐
user_scores[used_tag_indices] = -np.inf

# 4. 按得分从高到低排序,取前5个标签的索引
top5_tag_indices = np.argsort(user_scores)[::-1][:5]

# 5. 映射到实际标签名称
hashtag_recommend_collaborative = [new_hashtags[idx] for idx in top5_tag_indices]

print("Top5推荐标签:", hashtag_recommend_collaborative)

关键说明

  • 排除已使用标签:推荐的核心是给用户推送未接触过的标签,必须过滤掉用户已经使用过的标签,避免重复推荐。
  • 得分排序:np.argsort返回的是从小到大的索引,用[::-1]反转成从大到小排序后,再取前5个即可。
  • 数据适配:如果你的matrix中值不是0/1(比如是使用频次),只需调整used_tag_indices的判断条件(比如matrix[target_user_idx] > 0依然适用,只要未使用的标签值为0)。

内容的提问来源于stack exchange,提问作者zahra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 16:39:21