【问题标题】:Measuring Error Rates Between Rank-Order Lists测量排序列表之间的错误率
【发布时间】:2011-05-19 10:06:41
【问题描述】:

我正在尝试衡量两种不同分类系统之间的一致性(其中一种基于机器学习算法,另一种基于人类基础事实),并且我正在寻找已实施的人的意见类似的系统。

分类架构允许将每个项目分类到类别分类法中的多个不同节点,其中每个分类都带有一个权重系数。例如,如果某个项目可以分为四个不同的分类节点,那么算法和真实分类器的结果可能如下所示:

                ALGO    TRUTH
CATEGORY A:     0.35     0.50
CATEGORY B:     0.30     0.30
CATEGORY C:     0.25     0.15
CATEGORY D:     0.10     0.05

对于所有选定的类别节点(其中大约 200 个在分类分类中),权重加起来总是正好为 1.0。

在上面的示例中,重要的是要注意两个列表在排名顺序 (ABCD) 上是一致的,因此它们应该被评分为彼此非常一致(即使分配给每个类别的权重存在一些差异. 相比之下,在下一个示例中,两个分类在排名顺序方面完全不一致:

                ALGO    TRUTH
CATEGORY A:     0.40     0.10
CATEGORY B:     0.35     0.15
CATEGORY C:     0.15     0.35
CATEGORY D:     0.10     0.40

所以这样的结果应该得到很低的分数。

最后一个示例演示了人工生成的真实值包含重复权重值的常见情况:

                ALGO    TRUTH
CATEGORY A:     0.40     0.50
CATEGORY B:     0.35     0.50
CATEGORY C:     0.15     0.00
CATEGORY D:     0.10     0.00

因此,算法允许没有完美排序的列表很重要(因为基本事实可以有效地解释为 ABCD、ABDC、BACD 或 BADC)

到目前为止我尝试过的东西:

  • Root Mean Squared Error (RMSE):问题很大。它不考虑排名顺序的一致性,这意味着列表顶部类别之间的严重分歧被列表底部类别的协议所掩盖。

  • Spearman's Rank Correlation:虽然它考虑了排名的差异,但它对列表顶部的协议和列表底部的协议给予同等的重视。只要高级差异对错误度量有贡献,我就不太关心低级差异。它也不处理多个类别可能具有同等价值等级的情况。

  • Kendall Tau Rank Correlation Coefficient:据我所知,具有与 Spearman 等级相关性相同的基本属性和限制。

我一直在考虑推出自己的临时指标,但我不是数学家,所以我怀疑我自己的小指标是否会提供非常严格的价值。如果这种事情有一些标准的方法,我宁愿使用它。

有什么想法吗?

【问题讨论】:

  • 除了这里之外,绝对值得在CrossValidated 询问这个问题。
  • 有很多方法可以定义一个幻数,但没有办法明智地定义一个,除非我们知道您要完成什么以及您打算如何使用该数字。
  • 我们可以排除 RMSE,但不是因为给出的原因。两个概率之差的平方根本没有理性意义。如果数字是具有高斯分布噪声的测量值,则 RMSE 是有意义的。
  • @Jive Dadson:我想要完成的是为多变量分类器生成一个标量准确度指标,并根据多变量基本事实进行检查,并且强烈表达维度中的错误比弱表达维度的错误。分类算法中有噪音(因为错误会通过底层集群向上传播),而基本事实中肯定有噪音(因为它是由数百个不同的人众包的)。我不是数学家(或任何接近数学家的人,真的),但加权 RMSE 仍然不能解决问题吗?

标签: math statistics classification


【解决方案1】:

我认为您不必担心这种程度的严格性。如果您想比其他协议更重视某些类型的协议,那是完全合法的。

例如,仅计算前 k 个类别的 Spearman。我认为你应该得到完全合法的答案。

您还可以进行 z 变换等以将所有内容映射到 [0,1],同时保留您认为是数据集的“重要”部分(方差、差异等)然后您可以利用大量可用的假设检验函数。

(作为旁注,您可以修改 Spearman 以说明关系。请参阅 Wikipedia。)

【讨论】:

  • 作为虔诚的贝叶斯主义者,每当我看到“假设检验”这个词时,我都会害怕。
【解决方案2】:

好的,我决定实施加权 RMSE。它不直接考虑排名顺序关系,但加权系统会自动在列表顶部强调这些条目。

仅供参考(对于不熟悉 RMSE 的任何人),该等式如下所示,假设两个不同的分类器 A 和 B,其结果包含在同名数组中:

RMSE Equation http://benjismith.net/images/rmse.png

在java中的实现是这样的:

double[] A = getAFromSomewhere();
double[] B = getBFromSomewhere();

// Assumes that A and B have the same length. If not, your classifier is broken.
int count = A.length;

double sumSquaredError = 0;
for (int i = 0; i < count; i++) {
   double aElement = A[i];
   double bElement = B[i];
   double error = aElement - bElement;
   double squaredError = error * error;
   sumSquaredError += squaredError;
}
double meanSquaredError = sumSquaredError / count;
double rootMeanSquaredError = Math.sqrt(meanSquaredError);

这是我修改后的实施的起点。我需要想出一个加权系统来解释两个值的组合大小(来自两个分类器)。所以我将每个平方误差值乘以SQRT(Ai^2 + Bi^2),这是一个普通的欧几里得距离函数。

当然,由于我在分子中使用了加权误差,因此我还需要在分母中使用所有权重的总和,以便将我的结果重新归一化回 (0.0, 1.0) 范围内。

我将新指标称为“RMWSE”,因为它是一个均方根加权平方误差。新方程式如下所示:

RMWSE Equation http://benjismith.net/images/rmwse.png

这就是它在 java 中的样子:

double[] A = getAFromSomewhere();
double[] B = getBFromSomewhere();

// Assumes that A and B have the same length. If not, your classifier is broken.
int count = A.length;

double sumWeightedSquaredError = 0;
double sumWeights = 0;
for (int i = 0; i < count; i++) {
   double aElement = A[i];
   double bElement = B[i];
   double error = aElement - bElement;
   double squaredError = error * error;
   double weight = Math.sqrt((aElement * aElement) + (bElement * bElement));
   double weightedSquaredError = weight * squaredError;
   sumWeightedSquaredError += weightedSquaredError;
   sumWeights += weight;
}
double meanWeightedSquaredError = sumWeightedSquaredError / sumWeights;
double rootMeanWeightedSquaredError = Math.sqrt(meanWeightedSquaredError);

为了让您了解此权重在实践中的工作原理,假设我的两个分类器为某个类别生成 0.950.85 值。这两个值之间的误差是0.10,但权重是1.2748(我使用SQRT(0.95^2 + 0.85^2) 得出的)。加权误差为0.12748

同样,如果分类器为某个其他类别生成0.450.35,则错误仍然只是0.10,但权重仅为0.5701,因此加权错误仅为0.05701

因此,在两个分类器中具有高值的任何类别将比仅来自单个分类器的高值类别或来自两个分类器的低值类别的权重更大。

当我的分类值被重新归一化以便 A 和 B 中的最大值均为 1.0 并且所有其他值按比例放大时,这最有效。因此,任何给定分类器的维度总和不再等于 1.0,但这并不重要,因为我没有利用该属性来做任何有用的事情。

有趣的是,我对我的数据集中给出的结果非常满意,但如果有人有任何其他改进的想法,我会完全接受建议!

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 2014-11-07
    • 1970-01-01
    • 2014-02-22
    • 2017-04-13
    • 1970-01-01
    • 2011-02-20
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多