通常选择哪种机器学习分类器? [关闭]
machine-learning
6
0

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

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

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

其中哪种情况是“自然”的首选,选择该原则的原则是什么?

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

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

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

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

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

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

参考资料:
Stack Overflow
收藏
评论
共 8 个回答
高赞 时间 活跃

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

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

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

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

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

收藏
评论

在此处输入图片说明

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

如果您正在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/

收藏
评论

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

简而言之:

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

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

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

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

  • SVM- 数据有限 的最佳解决方案之一,但仅当有大量数据集可用时,才会因增强 随机树丢失

收藏
评论

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

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

另一个资源是Stanford Machine Learning系列视频的演讲视频之一,我不久前观看了该视频。我认为,在视频4或5中,讲师讨论了训练分类器,优势/折衷等问题时讨论的一些普遍接受的约定。

收藏
评论

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

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

收藏
评论

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

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

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

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

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

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

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

  4. 您需要多少分类速度

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

  5. 复杂性

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

收藏
评论

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

收藏
评论

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

交叉验证

您要做的只是将数据集拆分为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个模型,每个折叠组合一个。之后,您可以使用剩余的测试数据测试每个模型,然后选择最佳模型。同样,在获得最后一个模型之后,您将对所有数据使用相同的方法和参数来训练一个新模型。那是您的最终模型。

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号