2017-04-23 38 views
14

我想在Android手机应用程序的工作,我有一个功能根据兴趣和位置找到匹配。许多约会应用程序已经在做一些有点功能,例如Tinder根据位置,性别和年龄等进行匹配。基于兴趣和位置的算法为Android手机应用程序

如果已经完成,我不想重新发明轮子。我已搜查谷歌和一些建议使用聚类算法此Algorithm for clustering people with similar interestsUser similarities algorithm

让我们我有用户

User1: {location: "Delhi, India", interests: ["Jogging", "Travelling", "Praying"] } 
User2: {location: "Noida, India", interests: ["Running", "Eating", "Praying"] } 
User3: {location: "Bangalore, India", interests: ["Exercise", "Visiting new places", "Chanting"] } 

我写匹配少数低于标准匹配算法在这个JSON格式的数据 -

  1. 如果用户1对“慢跑”感兴趣并且另一个用户2对“跑步”感兴趣,以便慢跑和跑步或者是一种练习,所以他们应该匹配该个人资料以及它应该位置明智也最接近应该在上面。

  2. 该算法,当按比例运行时,应该相当高效。这意味着我想避免将每个用户分别与每个其他用户进行比较。对于N个用户,这是一个O(N^2)操作。理想情况下,我想开发某种“分数”,我可以为每个用户单独生成一个“分数”,因为这只涉及循环所有用户一次。然后,我可以找到具有类似分数的其他用户,并根据该分数确定最佳匹配。

任何人都可以建议我用的我怎么能与firebase-cloud-functionfirebase-database帮助实现这一目标的一些实施。

回答

3

我认为硬编码相似性是一种错误的方法。仅供参考,没有主要的搜索引擎依赖这种映射。

更好的方法是更多的数据驱动。创建一个特别的方法开始,一旦你有足够的数据建立机器学习模型来排名匹配。这样你就不必假设任何东西。

对于位置,有某种半径(最好可以由用户设置)并匹配半径内的人。

+0

你的意思是,首先我需要一个配置文件的一些数据库,随机和明智的位置开始,一旦我拥有的用户数据,然后开始关注基础配套? –

+0

不要开始完全随机的。但有一些广泛的启发式。例如,给予完全匹配轻微的优先权。一旦你有足够的数据放弃启发式,并采用基于机器学习的模型。 – ElKamina

+0

我陷入了困境。我是新为这些基于还挺机器学习模型,你有一个想法,我应该怎么跟我的情况下开始的?我应该在我的服务器上运行脚本还挺cron作业,其分析其分布匹配与否数据库中的所有配置文件数据,然后映射配置文件?像数据库中的每个配置文件的匹配属性具有那些匹配的配置文件ID? –

3

所有我要说摆脱数据集中的冗余功能首先,慢跑和跑步可能是1层的功能,而不是2,之后还可以使用K-means算法对数据进行分组在无人监督的方式 到了解更多关于K-意味着你可以去这个链接: https://www.coursera.org/learn/machine-learning/lecture/93VPG/k-means-algorithm

也为您建立一个在线系统,它具有提高自身日常 你可以看这个学习更多的关于在线学习 https://www.coursera.org/learn/machine-learning/lecture/ABO2q/online-learning

另外https://www.coursera.org/learn/machine-learning/lecture/DoRHJ/stochastic-gradient-descent这个sto chastic梯度将有助于了解。

这些都是概念上的视频不会自己实现什么,你可以随时使用图书馆像tensorflow https://www.tensorflow.org/

我知道这看起来有点难以理解,但你会为了构建自己的定制需要这方面的知识推荐系统。

+0

通过减少我的意思的特征说的,而不是设置慢跑和跑步为2层的功能,你可以将它们设置为1,只有当你分析数据,但我不是说你应该删除这些用户 –

+0

“你可以使用K-means算法对数据进行分组” - 你有这表明分组功能的代码示例或片段? –

+0

我没有什么用场,现在由我写了,只在这里你可以看到在SciPy的 http://glowingpython.blogspot.in/2012/04/k-means-clustering-with-scipy实施。 HTML –