sorting - Elasticsearch zScore 计算(合并 2 个具有不同分数分布的文档集合)

标签 sorting elasticsearch merge statistics scoring

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

详细信息:

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

我目前的计划:

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

问题

这种方法有意义吗?

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

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

谢谢!

示例分布 - Google Spreadsheet

引用

最佳答案

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

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

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

另一方面……

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

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

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

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

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

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


这些不是 normal分布在所有。这些似乎是指数几何族中的东西。然而,属于同一个家庭使他们成为合并的好人选。

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

关于sorting - Elasticsearch zScore 计算(合并 2 个具有不同分数分布的文档集合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35721446/

相关文章:

elasticsearch - 属性错误: 'Search' object has no attribute 'execute_suggest'

r - 通过匹配日期合并不同长度的数据帧

ios - merge git 分支缺陷后 Xcode 4 中 "No Scheme"问题的最佳解决方案

java - 为什么对 List 进行排序时,compareTo 参数始终为 null

javascript - 按字母顺序对 Javascript 对象进行排序

elasticsearch - 用于自定义日志的Logstash筛选器Grok

ElasticSearch 找不到分析器?

git 将没有共同祖先的多个存储库中的工作 merge 到新存储库中

C++ QuickSort 不排序

c - 排序贪婪高分(文件 I/O)