我的问题是关于一个数据集,它经过交叉验证(CV)后,可以帮助我识别导致最大误差量的类。例如,考虑以下CV数据:
TP Rate FP Rate Precision Recall F-Measure ROC Area Class
0.194 0.015 0.315 0.194 0.24 0.786 A
0.369 0.024 0.571 0.369 0.449 0.844 B
0.096 0.015 0.167 0.096 0.122 0.688 C
0.478 0.015 0.558 0.478 0.515 0.858 D
0.648 0.01 0.768 0.648 0.703 0.904 E
0.481 0.019 0.82 0.481 0.606 0.928 F
0.358 0.012 0.646 0.358 0.461 0.862 G
1 0.001 0.973 1 0.986 1 H
0.635 0.005 0.825 0.635 0.717 0.959 I
0.176 0.003 0.667 0.176 0.278 0.923 J
0.999 0.346 0.717 0.999 0.835 0.984 K
Weighted Avg. 0.704 0.169 0.692 0.704 0.671 0.931从这个例子中,很明显,K类降低了组合精度(请注意FP率,这在我的上下文中很重要)。现在我的问题是,完全忽略训练集中的K类是明智的吗?或者,只考虑对更准确的类进行测试实例分类会更好(例如,在本例中,除了K之外的任何类)。
我反对忽略整个类,比如K,那就是一个人可能会强迫一个实际属于K类的测试实例去适应其他的类,这似乎是不合逻辑的。
有什么建议吗?
谢谢
发布于 2013-06-19 19:35:05
这真的取决于你解决的实际问题,例如:类是否反映了客观的基本事实(例如,试图将文本分类给作者),或者类是任意的(例如,对“圆形”对象与“非圆形”对象进行分类)?第一类错误与第二类错误的相对权重是多少,召回(覆盖率)有多重要?
然而,我可以建议的一个实用方法是分层分类。
具体地说:使用CV混淆矩阵,找到未整齐分隔的类对(或组);将它们组合在一起作为单个类;然后训练二级分类器,以仅分离属于该组的类。这可能会导致更准确的分类,特别是如果您发现为了对特定组进行分类,另一组特征/分类算法会更好。
例如,假设您的混淆矩阵是:
class/classified as
|A |B |C |D
A|10|2 |1 |3
B|0 |15|0 |1
C|0 |0 |21|16
D|0 |0 |9 |11显然,C和D之间存在着大量的混淆。你可以只用A,B和E (C和D的组合)这3个类别来重新训练同一个分类器,然后在找到E的时候尝试只用一个新的分类器来分离C和D。
发布于 2013-06-19 06:02:07
我的第一个想法是尝试找到一种方法,将成本分配给误报,从而降低K类的风险。
https://stackoverflow.com/questions/17179201
复制相似问题