我自己和我的朋友决定在python中推荐一个关于推荐引擎的项目。最初我们决定使用SVM做我们的项目,但很快发现它很难作为它的监督学习,现在我们计划使用自组织地图和可能将它与协同过滤结合起来(不知道是否可能)来构建引擎。是否有人建议自行组织地图的良好参考。除了使用协同过滤之外,还有任何其他选择。
非常感谢。
答案 0 :(得分:3)
我不确定自组织地图实际上是否适合您的应用程序。它可能会保留输入空间的拓扑属性,但它并不适合稀疏数据集,这在推荐引擎中是一个常见问题。我不是说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
对于可能对您的特定应用更有意义的方法,我可能会建议使用Restricted Boltzmann Machine。 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。请记住,他们的单个项目恰好是单词的事实对底层算法没有影响,您可以将它用于不太受约束的系统。
如果你想在主题建模部分寻找黄金,你应该真正研究Pachinko Allocation(PA),它是主题建模中的一种新算法,它比大多数其他主题建模者具有更多的承诺,但不会捆绑在包。
http://www.bradblock.com /Pachinko_Allocation_DAG_Structured_Mixture_Models_of_Topic_Correlations.pdf
祝你的数据科学成果好运!如果您有任何其他问题,请告诉我,我可以尝试回答。