python - 基于 SOM 的推荐引擎

标签 python recommendation-engine collaborative-filtering som

我和我的 friend 决定在 python 中做一个关于推荐引擎的项目。最初我们决定使用 SVM 做我们的项目,但很快发现它的监督学习很困难,现在我们计划使用自组织 map 并可能将它与协作过滤(不知道那是否可能)来构建引擎。有人会建议自组织 map 的良好引用吗。除了仅使用协作过滤之外,还有其他任何替代选项。

非常感谢。

最佳答案

我不确定自组织 map 实际上是否最适合您的应用程序。它可能会保留输入空间的拓扑属性,但它不太适合稀疏数据集,这在推荐引擎中是一个经常出现的问题。我不会说 SVM 更好,事实上它可能与您实际想要做的相差甚远,但 SOM 只会稍微好一点。也就是说,如果您想学习如何构建 SOM,按照有用的顺序,以下资源值得一看。还值得一提的是,SOM 实际上在理论上与卷积神经网络非常接近,因此任何用于这些网络的资源都应该很好地延续下去。

http://en.wikipedia.org/wiki/Self-organizing_map
http://ftp.it.murdoch.edu.au/units/ICT219/Papers%20for%20transfer/papers%20on%20Clustering/Clustering%20SOM.pdf
http://www.eicstes.org/EICSTES_PDF/PAPERS/The%20Self-Organizing%20Map%20%28Kohonen%29.pdf
http://www.cs.bham.ac.uk/~jxb/NN/l16.pdf
http://www.willamette.edu/~gorr/classes/cs449/Unsupervised/SOM.html

至于可能对您的特定应用程序更有意义的方法,我可能会建议使用受限玻尔兹曼机。 RBM 的想法是,您将尝试根据有关每个用户的各种统计数据为每个用户创建一个“推荐配置文件”,为用户定义一个特征向量。这种基本预测将以一种非常类似于深度神经网络的方式发生。

一旦您的网络在一个方向上进行训练,RBM ​​的真正魅力在于您可以向后运行它。您尝试从推荐配置文件生成用户配置文件,这对于此类应用程序非常有效。有关 RBM 的信息,您可以访问以下链接:
http://deeplearning.net/tutorial/rbm.html
http://www.cs.toronto.edu/~hinton/absps/guideTR.pdf
http://www.cs.toronto.edu/~hinton/absps/netflix.pdf

Hinton 基本上是这些方面的权威,也是数据科学的 BAMF。 RBM 列表中的最后一个链接实际上可以自己完全构建您的推荐引擎,但以防万一您想使用更多预构建的库或利用数据科学的其他部分,我强烈建议使用某种降​​维在您尝试任何协同过滤之前。

协同过滤的最大问题是你通常有一个非常稀疏的矩阵,它不能完全提供你想要的信息,最终会保留很多对你没有真正用处的东西。出于这个原因,主题建模领域有一系列算法可以为您提供较低维的数据,然后使协同过滤变得微不足道,或者可以在上述任何其他方法中利用以获得更有意义的数据强度较小。

gensim是一个 python 包,它为您完成了很多主题建模,还将使用 numpy 和 scipy 为您构建 tfidf 向量。它也有很好的记录。然而,这些示例的目标是更直接的 NLP。请记住,它们的各个项目碰巧是单词这一事实对底层算法没有影响,您可以将其用于约束不太好的系统。

如果您想在主题建模部分获得金牌,您应该真正研究一下弹球盘分配 (PA),这是一种主题建模中的新算法,比大多数其他主题建模器更有希望,但没有捆绑在包中。
http://www.bradblock.com /Pachinko_Allocation_DAG_Structured_Mixture_Models_of_Topic_Correlations.pdf

祝你在数据科学开发中好运!如果您还有其他问题,请告诉我,我可以尝试回答。

关于python - 基于 SOM 的推荐引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9622023/

相关文章:

java - 如何进行n重交叉验证(Mahout)?

ruby-on-rails - Rails 中的协同过滤

python - 如何使用协同过滤通过用户行为来预测用户?

python - 协作主题建模的简单 Python 实现?

python - 为什么 python 引用中的绑定(bind)实例方法不相等?

python - Python 中数组的递归问题

python - 如何为动态添加的属性定义setter、getter

python - 如何将简单的几何形状写入 numpy 数组

neo4j - 使用密码查找子图中未连接到指定节点的节点

python - 如何在多步 map-reduce 程序中运行一次最终的 'print' 语句?