我正在测试一个根据Simon Funk算法构建的推荐系统 . (由Timely Dev撰写.http://www.timelydevelopment.com/demos/NetflixPrize.aspx)
问题是,所有增量SVD算法都试图预测user_id和movie_id的评级 . 但在实际系统中,这应该为活动用户生成一个新项目列表 . 我看到有些人在增量SVD之后使用了kNN,但是如果我不遗漏某些内容,如果我在使用增量SVD创建模型后使用kNN,则会失去所有的性能提升 .
任何人都有使用Incremental SVD / Simon Funk方法的经验,并告诉我如何制作新推荐项目列表?
4 回答
制作推荐电影的方法:
获取尚未查看的电影列表
用用户的特征向量乘以其特征向量 .
按结果降序排序并拍摄热门电影 .
对于理论:假装只有两个维度(喜剧和戏剧) . 如果我喜欢喜剧,但喜欢戏剧,我的特色向量是
[1.0, 0.0]
. 如果您将我与以下电影进行比较:这是一个基于Yelp Netflix代码的简单Python代码 . 如果您安装Numba,它将以C速度运行 .
data_loader.py
funk.py
我认为这是一个很大的问题,因为我认为有很多推荐方法可以称为“增量SVD” . 要回答您的具体问题:kNN是在预计的项目空间上运行,而不是原始空间,因此应该非常快 .
假设您有n个用户和m个项目 . 增量SVD后,您有k个训练有素的功能 . 为了获得给定用户的新项目,将1xk用户特征向量和kxm项目特征矩阵相乘 . 您最终得到该用户的每个项目的m评级 . 然后只需对它们进行排序,删除它们已经看过的那些,并显示一些新的 .