训练分类器的困难

数据挖掘 神经网络 分类
2022-03-14 05:19:38

我是数据科学的初学者,但我尝试为自己的银行交易构建分类器,总共收集了大约 50.000 个。我的目的是在交易声明和交易类型之间建立一种关系。例如:

声明:在 Wallmart 使用卡号 XXXXXX 付款。

类型/标签:在超市购买

为此,我用 80% 的语句(之前标记)训练了我的模型,并且达到了非常高的准确度(85%)。之后我意识到有些不对劲,文本中有很多陈述:

声明:用卡号 XXXXX 在 _______ 付款。

因为当有人在超市购买产品时,这是我银行中的“默认”声明文本。然后,如果模型试图找出语句属于哪个类别,这将非常简单,因为会有很多语句重复,并且预测其中一个语句的概率会很高。我后来所做的是尝试删除所有重复的语句,因为重复的语句不会影响训练过程,但正因为如此,我的语句总数下降到了 ~ 2.000,然后只达到了 10% 的准确率预言。

我的问题是:训练我的模型的正确过程是什么?我应该让重复的陈述吗?(我觉得我在欺骗重复的预测)我做错了什么?

1个回答

如果我理解正确,您注意到很多正确的预测是由于一个案例总是具有相同的标签并且在您的数据中非常频繁,对吧?

让我说我认为你有一个很好的推理:你分析了问题,设计了一个潜在的解决方案,然后尝试了它。这种问题很常见,但在这种情况下,解决方案并不是真正删除训练数据中的重复案例。

发生的情况是您的数据不平衡,即您有一个非常频繁出现的类:当您删除您提到的非常频繁的实例时,您的数据大小从 50000 变为 2000,因此该实例代表了您数据的 96%。这个实例可能几乎总是有相同的标签,所以我猜这个带有这个类作为标签的实例代表了你数据的 85%。起初你认为你的分类器运行良好,因为你有 85% 的准确率,但如果最频繁的类代表 85% 的数据,分类器很容易达到 85% 的正确预测:它只需要总是回答这个类.

这里的第一个教训是,准确率不是一个很好的评估不平衡数据的衡量标准:它太简单了,即使分类器没有做任何有用的事情,它也可能非常高。这就是为什么您可能应该按类别查看精度、召回率和 f1 分数,并且通常将宏 f1 分数作为全局评估分数。

第二点,我要提到重新采样,因为它通常是不平衡数据的标准答案:这个想法只是通过以下方式人为地“重新平衡”数据中类的分布:

  • 对频繁类进行欠采样,即仅使用此类的随机子集。请注意,您删除频繁实例的想法实际上并没有太大不同。
  • 对其他类进行过采样,即根据需要多次重复罕见实例以使数据平衡。

重要的是,重采样必须只在训练集上进行,否则对测试集的评估是有偏差的。重采样很容易,但结果往往令人失望。这是因为问题往往更深层次:分类器只是无法将类别与特征提供的信息区分开来。

这让我想到了我的最后一点:去除常见情况后你得到 10% 的准确率这一事实表明分类器不知道它在做什么。大多数时候,设计一个好的 ML 系统需要对特性进行一些认真的工作,尤其是文本数据模型的类型(和参数)也可以发挥重要作用。你没有解释你使用什么样的模型和什么样的功能,所以我对此无话可说。不要犹豫,发布一个包含这些细节的新问题,也许我们可以帮助您改进这个模型。