添加额外(有意义的)特征不会提高模型性能

数据挖掘 机器学习 分类 特征选择 特征工程 混淆矩阵
2022-02-20 03:41:13

我正在与混淆矩阵及其输出作斗争。我以为要正确执行所有步骤,但不幸的是,似乎有些事情进展不顺利。

我有一个自己构建和标记的数据集。它显示了类的不平衡,所以我决定应用欠采样和过采样,查看许多论文和网络上的 F1-score 和 Recall。步骤是:

  • 在训练和测试中拆分数据 (80/20)
  • 仅在训练集上应用重采样
  • 应用预处理算法(BoW,TF-IDF,...)
  • 使用不同的分类器得到结果
  • 使用混淆矩阵(或 ROC)查看性能

我尝试了不同的特征:在一个特征工程较少的数据集中,即仅使用来自文本的特征,我得到的 F1 分数的最大值等于 68%。有了更多我认为对改进模型很重要的功能,我得到了最大 64%,考虑到这个问题(用于垃圾邮件检测的电子邮件分类),这很奇怪。理论上,如果我只从文本中提取特征,我会得到更好的分数,而不是从电子邮件地址中提取特征。如果您有任何提示和建议,我想请教您,因为我认为这是不可能的,因为在第二种情况下,预期结果应该更高,当我还考虑来自电子邮件地址的信息时(点数, 后缀, 注册日期,...)。

我正在考虑模型构建的过度拟合问题或其他一些问题。如果您能告诉我您对此的想法,我将不胜感激。

谢谢你的帮助。

1个回答

我尝试了不同的特征:在一个特征工程较少的数据集中,即仅使用来自文本的特征,我得到的 F1 分数的最大值等于 68%。有了更多我认为对改进模型很重要的功能,我得到了最大 64%,考虑到这个问题(用于垃圾邮件检测的电子邮件分类),这很奇怪。

如果模型过度拟合,通常会发生这种情况:没有足够的数据和/或太多的特征使模型选择在训练数据中偶然发生的模式。

通常对于文本,必须删除最不常见的单词以避免过度拟合。您可能还想检查附加功能,删除任何很少发生的东西。

此外,混淆矩阵给了我奇怪的输出

       0      1
0    [[2036  161]
1    [   1 2196]]

观察:

  • 真类 0 有 2036+161 = 2197 个实例,真类 1 有 1+2196=2197 个实例。这些结果是通过重新采样的数据获得的。
  • 假设第 1 类是正面的:2196 个真阳性(TP)、2036 个 TN、161 个 FP(预测为阴性的真阳性)和 1 个 FN(预测为阳性的真阴性)。
    • 召回率 = 0.999,精度 = 0.932。这是一个高于 0.95 的 f1 分数(可能是由于重新采样的数据)。
  • 第二个混淆矩阵也是用重采样的数据清楚地得到的,它表现出完美的性能(F1-score 为 1)。

这些矩阵显示了在重采样数据上获得的性能,因此它类似于在训练数据上的性能。由于在真实测试集上的表现要低得多,这证实了强烈的过拟合。