使用Keras实现MF模型的训练
引入
Matrix Factorisation之类的模型将User和Item使用隐向量的方式表征, 通常使用点积的方式得到一个(User, Item)对的点击, 评分等情况. 在训练过程中, 根据损失函数, 将要训练的隐向量和偏置等参数经过计算, 得到与真实值的差距.
由于User和Item是用隐变量表征的, 每个都由一个单独的向量表示, 因此可以使用embedding的方式, 通过embedding lookup查找表示. 沿着这个思路, 使用交互数据进行训练(这使得整个训练过程类似于回归任务).
数据集
使用Movielens-100k数据集作为说明. 该数据集共有943个user和1682个item, 拥有100k的评分记录, 即大约有7%的(User, Item)对是有评分记录的, 所有的评分在1-5之间, 且为整数.
过程
首先读取数据集.
dataset = pd.read_csv("./data/ml-100k/u.data", sep="\t", header=None, names=["user_id", "item_id", "rating", "timestamp"])
dataset.head() user_id item_id rating timestamp
0 196 242 3 881250949
1 186 302 3 891717742
2 22 377 1 878887116
3 244 51 2 880606923
4 166 346 1 886397596查看user和item的数量:
为了保证所有user和item的索引是连续的, 并且从0开始, 使用pandas.Series.cat相关的方法进行转换:
再将训练数据按80/20的比例分成训练集和开发集:
Matrix Factorisation方法将user和item用定长的低维向量表示, 从而类似于embedding方法.
假设有个user, 个item, 则行为矩阵就是一个的矩阵, 假设每个元素用维的向量表征, 则user和item的embedding矩阵分别为和. 最简单的MF训练方法为: .
下面开始使用keras解决MF训练的问题.
训练模型:
评估结果:

获取隐向量:
参考文章
最后更新于
这有帮助吗?