功能数量的增加会导致准确性下降,但prec / recall会增加


15

我是机器学习的新手。目前,我正在使用Naive Bayes(NB)分类器,通过NLTK和python将小文本分为正,负或中性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度量:

在此处输入图片说明

然后,在将MAXINFOGAIN与前100个和前1000个功能一起使用时,我用增量训练集绘制了火车误差和测试误差:

在此处输入图片说明

因此,在我看来,尽管使用FREQENT可以获得最高的准确性,但是最好的分类器是使用MAXINFOGAIN的分类器,对吗?吗?使用前100个功能时,我们会产生偏差(测试错误接近训练错误),添加更多训练示例将无济于事。为了改善这一点,我们将需要更多功能。具有1000个功能,偏差会减少,但误差会增加...这样可以吗?我是否需要添加更多功能?我真的不知道该怎么解释...

再次感谢...


1
这取决于您对“最佳分类器”的含义,如果您的任务是构建总体上具有较高准确性的分类器,那么我将选择FREQENT。另一方面,如果像大多数稀有类分类任务中一样,您想要更好地对稀有类进行分类(可以是“阴性”或“阳性”类),则可以选择MAXINFOGAIN。我认为您的学习曲线解释是正确的:如果有100个特征,则可能有偏差,您可以添加它们;如果有1000个,则有方差,您可以删除它们。也许您可以在100和1000个功能之间进行权衡以获得更好的结果。
西蒙妮

感谢您的帮助,西蒙妮!除了最后一部分,我了解所有内容...您能否告诉我您如何看待1000种功能的高差异?由于测试错误和训练错误之间的差异似乎并不大,所以对我来说似乎仍然有偏见……
kanzen_master

我在回复中列举了一些例子。当曲线不太紧密时,将问题分类为高方差。就您而言,也许我告诉过您,因为功能越少,性能就越好,因此,拥有1000个功能很可能会引起很大的差异。与其将特征选择算法的结果与训练集上计算出的测绘结果作图,不如尝试在训练中分割数据(其中的2/3)并进行验证,然后在训练集上执行特征选择并在测试集上进行评估。您应该在图的中间找到一个最大值。
西蒙妮

感谢您的答复。更新后的帖子的第三个示例(良好的结果,训练,测试误差曲线既不太接近也不太远)看起来像我使用1000个功能绘制的学习曲线,因此我认为使用大约1000个功能将是“好结果”。但是,在这种情况下,误差较高,这不是很好。但是,仅查看曲线之间的距离,我看不到具有1000个特征的高方差...(顺便说一句,我已经将数据分成2/3作为训练集,将1/3作为测试集,执行特征选择训练集,然后评估测试集...)
kanzen_master 2011年

1
好。我是学习曲线的新手,您的示例确实很有趣,使我对它们有了深刻的了解。因此,谢谢DT。是的,在两种情况下都可能存在偏差。根据我的说法,您的数据集非常不正确,而不是测试准确性,重要的是要查看F度量。查看您的绘图,似乎您拥有的功能越多越好;实际上,F测度有所提高。我听说在文本分类中,如果您的特征是文本中的单词频率,通常会使用很多特征。顺便说一句,我不习惯,我不能告诉你更多。
西蒙妮

Answers:


18

精度与F量度

首先,使用度量标准时,您应该知道如何进行度量。准确性衡量所有类别中正确分类的实例的比率。这就是说,如果一个类别比另一个类别更频繁地出现,那么产生的准确性显然将由主导类别的准确性决定。在您的情况下,如果构造一个模型M,该模型仅针对每个实例预测“中性”,则结果的准确性为

一种CC=ñËüŤ[R一种ñËüŤ[R一种+pØs一世Ť一世vË+ñËG一种Ť一世vË=0.9188

好,但是没用。

因此,功能的添加明显提高了NB区分类别的能力,但是通过预测“正”和“负”,可以将中性线错误分类,因此准确性下降(粗略地说)。此行为独立于NB。

或多或少的功能?

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

同样,此建议(InformationGain除外)与分类算法无关。

编辑11.11.11

对于选择正确数量的特征的偏差和方差存在很多困惑。因此,我建议阅读本教程的第一页:偏差偏差权衡。关键要素是:

  • 高偏见意味着该模型不是最佳模型,即测试误差很高(如西蒙娜(Simone)所说,拟合不足)
  • 高方差意味着该模型对用于构建模型的样本非常敏感。这意味着,误差高度依赖于所使用的训练集,因此误差的方差(在不同的交叉验证倍数中评估)将极为不同。(过度拟合)

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

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

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

误差/偏差的这种行为正是我们在图中看到的。我们无法发表有关差异的陈述。曲线彼此接近可以表明测试集足够大以显示与训练集相同的特征,因此测得的误差可能是可靠的,但这是(至少据我所知它)不足以对(误差!)的方差做出陈述。

当添加越来越多的训练示例(保持测试集的大小固定)时,我希望两种方法(要素数量少而数量多)的方差都减小。

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


1
非常感谢您的答复,非常明确的解释。我使用最大的信息获取作为我的特征选择策略,并使用5倍交叉验证进行测试。我猜想为了知道我应该选哪个前k个特征,我需要迭代地测试算法,每次增加特征数,并取k给出最高的f_score。但是,我猜“ top k”可能会根据数据集而改变...对吗?
kanzen_master 2011年

1
正确。但是,如果新数据集与旧数据集相似(具有相同分布的相同特征),则k保持不变。您可以添加遗传算法以更快地搜索可能的解决方案的空间,或者(甚至更好)使用遗传算法来查找独立于InformationGain的最佳特征子集...有许多方法可以走。
steffen 2011年

1
根据斯坦福大学的讲授,如果您看到分开的训练和测试曲线改变了训练示例的数量,则实际上意味着存在差异。当然,更好的方法是估计置信区间。
西蒙妮

1
@DT 1.我不知道这堂课,因此我无法将Andrewg的解释与我的联系起来。2.否。特征数量少=>过度拟合=>低偏差,高方差。大量特征=>拟合不足=>高偏差,低方差。我确实建议针对不同数量的特征和训练示例绘制cv折叠误差的方差。
steffen 2011年

2
1. steffen,讲座可在此处获得:ml-class.org/course/video/preview_list (第十部分,“学习曲线”部分)2.我明白了。我当时在想,如果在训练中学习到的许多功能=>模型变得复杂,并且过度适合训练集=>方差...
kanzen_master

5

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

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

编辑

λ

λ

高差异

λ

高偏见

λ=1个

好结果


大!非常感谢你!由于这两个答案都确实有帮助,但是我不能将它们都标记为答复,因此我将第一个标记为答案。我认为,但这绝对是检查的最佳方法。
kanzen_master 2011年

顺便说一句,我试图绘制一个分类器的学习曲线,该分类器使用前100个具有最大信息增益得分的功能。在增加训练数据集大小的同时,我想绘制训练误差和测试误差。初始火车数据集(要逐渐增加)和测试数据集(所有测试都为静态)的大小应该是多少?再次感谢...
kanzen_master 2011年

2
将数据集分为训练集和测试集。从很少的培训记录开始,然后继续添加记录。对于每次迭代,请使用用于训练分类器的记录来计算训练集误差,然后始终使用所有测试记录来计算测试集误差。我知道这是常用的标准方法。看到您的结果会很有趣!干杯,西蒙妮。
西蒙妮

1
西蒙妮(Simone),我对第一篇文章进行了更新,其中包含一些准确性,f1度量和学习曲线的结果,而我的解释则位于底部,请您检查一下?谢谢...
kanzen_master
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.