我正在对6个级别的机器学习分类任务进行评估:A1, A2, B1, B2, C1 and C2
。可以假设这些类别是序数的,即它们可以被排序。作为评估的一部分,我想测量我的分类器在“实际”级别中对文本进行分类的准确程度。我将其称为“相邻精度”。例如,如果文本实际上排名为B2
,那么相邻的准确结果将为B1
,B2
和C1
。
我需要处理大量数据,因此我希望能够以非常有效的方式检查相邻的准确度。我在下面列出了我最好的方法(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),如果这可能会以某种方式提升性能。
有什么想法吗?
答案 0 :(得分:2)
in
速度不是很快,尤其是使用str
时,您可以使用简单int
并比较值:
A1, A2, B1, B2, C1, C2 = range(6)
def isAdjacent (actual, classifierOutput):
return actual - 2 < classifierOutput < actual + 2
例如,如果您有A2
文字,则实际值为0
,因此如果isAdjacent
介于classifierOutput
之间,则0 - 2 = -2
必须返回true和0 + 2 = 2
,因此必须是0
或1
。