【问题标题】:Elasticsearch zScore Calculation (merging 2 document collections with different score distributions)Elasticsearch zScore Calculation(合并 2 个具有不同分数分布的文档集合)
【发布时间】:2016-06-13 18:49:42
【问题描述】:

使用 Elasticsearch / Elastic,我想合并 n 个文档集合并按 zScore(或任何标准化分数)对它们进行排序。

详情

合并 2..n 个文档集合,每个文档具有不同范围的 score 字段(例如 0-100,0-10000, 0-57, ...),然后合并所有文档并使用 zScore 进行排序合并表。

我目前的计划:

  1. 为了能够比较这些文档集合的分数,我想通过计算 zScore(标准分数)来标准化每个分数
  2. 为此,请获取每个文档集合的所有得分值,计算均值和标准差,最后计算 zScore。
  3. 按 zScore 对合并表进行排序。

问题

这种方法有意义吗?

我可以在一个 elasticsearch 查询(脚本得分)中执行此操作吗?换句话说,我可以先查询所有分数然后计算 zScore 吗?

有谁知道合并和排序具有不同分数范围的文档集合的其他方法?

谢谢!

示例分布 - Google Spreadsheet

参考文献

【问题讨论】:

    标签: sorting elasticsearch merge statistics scoring


    【解决方案1】:

    我总是告诉我的学生,“哪种方法最好”的答案几乎总是以“视情况而定”开头。我将把计算 Z 分数的机制放在一边;在这里、在 ES 文档或在线其他地方查找都很容易。

    归一化的最佳方法取决于原始分布,以及您需要保留其哪些属性。 Z 分数与高斯分布高度一致,假设分布是对称的并且 s.d.与“相对平滑”的分布有关。

    此外,Z 分数非常有效,因为您可以对任何有序的指标进行计算。转换保留了顺序、连续性以及各种其他拓扑和数学属性。

    另一方面...

    考虑一下泊松分布,mu = sd = 1。您可以无限制地获得正 Z 分数; +1 到 +3 范围内的那些足够常见。另一方面,低于 -1 的 Z 分数是不可能的,尽管从那里到 0 的范围已经足够满了。如果这不是您要表示的内容,请考虑另一种方法。

    同样,考虑模式为 +1 和 -1、mu=0、sd = 2 的双正态分布。在 -0.5 和 +0.5 附近会有 Z 分数集群,在 0 时相对较少。

    也就是说,一个重要的考虑因素是您要合并的分布是否具有相似的形状。如果是这样,那么您选择的缩放转换无关紧要,只要您可以使用合并的 Z 分数,或者转换是可逆的:您能否“解包”生成的 Z 分数以恢复原始分布形状。

    如果您使用 Z 分数合并一组 Poisson 分布,则将它们解压缩成一个组合 Poisson 将毫不费力。如果你用 Gaussians 试试这个,你也会得到很好的结果。但是,如果您合并一组具有截然不同纹理的双正态分布(关注 Z=0 附近的山谷深度),您可能会导致合并过于广泛;您可能希望尽可能多地关注模式,也许调整 Z 分数,使模式在每次转换中落在 -1 和 +1。

    如果您有不同的分布,还要考虑每个分布中的观察次数。如果您有 10,000 个泊松观测值和 100 个来自教科书正态分布的观测值,则生成的合并将消除正态分布。

    这些不同形状的分布问题,但合并到同一个空间,应该是使用 Z 分数的唯一问题。如果您正在合并此类分布,请提供更多详细信息,因为合并方法将取决于我在此处提到的一些注意事项。


    这些根本不是normal 分布。这些似乎是指数几何家族中的东西。但是,在同一个家庭中,他们很适合合并。

    但是,形状上的差异使它们不适合通过 z-score 进行合并:均值对最大的少数元素过于敏感。相反,我建议您取每个数字(任何底数)的对数,然后将 那些 值转换为 z 分数。要恢复组合形状,请将选定的基数 (2, 10, e) 提高到 z 分数幂。如果您不喜欢微小的值,只需将所有值乘以选定的比例因子 - 或许足以恢复一个原始分布或另一个的实际值。

    【讨论】:

    • 非常感谢您的回答!基本上,我们正在处理的文档分数的来源来自完全不同的来源,但通常我会说所有这些都最接近正态分布,因为有一些非常高,一些非常低,还有很多值在中间。今天晚些时候,我将发布 2 个示例分布!
    • 这是我想合并/排名的 2 个分布:Google Spreadsheet
    • 一旦您有足够的声誉,请将其添加到帖子本身,而不是作为链接。
    • 完美理解。非常感谢@Prune!我会试一试并报告它的进展情况!
    • 请做。更新我的答案,或发布您自己的答案,并“接受”最终描述;这允许 SO 正确存档问题。
    【解决方案2】:

    这是一篇旧帖子,我有类似的要求,我们采用了相同的方法。 Elasticsearch 没有这个功能,所以我创建了一个小的,它使用 min-max 或 z-score normalizer 对从弹性搜索返回的分数进行归一化。

    https://github.com/bkatwal/elasticsearch-score-normalizer

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 2015-12-04
      • 2015-11-18
      相关资源
      最近更新 更多