分类精度低,下一步该怎么办?


16

因此,我是ML领域的新手,因此尝试进行一些分类。我的目标是预测体育赛事的结果。我收集了一些历史数据,现在尝试训练分类器。我得到了大约1200个样本,其中有0.2个样本出于测试目的而拆分,其他样本则使用不同的分类器进行了网格搜索(包括交叉验证)。到目前为止,我已经尝试过使用线性,rbf和多项式内核以及随机森林的SVM。不幸的是,我无法获得显着大于0.5的精度(与随机选择类相同)。这是否意味着我无法预测如此复杂事件的结果?或者我可以获得至少0.7-0.8的精度?如果可行,那么接下来我应该考虑什么?

  • 获取更多数据?(我最多可以将数据集放大5倍)
  • 尝试其他分类器?(逻辑回归,kNN等)
  • 重新评估我的功能集?有没有要分析的机器学习工具,哪些功能有意义,哪些没有?也许我应该减少功能集(目前我有12个功能)?

您的训练准确度是多少?您每个班级有几个样本?
Leo

1
这是什么运动,您认为“正确”的分类是什么?如果您只是试图预测几乎所有主要运动项目的赢/输结果,那么即使是最简单的分类器也无法预测其优于0.5几乎是不可想象的。例如,如果您要尝试预测点差或其他残障结果的赢/输,那么可能很难远胜于0.5。
红衣主教

@Leo训练准确性约为0.5。类是均匀分布的,我有等级0和1
fspirit

@cardinal是的,我尝试预测输赢结果,没有障碍。在测试集上达到0.8精度是否可行?
fspirit 2012年

1
@fspirit:一方面,这取决于运动和参与者之间能力的不平等。只知道参加了每个比赛通常可以成为一个强有力的预测指标。这里这里有几个相关的帖子。
主教

Answers:


17

首先,如果您的分类器没有比随机选择更好,那么就有危险,就是要素和类之间根本就没有联系。在这样的位置问自己一个好问题,就是您或领域专家可以根据给定的特征推断出该类(其准确性大于随机分类器)。如果否,那么获取更多数据行或更改分类器将无济于事。您需要做的是使用不同的功能来获取更多数据。

另一方面,如果您认为推断类别所需的信息已经在标签中,则应检查分类器是否存在高偏差或高方差问题。

为此,根据训练示例绘制验证误差和训练集误差。

如果这些线似乎收敛到相同的值并在末尾接近,则您的分类器具有较高的偏差,添加更多数据将无济于事。在这种情况下,一个好主意是更改具有较高方差的分类器,或者只是降低当前分类器的正则化参数。

另一方面,如果这些线相距很远,并且训练集错误较低,但验证错误较高,则分类器的方差太大。在这种情况下,获取更多数据很有可能会有所帮助。如果获取更多数据后方差仍然太大,则可以增加正则化参数。

当遇到像您这样的问题时,这是我会使用的一般规则。

干杯。


您是指验证设置错误和测试设置错误吗?否则,我很困惑。我什至不知道训练集错误,原因是我使用验证集错误来选择模型,然后他们在测试集上检查所选模型。
fspirit 2012年

不,我的意思是训练集错误写在哪里。训练误差是训练集中分类错误的样本数除以训练集大小。同样,测试集错误是测试集中错误分类的示例数除以训练集大小。另外,您可能想查看Coursera的机器学习课程(class.coursera.org/ml-2012-002/lecture/index),尤其是有关“应用机器学习建议”的视频。这些建议与您的情况非常相关。
sjm.majewski 2012年

我参加了这门课程,这是它第一次运行。至于训练集的错误,现在我将它输出也为SVM其相当高- 0.5,但随机森林的0
fspirit

5

我建议退后一步,在尝试分类之前进行一些探索性数据分析。值得逐一检查您的功能,以查看是否与感兴趣的结果有任何关系-可能您所拥有的功能与类标签没有任何关联。您怎么知道您拥有的功能是否有用?

您可以从进行假设检验或相关分析开始,以测试关系。生成要素的特定于类别的直方图(即,在同一轴上为给定要素绘制每个类别的数据的直方图)也是一种很好的方法,用于显示要素在两个类别之间是否能很好地区分。

重要的是要记住,尽管不要让探索性分析的结果影响分类的选择。根据先前对相同数据进行的探索性分析来选择分类功能,可能会导致过拟合和性能估计有偏差(请参阅此处的讨论),但是探索性分析至少可以让您了解您要执行的任务是否均匀可能。


我将尝试绘制直方图,看看它们的外观。
fspirit 2012年

@BGreene-您的第三段对我来说很艰难。如果探索性分析显示预测变量x1与结果高度相关,那么如果不将x1用作多元模型中的至少一个候选预测变量,这是否会破坏检查该相关性的目的?
rolando2 2012年

@ rolando2-我不建议您不要将特征作为候选对象作为特征选择例程的一部分,但是您不应基于这样的探索性分析来选择特征,因为这会过度拟合。但是,出于评估分类器模型的通用性能的目的,应在模型选择例程内(即,在交叉验证的每一折内)进行特征选择。我的建议是,探索性分析和分类应视为单独的活动-每个活动都告诉您有关数据的不同信息
BGreene 2012年

3

最好将数据分为训练数据和测试数据。

训练时您的训练错误是否减少了?如果不是,则您的训练算法可能有错误。您期望测试集上的误差大于训练集上的误差,因此,如果训练集上的误差过高,那么成功的希望就很小。

摆脱功能可以避免某些类型的过拟合。但是,它不应改善您的训练集上的错误。训练集上的错误率低而测试集上的错误率高则可能表明您使用了过于灵活的功能集而过度拟合。但是,通过交叉验证进行检查比在测试集中进行检查更为安全。根据测试集选择功能集后,该功能集就不再有效。


我使用单独的训练,验证和测试集。我根据验证集错误选择超级参数,然后将所选模型应用于测试集。我怀疑训练算法中是否有错误,因为我使用现成的lib。
fspirit 2012年

50%

在“功能很糟糕”的可能性中,我包括没有解决方案的情况。但是,我对此非常怀疑。我知道没有一项运动是无法找到一个竞争对手胜过另一个竞争对手的。甚至在剪刀石头布中也是可能的。
道格拉斯·扎里

1

为什么不遵循“先查看数据图”的原则。您可以做的一件事是两个协变量的两个类别条件密度的2D散点图。如果您查看这些内容,并且几乎没有发现可能表明缺乏可预测性的分离,则可以使用所有协变量来进行分离。这使您对使用这些协变量进行预测的能力有了一些想法。如果您希望这些变量能够分开一些,那么请开始考虑线性判别,二次判别,核识别,正则化,树分类,SVM等。


抱歉,是协变量==功能吗?
fspirit 2012年
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.