假设我正在研究一些分类问题.(欺诈检测和评论垃圾邮件是我现在正在处理的两个问题,但我对一般的任何分类任务都很好奇.)
我怎么知道我应该使用哪个分类器?
决策树
SVM
贝叶斯
神经网络
K-最近邻居
Q学习
遗传算法
马尔可夫决策过程
卷积神经网络
线性回归或逻辑回归
提升,装袋,奴役
随机爬山或模拟退火
...
在哪些情况下,其中一种是"自然的"首选,选择那一种的原则是什么?
我正在寻找的答案类型的例子(来自Manning等人的信息检索简介书):
一个.如果您的数据已标记,但数量有限,则应使用具有高偏差的分类器(例如,Naive Bayes).
我猜这是因为较高偏差的分类器会有较低的方差,这很好,因为数据量很小.
湾 如果你有大量的数据,那么分类器并不是那么重要,所以你应该选择一个具有良好可扩展性的分类器.
其他指南是什么?甚至像"如果你必须向一些高级管理人员解释你的模型,那么也许你应该使用决策树,因为决策规则相当透明"的答案是好的.不过,我不太关心实现/库问题.
此外,对于一个有点单独的问题,除了标准的贝叶斯分类器,是否有"标准的最先进"方法用于评论垃圾邮件检测(而不是电子邮件垃圾邮件)?
Mukesh Chapa.. 87
首先,您需要确定您的问题.这取决于您拥有的数据类型以及您希望的任务.
如果你是
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/
首先,您需要确定您的问题.这取决于您拥有的数据类型以及您希望的任务.
如果你是
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/
使用交叉验证的模型选择可能是您所需要的.
您所做的只是将数据集拆分为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个型号,每个折叠组合一个.之后,使用剩余的测试数据测试每个模型并选择最佳模型.再次,在拥有最后一个模型之后,您将使用与您拥有的所有数据相同的方法和参数训练一个新模型.那是你的最终模特.
当然,这些方法有很多种,我没有提及.如果您需要有关这些的更多信息,请查找有关这些主题的一些出版物
" OpenCV "一书在第462-463页上有两页.在亚马逊预览中搜索"discriminiminative"(也可能是谷歌书籍)这个词,可以让你看到有问题的页面.这两页是我在本书中找到的最伟大的宝石.
简而言之:
提升 - 在有大量培训数据时通常有效.
随机树 - 通常非常有效,也可以执行回归.
K-最近邻居 - 你可以做的最简单的事情,往往有效但速度慢,需要大量的记忆.
神经网络 - 训练缓慢但运行速度非常快,仍然是字母识别的最佳表现者.
SVM - 其中最好用有限的数据,但失去了对提高或随机的树木,只有当大数据集是可用的.
您在选择使用哪种算法时可能会考虑的事项包括:
你需要逐步训练(而不是批量训练)?
如果您需要经常使用新数据更新分类器(或者您有大量数据),您可能希望使用贝叶斯.神经网络和SVM需要一次性处理训练数据.
您的数据是仅由分类组成,还是仅由数字组成,还是由两者组成?
我认为贝叶斯最适用于分类/二项式数据.决策树无法预测数值.
您或您的受众是否需要了解分类器的工作原理?
使用贝叶斯或决策树,因为这些可以很容易地解释给大多数人.从某种意义上说,神经网络和SVM是"黑匣子",你无法真正看到他们如何对数据进行分类.
你需要多少分类速度?
SVM在分类时速度很快,因为它们只需要确定数据所在"行"的哪一侧.决策树可能很慢,特别是当它们很复杂时(例如很多分支).
复杂性.
神经网络和SVM可以处理复杂的非线性分类.
正如Andrew Ng教授经常指出的那样:总是先实施一个粗略的,脏的算法,然后迭代地改进它.
对于分类,Naive Bayes是一个很好的入门者,因为它具有良好的性能,高度可扩展性,可以适应几乎任何类型的分类任务.另外1NN(K-Nearest Neighbors只有1个邻居)是一个无麻烦的最佳拟合算法(因为数据将是模型,因此您不必关心决策边界的维度拟合),唯一问题是计算成本(二次因为你需要计算距离矩阵,所以它可能不适合高维数据).
另一个好的入门算法是随机森林(由决策树组成),它可以高度扩展到任意数量的维度,并且通常具有相当可接受的性能.最后,有一些遗传算法可以很好地扩展到任何维度和任何数据,对数据本身知之甚少,最简单和最简单的实现是微生物遗传算法(只有一行C代码!由Inman Harvey编写) 1996年),其中最复杂的是CMA-ES和MOGA/e-MOEA.
请记住,在尝试使用真实算法之前,通常情况下,您无法真正了解哪些内容最适合您的数据.
作为旁注,如果你想要一个理论框架来测试你的假设和算法理论性能对于给定的问题,你可以使用PAC(可能是近似正确的)学习框架(注意:它非常抽象和复杂!),但是总结一下,PAC学习的要点是你应该使用不那么复杂,但足够复杂(复杂性是算法可以容纳的最大维度)算法,它可以适合你的数据.换句话说,使用奥卡姆剃刀.
Sam Roweis 曾经说过,你应该先尝试朴素的贝叶斯,逻辑回归,k-最近邻和Fisher的线性判别式.
我的看法是,您始终首先运行基本分类器以了解您的数据.通常情况下(至少在我的经验中),他们已经足够好了.
因此,如果您有监督数据,请训练朴素贝叶斯分类器.如果您有无监督数据,可以尝试k-means聚类.
另一个资源是斯坦福机器学习系列视频的讲座视频之一,我在一段时间后看过.在视频4或5中,我认为,讲师在培训分类器,优势/权衡等时讨论了一些普遍接受的惯例.
您应始终考虑推断与预测之间的权衡。
如果您想了解数据中存在的复杂关系,则应使用丰富的推理算法(例如线性回归或套索)。另一方面,如果您仅对结果感兴趣,则可以使用高维和更复杂(但难以解释)的算法,例如神经网络。