如何计算分类错误率

时间:2012-04-08 22:36:51

标签: algorithm classification cluster-analysis confusion-matrix

好的。现在这个问题非常困难。我打算给你一个例子。

现在左边的数字是我的算法分类,正确的数字是原始的类号

177 86
177 86
177 86
177 86
177 86
177 86
177 86
177 86
177 86
177 89
177 89
177 89
177 89
177 89
177 89
177 89

所以这里我的算法将2个不同的类合并为1.正如你所看到的,它将类86和89合并为一个类。那么上面例子中的错误是什么?

或者这里是另一个例子

203 7
203 7
203 7
203 7
16 7
203 7
17 7
16 7
203 7

在上面的示例中,左侧数字是我的算法分类,右侧数字是原始类别ID。从上面可以看出它错过了3种产品(我正在对相同的商业产品进行分类)。那么在这个例子中,错误率是多少?你会怎么算?

这个问题非常困难和复杂。我们已完成分类,但我们无法找到正确的算法来计算成功率:D

4 个答案:

答案 0 :(得分:4)

这是一个很长的例子,一个真正的混淆矩阵,有10个输入类“0” - “9” (手写数字), 标记为A - J的10个输出簇。

Confusion matrix for 5620 optdigits:

True 0 - 9 down, clusters A - J across
-----------------------------------------------------
      A    B    C    D    E    F    G    H    I    J
-----------------------------------------------------
0:    2         4         1       546    1
1:   71  249        11    1    6            228    5
2:   13    5        64    1   13    1       460
3:   29    2       507        20         5    9
4:        33  483         4   38         5    3    2
5:    1    1    2   58    3            480   13
6:    2    1    2       294         1         1  257
7:    1    5    1            546         6    7
8:  415   15    2    5    3   12        13   87    2
9:   46   72    2  357        35    1   47    2
----------------------------------------------------
    580  383  496 1002  307  670  549  557  810  266  estimates in each cluster

y class sizes: [554 571 557 572 568 558 558 566 554 562]
kmeans cluster sizes: [ 580  383  496 1002  307  670  549  557  810  266]

例如,集群A有580个数据点,其中415个为“8”; 集群B有383个数据点,其中249个为“1”;等等。

问题是输出类被扰乱,置换; 它们按此顺序对应,计数:

      A    B    C    D    E    F    G    H    I    J
      8    1    4    3    6    7    0    5    2    6
    415  249  483  507  294  546  546  480  460  257

一个可以说“成功率”是 75%=(415 + 249 + 483 + 507 + 294 + 546 + 546 + 480 + 460 + 257)/ 5620
但这会抛弃有用的信息 - 在这里,E和J都说“6”,没有集群说“9”。

因此,将混淆矩阵的每一列中的最大数字相加 除以总数 但是,如何计算重叠/缺失的簇, 比如2“6”,这里没有“9”? 我不知道一个共同商定的方式 (怀疑Hungarian algorithm 在实践中使用。)

底线:不要丢弃信息;看看整个混淆矩阵。

NB这样的“成功率”对新数据会乐观! 按惯例将数据分成2/3“训练集”和1/3“测试集”, 火车k-means仅在2/3上,
然后测量测试集上的混乱/成功率 - 通常比单独的训练集更差 可以说更多;见例如 Cross-validation

答案 1 :(得分:0)

如果要评估算法的性能,则必须定义错误标准,因此我不确定您要求的确切内容。在某些群集和机器学习算法中,您可以定义误差度量,并将其最小化。

看看这个 https://en.wikipedia.org/wiki/Confusion_matrix 得到一些想法

答案 2 :(得分:0)

您必须定义一个错误指标来衡量自己。在您的情况下,一个简单的方法应该是找到产品的属性映射

p = properties(id)

其中id是产品ID,p可能是包含不同属性的每个条目的向量。然后,您可以将两个产品之间的错误函数e(或距离)定义为

e = d(p1, p2)

当然,每个属性必须在此函数中计算为数字。然后这个误差函数可以用于分类算法和学习。

在您的第二个示例中,您似乎将该对(203 7)视为成功分类,因此我认为您自己已经有了一个指标。您可能会更具体地获得更好的答案。

答案 3 :(得分:-1)

分类错误率(CER)为1 - 纯度(http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html

ClusterPurity <- function(clusters, classes) {
    sum(apply(table(classes, clusters), 2, max)) / length(clusters)
}

@ john-colby的代码 或

CER <- function(clusters, classes) {
    1- sum(apply(table(classes, clusters), 2, max)) / length(clusters)
}