一般来说,选择哪种机器学习分类器? [关闭]
Posted
技术标签:
【中文标题】一般来说,选择哪种机器学习分类器? [关闭]【英文标题】:Which machine learning classifier to choose, in general? [closed] 【发布时间】:2011-02-05 09:56:45 【问题描述】:假设我正在处理一些分类问题。 (欺诈检测和垃圾评论是我目前正在研究的两个问题,但我对任何分类任务都很好奇。)
我怎么知道我应该使用哪个分类器?
-
决策树
支持向量机
贝叶斯
神经网络
K-最近邻
Q 学习
遗传算法
马尔可夫决策过程
卷积神经网络
线性回归或逻辑回归
提升、装袋、集成
随机爬山或模拟退火
...
在哪些情况下,其中一种是“自然”的首选,选择该选择的原则是什么?
我正在寻找的答案类型示例(来自 Manning 等人的 Introduction to Information Retrieval 书籍):
一个。 如果你的数据被标记,但你只有有限的数量,你应该使用具有高偏差的分类器(例如,朴素贝叶斯)。
我猜这是因为较高偏差的分类器的方差较低,这很好,因为数据量很小。
b. 如果你有大量数据,那么分类器就没有那么重要了,所以你应该选择一个具有良好可扩展性的分类器。
还有哪些其他指南?甚至像“如果你必须向一些高层管理人员解释你的模型,那么也许你应该使用决策树,因为决策规则是相当透明的”这样的答案也很好。不过,我不太关心实现/库问题。
另外,对于一个有点不同的问题,除了标准的贝叶斯分类器之外,是否有“标准的最先进”方法来检测垃圾评论(相对于垃圾邮件)?
李>【问题讨论】:
回复你的“问这个问题的最佳地点”,你可能还想试试stats.stackexchange.com github.com/niektuytel/Machine_Learning/tree/main 【参考方案1】:我的看法是,您总是首先运行基本分类器以了解您的数据。通常情况下(至少根据我的经验)它们已经足够好了。
因此,如果您有监督数据,请训练朴素贝叶斯分类器。如果您有无监督数据,可以尝试 k-means 聚类。
另一个资源是我不久前观看的系列视频Stanford Machine Learning的一个讲座视频。我认为,在视频 4 或 5 中,讲师讨论了一些在训练分类器时普遍接受的约定、优势/权衡等。
【讨论】:
“没有免费午餐”定理指出,没有一种模型可以最适合所有问题。一个问题的好模型的假设可能不适用于另一个问题,因此在机器学习中通常会尝试多种模型并找到最适合特定问题的模型。【参考方案2】:Model selection 使用 cross validation 可能是您需要的。
交叉验证
您只需将数据集拆分为 k 个不重叠的子集(折叠),使用 k-1 折叠训练模型并使用您遗漏的折叠预测其性能。您对每种可能的折叠组合执行此操作(首先将第 1 个折叠退出,然后是第 2 个,...,然后是第 k 个,并使用剩余的折叠进行训练)。完成后,您估计所有折叠的平均性能(也可能是性能的方差/标准差)。
如何选择参数k取决于你拥有的时间。 k 的通常值为 3、5、10 甚至 N,其中 N 是数据的大小(这与 leave-one-out cross validation 相同)。我更喜欢 5 或 10。
型号选择
假设您有 5 种方法(ANN、SVM、KNN 等)和每种方法的 10 个参数组合(取决于方法)。您只需对每种方法和参数组合 (5 * 10 = 50) 运行交叉验证并选择最佳模型、方法和参数。然后,您对所有数据使用最佳方法和参数进行重新训练,并获得最终模型。
还有一些话要说。例如,如果您为每个方法使用很多方法和参数组合,则很可能会过拟合。在这种情况下,您必须使用嵌套交叉验证。
嵌套交叉验证
在嵌套交叉验证中,您对模型选择算法执行交叉验证。
同样,您首先将数据拆分为 k 个折叠。在每一步之后,您选择 k-1 作为您的训练数据,剩下的一个作为您的测试数据。然后为这些 k 折叠的每个可能组合运行模型选择(我在上面解释的过程)。完成此操作后,您将拥有 k 个模型,每个折叠组合一个。之后,您使用剩余的测试数据测试每个模型并选择最佳模型。同样,在拥有最后一个模型之后,您使用相同的方法和参数对您拥有的所有数据训练一个新模型。这就是你的最终模型。
当然,这些方法和其他我没有提到的东西有很多变体。如果您需要有关这些主题的更多信息,请查找有关这些主题的一些出版物。
【讨论】:
是的,我知道交叉验证——我想知道更多关于选择某个分类器的先验原因(然后我可以使用交叉验证来调整一些参数,或者在一些较小的集合之间进行选择分类器)。不过谢谢!【参考方案3】:Sam Roweis used to say 建议您首先尝试朴素贝叶斯、逻辑回归、k-最近邻和 Fisher 线性判别式。
【讨论】:
【参考方案4】:“OpenCV”这本书在第 462-463 页上有两页很棒。在亚马逊预览中搜索“歧视性”一词(也可能是谷歌图书)会让您看到有问题的页面。这两页是我在这本书中找到的最大的瑰宝。
简而言之:
提升 - 在有大量训练数据可用时非常有效。
随机树 - 通常非常有效,还可以执行回归。
K-最近邻 - 最简单你可以做的事情,通常有效但缓慢和需要大量内存。
神经网络 - 训练缓慢但非常运行速度很快,仍然是字母识别的最佳表现强>.
SVM - 名列前茅,数据有限,但输给提升或随机树仅在大型数据集可用时。
【讨论】:
【参考方案5】:在选择使用哪种算法时您可能会考虑的事项包括:
您是否需要增量训练(而不是批量训练)?
如果您需要经常使用新数据更新分类器(或者您有大量数据),您可能需要使用贝叶斯。神经网络和 SVM 需要一次性处理训练数据。
您的数据是仅由分类组成,还是仅由数字组成,或两者?
我认为贝叶斯最适用于分类/二项式数据。决策树无法预测数值。
您或您的观众是否需要了解分类器的工作原理?
使用贝叶斯或决策树,因为这些对大多数人来说都很容易解释。神经网络和 SVM 是“黑匣子”,您无法真正看到它们是如何对数据进行分类的。
你需要多少分类速度?
SVM 在分类方面速度很快,因为它们只需要确定您的数据在“线”的哪一侧。决策树可能会很慢,尤其是当它们很复杂时(例如很多分支)。
复杂性。
神经网络和 SVM 可以处理复杂的非线性分类。
【讨论】:
本书章节可能会提供有关复杂性的更多信息nlp.stanford.edu/IR-book/html/htmledition/…【参考方案6】:正如吴恩达教授经常说的:总是从实现一个粗略、肮脏的算法开始,然后迭代地改进它。
对于分类,朴素贝叶斯是一个很好的入门者,因为它具有良好的性能、高度可扩展性并且可以适应几乎任何类型的分类任务。此外 1NN(只有 1 个邻居的 K-Nearest Neighbors)是一种轻松的最佳拟合算法(因为数据将成为模型,因此您不必关心您的决策边界),唯一的问题是计算成本(二次方,因为您需要计算距离矩阵,因此它可能不适合高维数据)。
另一个很好的入门算法是随机森林(由决策树组成),它可以高度扩展到任意数量的维度,并且通常具有相当可接受的性能。最后是遗传算法,它可以很好地扩展到任何维度和任何对数据本身了解最少的数据,最小和最简单的实现是microbial genetic algorithm(只有一行C 代码!由 Inman Harvey 于 1996 年编写),其中最复杂的是 CMA-ES 和 MOGA/e-MOEA。
请记住,在实际尝试算法之前,您通常无法真正知道哪种方法最适合您的数据。
作为旁注,如果您想要一个理论框架来测试您的假设和算法对给定问题的理论性能,您可以使用PAC (Probably approximately correct) learning framework(注意:它非常抽象和复杂!),但总结一下, PAC 学习的要点说,您应该使用可以适合您的数据的不太复杂但足够复杂(复杂性是算法可以适合的最大维度)的算法。换句话说,使用奥卡姆剃刀。
【讨论】:
【参考方案7】:首先,您需要确定您的问题。这取决于您拥有什么样的数据以及您想要的任务是什么。
如果你是
你有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/
【讨论】:
【参考方案8】:您应该始终考虑推理与预测的权衡。
如果您想了解数据中出现的复杂关系,那么您应该使用丰富的推理算法(例如线性回归或套索)。另一方面,如果您只对结果感兴趣,则可以使用高维和更复杂(但难以解释)的算法,例如神经网络。
【讨论】:
请注意,glm(广义线性模型)和 gam(广义相加模型)在允许推理的同时具有高度的灵活性。【参考方案9】:算法的选择取决于场景以及数据集的类型和大小。 还有很多其他因素。
这是基本机器学习的简短备忘单。
【讨论】:
以上是关于一般来说,选择哪种机器学习分类器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章