GeoIMC:融合几何信息的电影推荐算法

引言

推荐系统领域中,矩阵分解技术是协同过滤算法的重要分支。传统的矩阵分解方法通常只考虑用户和物品之间的交互信息,而忽略了用户和物品本身的特征。GeoIMC 算法将用户和物品的特征信息融入到矩阵分解过程中,并利用黎曼优化方法求解模型参数,从而提升推荐效果。

GeoIMC 算法原理

GeoIMC 算法基于 Jawanpuria 等人 (2019) 的研究成果,将用户和物品的特征信息融入到矩阵分解过程中。以 MovieLens-100K (ML100K. 数据集为例,假设 $X \in R^{m \times d_1}$ 和 $Z \in R^{n \times d_2}$ 分别表示用户和电影的特征矩阵,$M \in R^{m \times n}$ 表示用户对电影的评分矩阵。GeoIMC 算法将评分矩阵建模为 $M = XUBV^TZ^T$,其中 $U \in R^{d_1 \times k}$、$V \in R^{d_2 \times k}$ 和 $B \in R^{k \times k}$ 分别为正交矩阵、正交矩阵和对称正定矩阵。模型参数通过 Pymanopt 工具包进行黎曼优化求解。

数据准备

本示例使用 MovieLens 100K 数据集,并使用与 Xin Dong 等人 (2017) 相同的方法生成用户和电影的特征向量。

# 创建临时目录下载 ML100K 数据集
dp = tempfile.mkdtemp(suffix='-geoimc')
movielens.download_movielens(MOVIELENS_DATA_SIZE, f"{dp}/ml-100k.zip")
with zipfile.ZipFile(f"{dp}/ml-100k.zip", 'r') as z:
    z.extractall(dp)

# 加载数据集和特征
dataset = ML_100K(
    normalize=normalize,
    target_transform='binarize'
)
dataset.load_data(f"{dp}/ml-100k/")

模型训练

使用 IMCProblem 类初始化 GeoIMC 问题,并设置正则化参数和模型秩。

np.random.seed(10)
prblm = IMCProblem(
    dataset.training_data,
    lambda1=regularizer,
    rank=rank
)

# 求解优化问题
prblm.solve(
    max_time,
    max_iters,
    verbosity
)

生成推荐结果

使用 Inferer 类初始化推理器,并使用训练得到的模型参数预测用户对电影的评分。

# 初始化推理器
inferer = Inferer(
    method='dot'
)

# 预测评分
predictions = inferer.infer(
    dataset.test_data,
    prblm.W
)

模型评估

使用 rmsemae 函数计算模型的均方根误差 (RMSE) 和平均绝对误差 (MAE)。

# 准备测试集和预测结果数据框
user_ids = dataset.test_data.get_data().tocoo().row
item_ids = dataset.test_data.get_data().tocoo().col
test_df = pd.DataFrame(
    data={
        "userID": user_ids,
        "itemID": item_ids,
        "rating": dataset.test_data.get_data().data
    }
)
predictions_df = pd.DataFrame(
    data={
        "userID": user_ids,
        "itemID": item_ids,
        "prediction": [predictions[uid, iid] for uid, iid in list(zip(user_ids, item_ids))]
    }
)

# 计算 RMSE 和 MAE
RMSE = rmse(
    test_df,
    predictions_df
)
MAE = mae(
    test_df,
    predictions_df
)

print(f"""
RMSE: {RMSE}
MAE: {MAE}
""")

总结

GeoIMC 算法通过将用户和物品的特征信息融入到矩阵分解过程中,并利用黎曼优化方法求解模型参数,能够有效提升推荐效果。本示例展示了如何使用 Recommenders 工具包实现 GeoIMC 算法,并对模型性能进行了评估。

参考文献

[1] Pratik Jawanpuria, Arjun Balgovind, Anoop Kunchukuttan, Bamdev Mishra. Learning Multilingual Word Embeddings in Latent Metric Space: A Geometric Approach. Transaction of the Association for Computational Linguistics (TACL), Volume 7, p.107-120, 2019.

[2] Xin Dong, Lei Yu, Zhonghuo Wu, Yuxia Sun, Lingfeng Yuan, Fangxi Zhang. A Hybrid Collaborative Filtering Model withDeep Structure for Recommender Systems.
Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence (AAAI-17), p.1309-1315, 2017.

0 0 投票数
Article Rating
订阅评论
提醒
0 评论
最多投票
最新 最旧
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x