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

所以在这里我的算法将 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

4 回答 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这样的“成功率”会看好新数据!
通常将数据分成 2/3 的“训练集”和 1/3 的“测试集”,仅在 2/3 上训练例如 k-means,
然后在测试集上测量混淆/成功率——通常比仅在训练集上。
可以说的更多;参见例如 交叉验证

于 2012-04-11T13:17:11.160 回答
0

如果你想评估算法的性能,你必须定义错误标准,所以我不确定你到底在问什么。在某些聚类和机器学习算法中,您可以定义错误度量并将其最小化。

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

于 2012-04-08T22:50:04.303 回答
0

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

p = properties(id)

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

e = d(p1, p2)

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

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

于 2012-04-08T23:08:18.740 回答
-2

分类错误率 (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)
}
于 2014-11-18T21:07:24.457 回答