algorithm - 如何计算分类错误率

标签 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

最佳答案

这是一个较长的示例,一个具有 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]

例如,集群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-均值仅在 2/3 上,
然后在测试集上测量混淆率/成功率——通常比单独在训练集上差。
可以说的更多;参见例如 Cross-validation .

关于algorithm - 如何计算分类错误率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067118/

相关文章:

python - 快速计算整个数据集到每个聚类中心的距离

algorithm - 数蜥蜴的鳞片

c - 如何在C中中断覆盖文件时避免丢失数据

machine-learning - 使用基于规则的方法而不是适当的算法进行二元分类

python - 无法让 scipy 层次聚类工作

c++ - 从 Kmeans 中找到每个集群的分布

Java合并相邻的数组元素以产生最大最小值

algorithm - 动态规划 : finding largest triangle

machine-learning - scikit learn 对停用词进行分类

python - 有没有办法在单个数据点内绘制多个图以与分类器一起使用?