对于具有大量不平衡目标类的分类模型,什么是合适的损失函数和评估指标?

数据挖掘 机器学习 深度学习 文本挖掘 多类分类 nlp
2022-03-11 00:26:47

我正在构建一个多类分类器来预测问题的“意图”。目标变量中有大约 100 个类,每个目标类包含不相等比例的观察/问题,从 3% 到 40% 不等。

问题

  1. 这个分类器的一个好的评估指标是什么?
  2. 优化建议评估指标的最佳代理损失函数是什么?

编辑:这不是排名问题。该模型应仅预测 1 个目标类别。每个目标类别的错误分类成本相同。

3个回答

你可以看看sensitivityspecificity它们可以有效地结合起来,为正确分类提供基础,或为每个类别中的排除性分类提供基础。也就是说,如果您正在为整个模型寻找衡量标准,您可能希望查看某种加权平均sensitivity分数。

sensitivity与 的计算相同precision,但specificity与 不同recall

也就是说,您可能需要有几个专门针对不同领域的模型,或者,在最坏的情况下,您可能需要生成一个一对一的模型集合以获得最佳结果。如果正如anymous.asker 所建议的那样,这可能会有所帮助,也许您可​​以围绕积极或消极的结果引入一些成本。

高温高压

通常排名指标,例如 N 处的精度(例如,真实类在模型预测的前 3 或前 5 中的次数)。如果您可以以某种方式合并相似性信息或每种错误分类类型的成本,那么还有其他指标可能更合适。

您可以在所有类型的算法中使用一些相关参数作为成本函数,例如 Kappa、CEN 和 MCEN。

免责声明:

如果您使用的是 Python,则可以使用PyCM模块。该模块在接收到您的数据的混淆矩阵后,可以根据您的数据集的特点,提出一些适合评估您的算法的参数。

这是一个从该模块获取推荐参数的简单代码:

>>> from pycm import *

>>> cm = ConfusionMatrix(matrix={"Class1": {"Class1": 1, "Class2":2}, "Class2": {"Class1": 0, "Class2": 5}})  

>>> print(cm.recommended_list)
["Kappa", "SOA1(Landis & Koch)", "SOA2(Fleiss)", "SOA3(Altman)", "SOA4(Cicchetti)", "CEN", "MCEN", "MCC", "J", "Overall J", "Overall MCC", "Overall CEN", "Overall MCEN", "AUC", "AUCI", "G", "DP", "DPI", "GI"]

之后,您想用作损失函数的每个参数都可以使用如下:

>>> y_pred = model.predict      #the prediction of the implemented model

>>> y_actu = data.target        #data labels

>>> cm = ConfusionMatrix(y_actu, y_pred)

>>> loss = cm.Kappa             #or any other parameter (Example: cm.SOA1)