如果实现简单的推荐系统

2013-01-30 00:49:40 +08:00
 humiaozuzu
需求是:我在 server 端会接收 ios 客户端的联系人上传,然后 ios 端可以通过 rest 接口获得他可能认识的朋友。

推荐的算法挺简单的,比如2人有4个以上的共同联系人(电话或者邮箱一样)就可以。

1. 如果是用 sql 查语言感觉很难写,而且性能问题很大
2. 如果搭建一个推荐系统框架有什么简单易用的推荐下可以吗,最好是python的。 这个如何和我以后的后端进行通信呢?
4994 次点击
所在节点    问与答
9 条回复
013231
2013-01-30 03:58:43 +08:00
不知你的用戶群規模有多大.
在不太大的情況下, 可以把所有聯系人信息裝入內存, 每個客戶的聯系人都是一個集合. 想尋找一個客戶"可能认识的朋友", 就用他的聯系人集合和其他每個人的聯系人集合做並運算, 如果某個並集中的條目數足夠大, 就認為這兩人是"可能认识的朋友".
yyai3
2013-01-30 09:27:04 +08:00
算法:MinHash--http://en.wikipedia.org/wiki/MinHash
论文:Google News Personalization: Scalable Online Collaborative Filtering
sqjs86
2013-01-30 09:41:59 +08:00
同意 1L, 可以看一下 redis
HowardMei
2013-01-30 10:20:07 +08:00
可能Bloom Filter更合适,有现成的库:
https://github.com/jaybaird/python-bloomfilter
可以把Hash改得更简单点提高性能:
https://github.com/jaybaird/python-bloomfilter/blob/master/pybloom/pybloom.py
可用 http://code.google.com/p/pyfasthash/ 里的MurmurHash替代hashlib
rain
2013-01-30 10:40:13 +08:00
@013231 是交集吧?
013231
2013-01-30 10:51:12 +08:00
@rain 對, 交集, 我說錯了.
humiaozuzu
2013-01-30 12:51:41 +08:00
@013231 @HowardMei 非常感谢,有没有什么实际的例子可以参考下呢? 算法可能不太困难,但是使用的工具上感觉有点无从下手。
stackpop
2013-01-30 13:27:34 +08:00
bloom filter可以
HowardMei
2013-01-30 14:22:50 +08:00
@humiaozuzu http://zacharyvoase.com/2012/08/31/m2mbloom/ 这个和你的需求几乎一模一样,实现方法写得很详细(for Postgres)。性能提高了近30倍,不错了,你可以试试看和 @013231 的方法比,哪个更适合。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/59220

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX