【问题标题】:Interest and location based algorithm for android mobile app安卓移动应用基于兴趣和位置的算法
【发布时间】:2017-04-26 22:51:58
【问题描述】:

我正在尝试开发 android 移动应用程序,该应用程序具有根据兴趣和位置查找匹配项的功能。许多约会应用已经在做一些功能,例如基于位置、性别和年龄等的 Tinder 匹配。

如果已经完成,我不想重新发明轮子。我在谷歌上搜索过,有人建议为此使用聚类算法Algorithm for clustering people with similar interestsUser similarities algorithm

让我拥有这种 JSON 格式的用户数据

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"] }

我正在编写一个匹配以下几个条件的匹配算法 -

  1. 如果用户 1 对“慢跑”感兴趣,而另一个用户 2 对“跑步”感兴趣,那么慢跑和跑步是一种锻炼方式,因此他们应该匹配两个配置文件,并且应该也要注意位置,因为最近的应该在顶部。

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

谁能建议我在firebase-cloud-functionfirebase-database 的帮助下实现这一点。

【问题讨论】:

    标签: android algorithm firebase match cluster-analysis


    【解决方案1】:

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

    更好的方法是更多地以数据为驱动力。创建一个特别的方法开始,一旦你有足够的数据构建机器学习模型来对匹配进行排名。这样你就不必假设任何事情。

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

    【讨论】:

    • 你的意思是我首先需要一个个人资料数据库,从随机和位置开始,一旦我有了用户数据,然后开始根据兴趣进行匹配?
    • 不要完全随机开始。但是有一些广泛的启发式。例如,给予完全匹配轻微的优先级。一旦你有足够的数据放弃启发式并采用基于机器学习的模型。
    • 我明白了。我是这些基于机器学习的模型的新手,你知道我应该如何开始我的案例吗?我应该在我的服务器有点 cron 作业上运行脚本来分析所有配置文件数据,然后在数据库中映射配置文件匹配或不匹配的配置文件吗? like 匹配数据库中每个配置文件的属性具有匹配的配置文件 ID?
    【解决方案2】:

    首先我会说摆脱数据集中的冗余特征,慢跑和跑步可能是 1 个特征而不是 2 个,之后您可以使用 K-means 算法以无监督的方式对数据进行分组 要了解有关 K-means 的更多信息,您可以访问此链接: 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 这个随机梯度将有助于了解。

    这些是概念视频,自己没有实现任何东西,你可以随时使用类似 tensorflow 的库https://www.tensorflow.org/

    我知道这看起来有点难以理解,但您需要这些知识才能构建自己的自定义推荐系统。

    【讨论】:

    • 通过减少功能我的意思是说,不要将慢跑和跑步设置为 2 个功能,您可以仅在分析数据时将它们设置为 1,但我并不是说您应该删除它们为用户
    • “您可以使用 K-means 算法对数据进行分组” - 您有演示分组功能的代码示例或 sn-p 吗?
    • 我现在没有为此写的任何方便的东西,但在这里你可以看到 scipy glowingpython.blogspot.in/2012/04/… 中的实现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2014-06-21
    相关资源
    最近更新 更多