如何计算分类错误率

Mon*_*RPG 4 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
Run Code Online (Sandbox Code Playgroud)

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

或者这里是另一个例子

203 7
203 7
203 7
203 7
16 7
203 7
17 7
16 7
203 7
Run Code Online (Sandbox Code Playgroud)

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

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

den*_*nis 5

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

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]
Run Code Online (Sandbox Code Playgroud)

例如,簇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
Run Code Online (Sandbox Code Playgroud)

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

因此,将混淆矩阵每一列中的最大数字相加并除以总数。
但是,如何计算重叠/丢失的集群,比如 2 个“6”,这里没有“9”?
我不知道普遍同意的方式(怀疑匈牙利算法 在实践中使用)。

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

NB这样的“成功率”会被新数据看好!
习惯上将数据分成 2/3 的“训练集”和 1/3 的“测试集”,单独在 2/3 上训练 k 均值,
然后在测试集上测量混淆/成功率——通常比仅在训练集上。
可以说的更多;参见例如 交叉验证