首页 文章

哪种机器学习分类器可供选择,一般情况下?

提问于
浏览
181

假设我正在研究一些分类问题 . (欺诈检测和评论垃圾邮件是我现在正在处理的两个问题,但我对任何分类任务都很好奇 . )

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

  • 决策树

  • SVM

  • 贝叶斯

  • 神经网络

  • K-最近邻居

  • Q-learning

  • 遗传算法

  • 马尔可夫决策过程

  • 卷积神经网络

  • 线性回归或逻辑回归

  • Boosting,bagging,ensambling

  • 随机爬坡或模拟退火

  • ......

在哪些情况下,其中一个是“自然的”首选,选择那个的原则是什么?

答案类型的例子我'm looking for (from Manning et al.' s Introduction to Information Retrieval book):

一个 . 如果您的数据已标记,但数量有限,则应使用具有高偏差的分类器(例如,朴素贝叶斯) .

我猜这是因为较高偏差的分类器会有较低的方差,这很好,因为数据量很小 .

湾如果你有大量数据,那么分类器并不是那么重要,所以你应该选择一个具有良好可扩展性的分类器 .

  • 其他指南是什么?甚至答案如“如果你必须向一些上层管理人员解释你的模型,那么也许你应该使用决策树,因为决策规则是相当透明的”是好的 . 不过,我不太关心实现/库问题 .

  • 此外,对于一个有点单独的问题,除了标准的贝叶斯分类器之外,是否有“标准的最先进”方法用于评论垃圾邮件检测(而不是电子邮件垃圾邮件)?

10 回答

  • 77

    enter image description here

    首先,您需要确定您的问题 . 这取决于您拥有的数据类型以及您希望的任务 .

    如果您正在预测类别:您有标记数据您需要遵循分类方法及其算法您没有标记数据您需要采用聚类方法如果您正在预测数量:您需要采用回归方法否则您可以去降维方法

    在上面提到的每种方法中存在不同的算法 . 特定算法的选择取决于数据集的大小 .

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

  • 25

    Model selection使用cross validation可能就是您所需要的 .

    交叉验证

    您所做的只是将数据集拆分为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个型号,每个折叠组合一个 . 之后,使用剩余的测试数据测试每个模型并选择最佳模型 . 再次,在拥有最后一个模型后,您将使用相同的方法和参数训练一个新模型 . 那是你的最终模特 .

    当然,这些方法有很多种,我没有提及 . 如果您需要有关这些的更多信息,请查找有关这些主题的一些出版物

  • 7

    书籍“ OpenCV ”在 pages 462-463 上有两个很好的页面 . 在亚马逊预览中搜索单词"discriminative"(也可能是谷歌书籍)将让您看到有问题的页面 . 这两页是我在本书中找到的最伟大的宝石 .

    简而言之:

    large amount of training data 可用时

    • Boosting - often effective .

    • Random trees - 经常 very effective 并且还可以执行 regression .

    • K-nearest neighbors - simplest 你可以做的事情, often effective 但是 slow 并且需要 lots of memory .

    • Neural networks - Slow to train 但非常 fast to run ,仍然是 letter recognition 的最佳执行者 .

    • SVM - Among the bestlimited data ,但仅当 large data sets 可用时 losing against boostingrandom trees .

  • 37

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

    • 您是否需要逐步培训(而不是批量培训)?

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

    • 您的数据是仅由分类数据组成,还是仅由数字组成,还是两者都包含?

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

    • 您或您的 Spectator 是否需要了解分类器的工作原理?

    使用贝叶斯或决策树,因为这些可以很容易地解释给大多数人 . 从某种意义上说,神经网络和SVM是“黑盒子”,你无法真正看到它们如何对数据进行分类 .

    • 您需要多少分类速度?

    SVM在分类时速度很快,因为它们只需要确定数据所在“行”的哪一侧 . 决策树可能很慢,特别是当它们很复杂时(例如很多分支) .

    • 复杂性 .

    神经网络和SVM可以处理复杂的非线性分类 .

  • 53

    正如Andrew Ng教授经常说的那样:总是从实施 rough, dirty algorithm, and then iteratively refine it 开始 .

    对于分类, Naive Bayes 是一个很好的入门者,因为它具有良好的性能,高度可扩展性,并且几乎可以适应任何类型的分类任务 . 另外 1NN (K-Nearest Neighbors只有一个邻居)是一个无麻烦的最佳拟合算法(因为数据将是模型,因此您不必关心决策边界的维度拟合),唯一问题是计算成本(二次因为你需要计算距离矩阵,所以它可能不适合高维数据) .

    另一个好的入门算法是 Random Forests (由决策树组成),它可以高度扩展到任意数量的维度,并且通常具有相当可接受的性能 . 最后,有 genetic algorithms ,它可以很好地扩展到任何维度和任何数据本身知识最少的数据,最简单和最简单的实现是microbial genetic algorithm(只有一行C代码!由Inman Harvey在1996年),最复杂的一个是CMA-ES和MOGA / e-MOEA .

    请记住,在尝试使用真实算法之前,通常情况下,您无法真正了解哪些内容最适合您的数据 .

    作为旁注,如果您想要一个理论框架来测试您的假设和算法理论性能的特定问题,您可以使用PAC (Probably approximately correct) learning framework(注意:它's very abstract and complex!), but to summary, the gist of PAC learning says that you should use the less complex, but complex enough (complexity being the maximum dimensionality that the algo can fit) algorithm that can fit your data. In other words, use the Occam' s剃刀 .

  • 35

    Sam Roweis used to say你应该先尝试朴素的贝叶斯,逻辑回归,k-最近邻和Fisher的线性判别式 .

  • 4

    我的看法是,您始终首先运行基本分类器以了解您的数据 . 通常情况下(至少根据我的经验),他们已经足够好了 .

    因此,如果您有监督数据,请训练朴素贝叶斯分类器 . 如果您有无监督数据,可以尝试k-means聚类 .

    另一个资源是我观看了一段时间的视频系列视频之一Stanford Machine Learning . 在视频4或5中,我认为,讲师在培训分类器,优势/权衡等时讨论了一些普遍接受的惯例 .

  • 3

    你应该始终考虑 inference vs prediction 权衡 .

    如果您想了解数据中发生的复杂关系,那么您应该使用丰富的推理算法(例如线性回归或套索) . 另一方面,如果您只对结果感兴趣,您可以使用高维度和更复杂(但可解释性更低)的算法,如神经网络 .

  • -3

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

    这是基本机器学习的简要备忘单 .

    Here you can validate your scenario with a simple cheat sheet

  • 0

    使用以下算法进行分类

    • Logistic回归 .

    • K-Nearest Neighbors(K-NN) .

    • 支持向量机(SVM)

    • 内核SVM .

    • 朴素贝叶斯 .

    • 决策树分类

    • 随机森林分类 .

    • ANN(Tensorflow) .

    • CNN .

相关问题