java - 数据库中属性之间的相似性

标签 java algorithm nearest-neighbor

我正在为我的应用程序创建一个新的搜索系统。现在的想法是使用查询松弛来从数据库中获取更广泛的结果,然后计算其与用户的相关性。问题出在算法上。我正在考虑使用最近邻算法之类的东西,但我有点不确定如何使用它。

如何获取数据库中记录与用户搜索的相关性(以百分比为单位)?

我需要在属性距离类别中执行此操作。换句话说,当我查询数据库时,距离会乘以 2,并且通过选择其父类别来放宽类别。

举个例子:如果用户搜索距离最远 30 公里的东西,并且类别是“足球”,我将从数据库中获取直到 60 公里和“球运动”的所有记录(在树中,例如:运动->fullContact->ballSports->soccer,所以我会选择足球、橄榄球、橄榄球等运动。

计算此百分比时还需要考虑用户属性的权重。如果用户认为类别比距离更重要,则在计算相关性时必须考虑到这一点。

第 3 页上可以找到类别树和计算距离的公式的一个很好的示例:http://reference.kfupm.edu.sa/content/d/i/a_distributed_case_based_reasoning_appli_58512.pdf

如何将该公式应用于属性? 顺便说一句,我使用的是 MongoDB,因此所有数据都在文档中,与其他表没有关系。

谢谢

最佳答案

我首先假设对于搜索结果,您使用的是经典的关系数据库,并且表具有如下所示的扁平结构:

|类别ID |纬度 |经度 |父类别 ID |

因此,基于父类别的放松类别可以是基于用户输入的类别的父节点对子节点进行简单的树搜索(假设您的树已经在内存中)。您可以在类别表上使用 sql join,但根据我的经验,最好将算法内容移植到 java - 它更容易测试/重构,并且您将获得具有预测时间/空间复杂性的各种算法。另一方面的 SQL 可能会给您带来一些令人头疼的执行计划成本,有时不同数据库提供商之间的执行计划成本差异很大。

如何根据距离和多类别匹配获得与用户的相关性百分比?如果用户输入足球,首先显示什么 - 足球还是 ruby ?

嗯,这是一个非常好的问题,我不知道好的答案,但我要做的是以以下方式使用谷歌搜索中的现有数据: 鉴于用户输入了足球(球类运动类别的子类别)

  • 为所有按距离排序的足球比赛分配最高相关性(用户输入)
  • 根据单词球类运动(父类别)与子类别名称一起使用的频率,为相关类别分配相关性。
    • 对于“球类运动足球”,Google 搜索结果将为“599,000,000
    • 对于“球类运动橄榄球”,Google 搜索结果为“89,200,000
    • 根据上述内容,显示按距离排序的所有足球比赛,然后是所有橄榄球比赛(Google 排名第一),最后是所有橄榄球比赛(谷歌排名第二)。

您可以轻松地以编程方式预先计算或动态检索 Google 搜索结果排名(除非您打算经常更改类别,否则我不会动态执行此操作)

作为用户,我会对这个输出感到满意,请告诉我您的想法:-)

编辑: 我读过论文,看起来在您的案例中,相似度公式可以简化为计算两个单词之间的相似度。

实现此目的的一种方法是获取两个类别的词克的 Google 排名(“足球橄榄球”将为您提供“199,000,000”,“足球足球”将为您提供“199,000,000”)给你“441,000,000”)。看起来不错。

为什么我如此痴迷于谷歌排名?这些人拥有大量基于体育网站、文章及其与您的领域问题相关的数据的数据。如果是人形成论文(西部航空有限公司) - 他们的数据特定于他们的内部领域,他们必须使用他们的领域来处理我们的相似性(如特征数量、每个特征的重要性权重等)

关于java - 数据库中属性之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12672254/

相关文章:

java.lang.NoClassDefFoundError : javax/el/ELManager

java - SCREEN_ON 和 SCREEN_OFF 的 BroadcastReceiver,即使在退出应用程序后也是如此

java - 为什么 Joda Time 允许 Period 构造函数采用两个 LocalTimes 但没有这样的 Duration 构造函数?

machine-learning - 提取手写数字的属性以加强最近邻算法

c - 使用谷歌的 C KD 树库

java - 在哪里可以找到所有可能的 Java 编译时错误的列表?

python - 双端队列和循环缓冲区有什么区别?

algorithm - 蒙古语名字的处理

python - 公历日期-numDays 函数

algorithm - Lsh 算法和频段