如何计算分类错误率?

4

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

现在左侧的数字是我的算法分类,右侧的数字是原始分类号码。

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

所以,我的算法将两个不同的类合并为一个。正如您所看到的,它将类86和89合并为一个类。那么上面的例子会出现什么错误呢?

或者这里是另一个例子:

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

在上面的例子中,左边的数字是我的算法分类,右边的数字是原始类别ID。如上所示,它误分类了3个产品(我正在对同一商业产品进行分类)。因此,在这个例子中,错误率是多少?你会如何计算。
这个问题非常困难和复杂。我们已经完成了分类,但我们无法找到正确的算法来计算成功率:D
4个回答

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]

例如,簇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”?
我不知道是否存在通常达成一致的方法 (我怀疑在实践中是否使用了匈牙利算法)。

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

NB这样的“成功率”对于新数据来说将是乐观的!
习惯上将数据分成3分之2的“训练集”和3分之1的“测试集”, 仅在2/3上训练k-means, 然后在测试集上测量混淆/成功率-通常比仅在训练集上更差。
还可以说得更多;请参见例如 交叉验证


0

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

p = properties(id)

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

e = d(p1, p2)

当然,在这个函数中,每个属性都必须被评估为一个数字。然后,这个错误函数可以用于分类算法和学习。

在你的第二个例子中,似乎你把(203 7)作为成功分类对待,所以我认为你已经有了自己的度量标准。你可以更具体地提出问题以获得更好的答案。


其实我在这个问题中询问的是度量标准。我们需要按照自己的术语定义错误成功率,我想知道您对如何定义的想法。 - Furkan Gözükara
所以,我这里只是描述了一般的想法。一个产品的属性可能是它的类型或价格。如果人们喜欢同样价格的产品,你可以简单地使用d(price1, price2)。 - unsym
我认为你没有正确理解这个问题。想象一下,你有100种不同的产品,每种产品都在10个不同的商家处销售,总共有1000种产品。因此,你正在尝试正确地对每个产品进行分组,但算法将其分类为上面的示例。那么,你如何计算算法分类成功率呢? - Furkan Gözükara

0
如果您想评估算法的性能,就必须定义错误标准,所以我不确定您具体在问什么。在某些聚类和机器学习算法中,您需要定义误差度量并将其最小化。
请查看https://en.wikipedia.org/wiki/Confusion_matrix 以获得一些想法。

-2

聚类不等同于分类。分类是有监督的。 - Ulad Kasach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接