通常选择哪种机器学习分类器?[关闭]


207

假设我正在处理一些分类问题。(欺诈检测和垃圾评论是我目前正在研究的两个问题,但我对总体上的任何分类任务感到好奇。)

我怎么知道应该使用哪个分类器?

  1. 决策树
  2. 支持向量机
  3. 贝叶斯
  4. 神经网络
  5. K近邻
  6. Q学习
  7. 遗传算法
  8. 马尔可夫决策过程
  9. 卷积神经网络
  10. 线性回归或逻辑回归
  11. 提振,装袋,诱人
  12. 随机爬山或模拟退火
  13. ...

在哪些情况下是“自然”的首选,选择该原则的原则是什么?

我正在寻找的答案类型的示例(摘自Manning等人的“信息检索简介”书):

一个。如果您的数据带有标签,但数量有限,则应使用偏差较大的分类器(例如,朴素贝叶斯)

我猜这是因为偏高的分类器具有较低的方差,这很好,因为数据量少。

b。如果您有大量数据,则分类器实际上并不重要,因此您应该只选择具有良好可伸缩性的分类器。

  1. 还有哪些其他准则?即使是诸如“如果您必须向某个高级管理人员解释模型,那么您也应该使用决策树,因为决策规则是相当透明的”之类的答案是好的。不过,我不太关心实现/库问题。

  2. 此外,除了标准的贝叶斯分类器外,还有一个单独的问题,是否有“标准的最新技术”用于检测垃圾邮件(与电子邮件垃圾邮件相对)?


7
作为对“提出这个问题的最佳地点”的答复,您可能还想试试stats.stackexchange.com
jxramos 2014年

Answers:


94

在此处输入图片说明

首先,您需要确定您的问题。这取决于您拥有何种数据以及所需的任务是什么。

如果您是Predicting Category

  • 你有 Labeled Data
    • 您需要遵循Classification Approach及其算法
  • 你没有 Labeled Data
    • 你需要去 Clustering Approach

如果您是Predicting Quantity

  • 你需要去 Regression Approach

除此以外

  • 你可以去 Dimensionality Reduction Approach

上述每种方法中都有不同的算法。特定算法的选择取决于数据集的大小。

资料来源:http : //scikit-learn.org/stable/tutorial/machine_learning_map/


60

您可能需要使用交叉验证的模型选择

交叉验证

您要做的只是将数据集拆分为k个不重叠的子集(折叠),使用k-1个折叠训练模型,并使用剩下的折叠预测模型的性能。为此,您需要对折的每种可能组合进行操作(首先将第一个折出,然后第二个,...,第k个,然后训练剩余的折数)。完成后,您可以估算所有折痕的平均性能(可能还包括性能的方差/标准偏差)。

如何选择参数k取决于您的时间。k的通常值为3、5、10甚至N,其中N是数据的大小(与留一法交叉验证相同)。我更喜欢5或10。

选型

假设您有5种方法(ANN,SVM,KNN等),每种方法有10个参数组合(取决于方法)。您只需为每种方法和参数组合(5 * 10 = 50)运行交叉验证,然后选择最佳的模型,方法和参数。然后,您将对所有数据使用最佳方法和参数进行重新训练,并获得最终模型。

还有更多要说的话。例如,如果每种方法使用很多方法和参数组合,则很可能会过度拟合。在这种情况下,您必须使用嵌套交叉验证

嵌套交叉验证

嵌套交叉验证中,您对模型选择算法执行交叉验证。

同样,您首先将数据拆分为k折。在每一步骤之后,您选择k-1作为训练数据,其余选择作为测试数据。然后,为那些k折的每种可能组合运行模型选择(我在上面说明的过程)。完成此操作后,您将拥有k个模型,每个折叠组合一个。之后,您可以使用剩余的测试数据测试每个模型,然后选择最佳模型。同样,在拥有最后一个模型之后,您将对所有数据使用相同的方法和参数来训练一个新模型。那是您的最终模型。

当然,这些方法和其他我没有提到的东西有很多变化。如果您需要有关这些主题的更多信息,请查找有关这些主题的一些出版物。


5
是的,我了解交叉验证-我想知道更多有关选择特定分类器的先验原因(然后我可以使用交叉验证来调整一些参数,或在一些较小的分类器之间进行选择)。不过谢谢!
LM。

45

OpenCV》一书在第462-463页上有两页。在亚马逊预览版中搜索“歧视性”一词(可能还有谷歌图书),您将可以看到有问题的页面。这两页是我在本书中发现的最伟大的宝石。

简而言之:

  • 增强 - 通常在有大量训练数据时有效。

  • 随机树 -通常非常有效,也可以执行回归

  • K近邻 - 您可以做的最简单的事情,通常很有效,速度很慢,并且需要大量内存

  • 神经网络 - 训练缓慢,运行速度非常,仍然是字母识别的最佳执行者。

  • SVM - 其中最好有限的数据,但失去了对提高随机的树木,只有当大数据集是可用的。


39

您在选择使用哪种算法时可能会考虑的事项包括:

  1. 您需要增量训练(而不是分批训练)吗?

    如果您需要经常使用新数据更新分类器(或者您有大量数据),则可能要使用贝叶斯算法。神经网络和SVM需要一次性处理训练数据。

  2. 您的数据是仅由分类组成的,还是仅由数字组成的,或两者都组成

    我认为贝叶斯最适合分类/二项式数据。决策树无法预测数值。

  3. 您或您的听众是否需要了解分类器的工作原理?

    使用贝叶斯树或决策树,因为对于大多数人来说,它们很容易解释。神经网络和SVM在您无法真正看到它们如何对数据进行分类的意义上是“黑匣子”。

  4. 您需要多少分类速度

    SVM在分类方面非常快速,因为它们仅需要确定数据在“线”的哪一侧。决策树可能很慢,尤其是当它们很复杂(例如许多分支)时。

  5. 复杂性

    神经网络和支持向量机可以处理复杂的非线性分类。


2
本书的这一章可能会提供有关复杂性的更多信息nlp.stanford.edu/IR-book/html/htmledition/…–
supermus

31

正如吴安德(Andrew Ng)教授经常指出的那样:总是从实施粗糙,肮脏的算法开始,然后迭代地完善它

对于分类,朴素贝叶斯Naive Bayes)是一个很好的入门者,因为它具有良好的性能,高度可伸缩性并且可以适应几乎任何类型的分类任务。另外,只有1NN(只有1个邻居的K最近邻)是无障碍的最佳拟合算法(因为数据将是模型,因此您不必关心决策边界的维数拟合),唯一问题是计算成本(因为需要计算距离矩阵,所以是二次方的,因此可能不适用于高维数据)。

另一个很好的入门算法是随机森林(由决策树组成),它可以高度扩展到任意数量的维度,并且通常具有相当令人满意的性能。最后,是遗传算法,它可以很好地扩展到任何维度和任何数据,而对数据本身的了解却很少,最最小和最简单的实现是微生物遗传算法(Inman Harvey在2000年发表的只有一行C代码!)。 1996年),而最复杂的机构之一是CMA-ES和MOGA / e-MOEA。

请记住,通常,在尝试真正的算法之前,您实际上并不真正知道哪种方法最适合您的数据。

附带说明一下,如果您想要一个理论框架来测试给定问题的假设和算法的理论性能,则可以使用PAC(大概是正确的)学习框架(请注意:它非常抽象和复杂!),但是总结,PAC学习的要点是说,您应该使用可以适合您数据的不太复杂但足够复杂的算法(复杂度是算法可以满足的最大维数)。换句话说,请使用Occam的剃刀。


11

萨姆·罗威斯(Sam Roweis)曾经说过,您应该先尝试朴素的贝叶斯,逻辑回归,k近邻和费舍尔线性判别式。


8

我的看法是,您总是首先运行基本分类器才能对数据有所了解。他们经常(至少以我的经验)足够好。

因此,如果您有监督数据,请训练Naive Bayes分类器。如果您有不受监督的数据,则可以尝试k-均值聚类。

另一个资源是Stanford Machine Learning系列视频的演讲视频之一,我不久前观看了该视频。我认为,在视频4或5中,讲师讨论了训练分类器,优势/折衷等方面的一些公认惯例。


1
“没有免费的午餐”定理指出,没有一种模型可以最好地解决每个问题。对于一个问题建立一个好的模型的假设可能不会对另一个问题成立,因此在机器学习中尝试多个模型并找到最适合特定问题的模型是很常见的。
msarafzadeh,

5

您应始终考虑推断与预测之间的权衡。

如果您想了解数据中存在的复杂关系,则应使用丰富的推理算法(例如线性回归或套索)。另一方面,如果您仅对结果感兴趣,则可以使用高维和更复杂(但难以解释)的算法,例如神经网络。


3

算法的选择取决于场景以及数据集的类型和大小。还有许多其他因素。

这是基本机器学习的简短备忘单。

在这里,您可以使用简单的备忘单来验证您的方案


-2

首先,这取决于您要处理的问题类型是分类还是回归。然后明智地选择模型。它取决于一个特定的模型,一个特定的模型优于其他模型。假设您正在sklearn库中的wine_dataset上工作,首先尝试使用线性的内核svm训练数据,并且获得某种准确性,然后您认为它不令人满意,因此您尝试使用DecisionTreeClassifier()训练数据然后您尝试使用RandomForestClassifier()。之后,无论哪个精度会更好,或者您可以说适合您的数据,您都可以得出结论。在继续更改模型进行测试的过程中,您会发现语法差异很小。因此,一切顺利,并很好地理解了问题。


1
OP的(原始海报)问题是: 我怎么知道应该使用哪个分类器?结论是他们正在寻找一种分类算法。在回答之前,请先仔细阅读问题。
Vetrivel PS
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.