Math 计算';类似';基于某些加权标准的对象

Math 计算';类似';基于某些加权标准的对象,math,machine-learning,data-mining,taxonomy,Math,Machine Learning,Data Mining,Taxonomy,我有一个有多个项目对象的站点。每个项目都有(例如): 多标签 多类别 尺码 多种类型 等等 我想写一个方法来获取基于上述标准的所有“类似”项目。我可以很容易地检索到上述每个项目的相似项目(即大小相似的项目或共享一个类别的项目等),但我希望它比只选择具有上述所有共同点的项目或至少具有上述一个共同点的项目更智能 理想情况下,我想对每一个标准进行加权,即,一个有一个共同标签的项目不如一个大小相近的项目“相似”。一个有两个共同标签的项目比一个有一个共同标签的项目更相似,等等 我可以采取什么方法(实际

我有一个有多个项目对象的站点。每个项目都有(例如):

  • 多标签
  • 多类别
  • 尺码
  • 多种类型
  • 等等
我想写一个方法来获取基于上述标准的所有“类似”项目。我可以很容易地检索到上述每个项目的相似项目(即大小相似的项目或共享一个类别的项目等),但我希望它比只选择具有上述所有共同点的项目或至少具有上述一个共同点的项目更智能

理想情况下,我想对每一个标准进行加权,即,一个有一个共同标签的项目不如一个大小相近的项目“相似”。一个有两个共同标签的项目比一个有一个共同标签的项目更相似,等等


我可以采取什么方法(实际的和数学的)来做到这一点

处理这个问题的常用方法(至少在机器学习中)是创建一个度量相似度的度量——这里a似乎是一个很好的匹配,因为您有类型、类别、标记等,它们不是真正的数字

一旦你有了一个度量,你可以通过使用KD树、vp树或另一个度量树结构来加快搜索类似项目的速度,前提是你的度量服从三角形不等式(d(a,b)
  • 从每个类别中的值100开始
  • 施加惩罚。例如,对于大小上的每个kB差异,-1,或者对于在其他项目中找不到的每个标记,-2。最终,每个类别的值为0..100
  • 将每个类别的值乘以类别的“权重”(即,大小相似性乘以1,标签相似性乘以3,类型相似性乘以2)
  • 把加权值加起来
  • 除以权重因子之和(在我的示例中,1+3+2=6),得到0..100的总体相似性

  • 将项目比较减少到初始O(n^2)以下的可能性(即每个项目之间的比较)在很大程度上取决于上下文。它可能是您软件的真正症结所在,或者如果
    n
    低,它可能根本就没有必要。

    问题是,显然有无数种方法可以解决这个问题

    首先,为每个属性定义一个相似性度量(标记相似性、类别相似性、描述相似性等)

    然后尝试对所有这些相似性进行标准化,以使用一个通用的尺度,例如0到1,其中0是最相似的,并且值具有相似的分布

    接下来,为每个特征指定权重。例如,标签相似性比描述相似性更重要

    最后,计算一个组合相似度作为个体相似度的加权和

    有无限多的方法,因为您显然可以指定任意的权重,对于单属性的相似性已经有了各种选择,规范化单个值的方法也有无限多。等等


    有一些方法可以学习权重。参见集合方法。然而,要了解权重,您需要用户输入什么是好结果,什么不是。你有这样的训练数据吗?

    @)oel:你从哪里得到的几何图形?@David:不知道你在这里是什么意思?几何本质上是度量的副产品。我想如果你使用JACARD度量,那么你实际上会为每个你想考虑的属性得到一个度量。在这一点上,您将有两种选择,或者将所有度量组合成一个,这样您就可以解决该组合度量上的问题,此时您必须确定每个度量的权重(这本身可能是一个问题),或者您可以计算帕累托集(或帕累托前沿)并在该缩减集中进行选择。