🎬 引言:当几何邂逅推荐系统
想象一下,你站在一个巨大的多维空间中,周围漂浮着成千上万的电影,而你就是这个宇宙的中心。听起来像科幻小说?不,这就是推荐系统的世界!今天,我们要探索一种名为"几何感知归纳矩阵补全"(Geometry Aware Inductive Matrix Completion,简称 GeoIMC)的算法,它巧妙地将几何学原理应用到了电影推荐中。准备好来一场跨越数学与电影的奇妙冒险了吗?系好安全带,我们这就出发!
🧮 GeoIMC:矩阵补全的几何艺术
🔍 算法的本质:寻找隐藏的联系
GeoIMC 算法,听起来像是某种高深莫测的魔法咒语,但其实它的核心思想非常优雅。想象一下,我们有一个巨大的表格,行代表用户,列代表电影,表格中的每个格子代表一个用户对一部电影的评分。但是,这个表格并不完整,有很多空白的格子,就像一幅未完成的拼图。GeoIMC 的任务就是要猜出这些缺失的评分,完成这幅"评分图"。
那么,GeoIMC 是如何完成这个看似不可能的任务的呢?它的秘密武器就是几何!算法将用户和电影都看作是高维空间中的点,然后通过寻找这些点之间的几何关系来预测缺失的评分。这就像是在星空中连接星座,通过已知的星星位置来推测未知星星的位置。
📐 数学模型:优雅的公式背后的逻辑
让我们稍微正式一点,看看 GeoIMC 的数学模型。对于 MovieLens-100K 数据集,我们有:
X \in R^{m \times d_1}:表示用户特征
Z \in R^{n \times d_2}:表示电影特征
M \in R^{m \times n}:表示部分观察到的评分矩阵
GeoIMC 将矩阵M建模为:
M = XUBV^TZ^T
其中:
U \in R^{d_1 \times k}:正交矩阵
V \in R^{d_2 \times k}:正交矩阵
B \in R^{k \times k}:对称正定矩阵
这个公式看起来可能有点吓人,但别担心!让我们用一个简单的比喻来理解它。想象X和Z是两组不同的乐高积木,U和V是两种特殊的"变形器",可以改变积木的形状,而B则是一个"融合器",将变形后的积木组合在一起。最终的结果M就是由这些积木拼出的作品,代表了用户对电影的评分。
🚀 实战:让 GeoIMC 在 MovieLens 数据集上大显身手
🛠️ 准备工作:数据和工具
首先,我们需要准备好我们的"实验室"。我们将使用著名的 MovieLens-100K 数据集,这个数据集包含了 943 个用户对 1682 部电影的 10 万个评分。
import tempfile
import zipfile
import pandas as pd
import numpy as np
from recommenders.datasets import movielens
from recommenders.models.geoimc.geoimc_data import ML_100K
from recommenders.models.geoimc.geoimc_algorithm import IMCProblem
from recommenders.models.geoimc.geoimc_predict import Inferer
from recommenders.evaluation.python_evaluation import rmse, mae
这些导入的库就像是我们的魔法工具箱,每个都有其特殊的功能。例如,movielens
模块帮助我们获取数据,IMCProblem
则是实现 GeoIMC 算法的核心。
🎭 数据的舞台:加载和特征化
接下来,我们需要为我们的数据搭建一个舞台。我们不仅要加载原始的评分数据,还要为用户和电影创建特征。这就像是为每个演员和每部电影都准备了一份详细的人物小传。
dataset = ML_100K(
normalize=True,
target_transform='binarize'
)
dataset.load_data(f"{dp}/ml-100k/")
这里,normalize=True
表示我们要对特征进行标准化,就像是让所有演员站在同一起跑线上。target_transform='binarize'
则是将评分转换为二元形式,相当于把"喜欢"和"不喜欢"简化为黑白两色。
🧩 问题的定义:设置 GeoIMC 的舞台
现在,我们要正式定义我们的 GeoIMC 问题:
np.random.seed(10)
prblm = IMCProblem(
dataset.training_data,
lambda1=regularizer,
rank=rank
)
这里,regularizer
是正则化参数,用来防止模型过度拟合,就像是给演员设定一些基本的表演规则。rank
则定义了我们要在多少维度上描述用户和电影,可以想象成我们用多少种颜色来描绘这个世界。
🏋️ 训练过程:让算法学习和成长
训练过程就像是让我们的 GeoIMC 算法去健身房锻炼:
prblm.solve(
max_time,
max_iters,
verbosity
)
这个过程可能需要一些时间,就像真正的锻炼一样,没有捷径可走。算法会不断调整自己的参数,直到找到最佳的解决方案或达到我们设定的时间限制。
🔮 预测:算法的 showtime
训练完成后,就到了见证奇迹的时刻!我们使用训练好的模型来预测测试集中的评分:
inferer = Inferer(method='dot')
predictions = inferer.infer(
dataset.test_data,
prblm.W
)
这就像是让我们训练有素的 AI 去猜测一个陌生人会给一部从未看过的电影打多少分。
📊 评估:算法的成绩单
最后,我们需要评估算法的表现。我们使用两个常用的指标:均方根误差(RMSE)和平均绝对误差(MAE):
RMSE = rmse(test_df, predictions_df)
MAE = mae(test_df, predictions_df)
print(f"""
RMSE: {RMSE}
MAE: {MAE}
""")
结果显示:
RMSE: 0.496351244012414
MAE: 0.47524594431584
这些数字告诉我们,GeoIMC 的预测平均偏差在 0.5 左右,考虑到评分范围通常是 1-5,这个结果其实相当不错!
🌈 结语:几何与电影的完美邂逅
通过这次奇妙的旅程,我们见证了数学之美如何在推荐系统中绽放。GeoIMC 算法巧妙地将几何学原理应用到电影推荐中,为我们展示了一个全新的角度来理解用户、电影和它们之间的关系。
这种方法不仅在理论上优雅,在实践中也展现出了不错的性能。它告诉我们,有时候,解决复杂问题的关键可能藏在看似不相关的领域中。谁能想到,几何学会成为电影推荐的一把利器呢?
下次当你打开 Netflix 或者其他流媒体平台,看到那些神奇的推荐时,别忘了,在背后可能有一个小小的几何精灵在默默工作,努力为你找到最合适的下一部电影!
📚 参考文献
- Jawanpuria, P., Balgovind, A., Kunchukuttan, A., & Mishra, B. (2019). Learning Multilingual Word Embeddings in Latent Metric Space: A Geometric Approach. Transaction of the Association for Computational Linguistics (TACL), 7, 107-120.
- Dong, X., Yu, L., Wu, Z., Sun, Y., Yuan, L., & Zhang, F. (2017). A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems. Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence (AAAI-17), 1309-1315.
- Harper, F. M., & Konstan, J. A. (2015). The MovieLens Datasets: History and Context. ACM Transactions on Interactive Intelligent Systems (TiiS), 5(4), 1-19.
- Koren, Y., Bell, R., & Volinsky, C. (2009). Matrix Factorization Techniques for Recommender Systems. Computer, 42(8), 30-37.
- Srebro, N., Rennie, J., & Jaakkola, T. S. (2005). Maximum-Margin Matrix Factorization. Advances in Neural Information Processing Systems, 17, 1329-1336.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于