有效检查相邻精度(组成员资格?)

Efficiently check for adjacent accuracy (group membership?)

我正在对具有 6 个级别的机器学习分类任务进行评估:A1, A2, B1, B2, C1 and C2。可以假定这些类别是有序的,即它们可以排序。作为我评估的一部分,我想衡量我的分类器在 'actual' 级别的 1 内对文本进行分类的准确程度。我将其称为 'adjacent accuracy'。例如,如果文本实际排名 B2,那么相邻准确的结果将是 B1B2C1.

我有很多数据要处理,所以我想有一种非常有效的方法来检查相邻精度。下面列出了我的最佳方法 (python3),但我正在寻找任何建议以挤出更多时间。

adjDict = {'A1':{'A1','A2'}, 'A2':{'A1','A2','B1'}, 'B1':{'A2','B1','B2'},
    'B2':{'B1','B2','C1'}, 'C1':{'B2','C1','C2'}, 'C2':{'C1','C2'}}

def isAdjacent ( actual, classifierOutput ) :
    return classifierOutput in adjDict[actual]

如有必要,可以将级别重新定义为数字 (1-6),如果这样可以以某种方式提高性能。

有什么想法吗?

in 不是很快,尤其是 str,您可以使用简单的 int 并比较值:

A1, A2, B1, B2, C1, C2 = range(6)

def isAdjacent(actual, classifierOutput):
    return actual - 2 < classifierOutput < actual + 2

例如,如果您有 A2 文本,则实际值为 0,因此 isAdjacent 必须 return True 如果 classifierOutput 介于 0 - 2 = -20 + 2 = 2 之间,因此 01.