【问题标题】:The approach to calculating 'similar' objects based on certain weighted criteria基于某些加权标准计算“相似”对象的方法
【发布时间】:2012-01-28 01:08:43
【问题描述】:

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

  • 多个标签
  • 多个类别
  • 大小
  • 多种类型

我想根据上述标准编写一个方法来抓取所有“相似”项目。我可以轻松地为上述每个项目单独检索类似的项目(即类似规模的项目或共享一个类别的项目等),但我希望它更智能,然后只选择具有上述所有共同点的项目,或至少具有上述一项共同点的项目。

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

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

【问题讨论】:

    标签: math machine-learning data-mining taxonomy


    【解决方案1】:

    处理这个问题的常用方法(至少在机器学习中)是创建一个衡量相似度的指标——Jaccard metric 在这里看起来很合适,因为你有类型、类别、标签等,这不是真正的数字。

    一旦你有了一个度量,你可以通过使用 KD 树、vp-tree 或其他度量树结构来加快搜索相似项目,前提是你的度量遵循三角不等式( d(a,b)

    【讨论】:

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

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

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

    然后尝试将所有这些相似之处归一化以使用通用尺度,例如0 到 1,其中 0 最相似,并且值具有相似分布。

    接下来,为每个特征分配一个权重。例如。标签相似度比描述相似度更重要。

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

    有无数种方法,因为您显然可以分配任意权重,已经对单属性相似性有多种选择,有无数种方法可以对单个值进行归一化。以此类推。

    有一些学习权重的方法。请参阅集成方法。但是,要了解权重,您需要让用户输入什么是好的结果,什么不是。你有这样的训练数据吗?

    【讨论】:

      【解决方案3】:
      1. 从每个类别的值 100 开始。
      2. 应用处罚。比如,每个 kB 的大小差异为 -1,或者为其他项目中未找到的每个标签 -2。最终每个类别的值为 0..100。
      3. 将每个类别的值乘以该类别的“权重”(即,大小相似度乘以 1,标签相似度乘以 3,类型相似度乘以 2)。
      4. 将加权值相加。
      5. 除以权重因子的总和(在我的示例中,1 + 3 + 2 = 6)得到 0..100 的总体相似度。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        相关资源
        最近更新 更多