增加特征数量会导致准确率下降,但 prec/recall 会增加

机器算法验证 机器学习 分类 朴素贝叶斯 精确召回
2022-02-02 09:54:20

我是机器学习的新手。目前,我使用 NLTK 和 python 使用朴素贝叶斯 (NB) 分类器将 3 类中的小文本分类为正面、负面或中性。

在进行一些测试后,使用由 300,000 个实例(16,924 个正例、7,477 个负例和 275,599 个中性例)组成的数据集,我发现当我增加特征数量时,准确率会下降,但正类和负类的准确率/召回率会上升。这是 NB 分类器的正常行为吗?我们可以说使用更多功能会更好吗?

一些数据:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

提前致谢...

编辑 2011/11/26

我用朴素贝叶斯分类器测试了 3 种不同的特征选择策略(MAXFREQ、FREQENT、MAXINFOGAIN)。首先是每个类别的准确性和 F1 度量:

在此处输入图像描述

然后,当使用具有前 100 个和前 1000 个特征的 MAXINFOGAIN 时,我用增量训练集绘制了训练误差和测试误差:

在此处输入图像描述

所以,在我看来,虽然使用 FREQENT 实现了最高准确度,但最好的分类器是使用 MAXINFOGAIN 的分类器,对吗?当使用前 100 个特征时,我们有偏差(测试误差接近于训练误差)并且添加更多训练示例将无济于事。为了改善这一点,我们将需要更多功能。有了 1000 个特征,偏差会减少,但误差会增加……这样可以吗?我是否需要添加更多功能?我真的不知道如何解释这个......

再次感谢...

2个回答

准确度与 F 度量

首先,当您使用指标时,您应该知道如何玩弄它。准确度衡量所有类别中正确分类实例的比率。这意味着,如果一个类比另一个类更频繁地出现,那么结果的准确性显然由主导类的准确性支配。在您的情况下,如果构建一个模型 M,它只预测每个实例的“中性”,那么结果的准确性将是

acc=neutral(neutral+positive+negative)=0.9188

好,但没用。

因此,特征的添加明显提高了 NB 区分类别的能力,但是通过预测“正”和“负”,一个错误分类中性,因此准确性下降(粗略地说)。此行为与 NB 无关。

或多或少的特点?

一般来说,最好不要使用更多的功能,而是使用正确的功能。在特征选择算法有更多选择来找到最佳子集的情况下,更多特征会更好(我建议探索:crossvalidated 的特征选择)。对于 NB,一种快速且可靠(但不是最佳)的方法是使用 InformationGain(Ratio) 对特征进行降序排序并选择前 k 个。

同样,此建议(InformationGain 除外)独立于分类算法。

编辑 27.11.11

关于选择正确数量的特征的偏差和方差存在很多混淆。因此,我建议阅读本教程的第一页:Bias-Variance tradeoff关键本质是:

  • 高偏差意味着模型不是最优的,即测试误差很高(正如 Simone 所说,欠拟合)
  • 高方差意味着模型对用于构建模型的样本非常敏感这意味着,误差在很大程度上取决于所使用的训练集,因此误差的方差(在不同的交叉验证折叠中评估)将非常不同。(过拟合)

绘制的学习曲线确实表明了偏差,因为绘制了误差。但是,您看不到方差,因为根本没有绘制错误的置信区间。

示例:当执行 6 次 3 折交叉验证时(是的,建议使用不同的数据分区进行重复,Kohavi 建议重复 6 次),您会得到 18 个值。我现在希望...

  • 使用少量特征,平均误差(偏差)会更低,但是(18 个值的)误差的方差会更高。
  • 具有大量特征时,平均误差(偏差)会更高,但(18 个值的)误差的方差会更低。

错误/偏差的这种行为正是我们在您的图中看到的。我们无法就差异发表声明。曲线彼此接近可能表明测试集足够大以显示与训练集相同的特征,因此测量的误差可能是可靠的,但这是(至少据我了解它)不足以说明(错误的)方差。

当添加越来越多的训练示例(保持测试集的大小固定)时,我希望两种方法的方差(特征数量少和数量多)都会降低。

哦,别忘了只使用训练样本中的数据来计算特征选择的信息增益!人们很想使用完整的数据进行特征选择,然后执行数据分区并应用交叉验证,但这会导致过度拟合。我不知道你做了什么,这只是一个永远不要忘记的警告。

为了知道使用更多功能是否有用,我会绘制学习曲线。我认为这在斯坦福机器学习课程的第 10 单元中有明确的解释,名为“应用机器学习的建议”,您可以在此处找到:http ://www.ml-class.org/course/video/preview_list 。

绘制学习曲线,您可以了解您的问题是高偏差还是高方差。只要您增加训练示例的数量,您就应该绘制训练误差测试误差(即 1-accuracy),后者是您的分类器在不同数据集上估计的误差。如果这些曲线彼此靠近,则存在高偏差问题,插入更多特征可能会有所帮助。另一方面,如果您的曲线完全分开,只要您增加训练示例的数量,您就会遇到高方差问题。在这种情况下,您应该减少正在使用的功能数量。

编辑

我将添加一些学习曲线的示例。这些是通过正则化逻辑回归获得的学习曲线。不同的地块对应不同的λ调整正则化的力量。

带一个小λ我们有过拟合,因此方差很大

高方差

带有一个大λ有欠拟合,因此有高偏差

高偏差

获得了很好的结果设置λ=1作为权衡。

好结果