假设我工作的一些分类问题。 (欺诈检测和垃圾评论的是我的工作,现在两个问题,但我很好奇任何一般分类任务。)
我怎么知道我应该使用哪些分类?
- 决策树
- SVM
- 贝叶斯
- 神经网络
- K最近邻居
- Q学习
- 遗传算法
- 马尔可夫决策过程
- 卷积神经网络
- 线性回归或logistic回归
- 激扬,装袋,ensambling
- 随机爬坡或模拟退火
- ...
在哪些情况下,这些“天然”的首选地之一,什么是选择那一个原则是什么?
答案类型的实例我在找(曼宁等人的。 现代信息检索书):
一个。 如果您的数据标记,但你只有数量有限的,你应该使用高偏置(例如,朴素贝叶斯)分类 。
我猜这是因为较高的偏分类器将具有较低的差异,这是因为数据量小的好。
湾 如果你有大量的数据,那么分类其实并不重要太多,因此,你应该只选择具有良好的扩展性分类。
什么是其他准则? 甚至像“如果你要解释你的模型,一些高层管理人员,那么也许你应该用决策树,因为决策规则是相当透明”的回答都不错。 我不在乎执行/库的问题,虽然。
此外,对于有些单独的问题,除了标准贝叶斯分类,是否有“标准的国家的最先进的”为垃圾评论的检测方法(而不是垃圾邮件)?
首先,你需要确定你的问题。 这取决于你有什么样的数据和您所需的任务是什么。
如果您Predicting Category
:
- 您已
Labeled Data
- 您需要按照
Classification Approach
和算法
- 你没有
Labeled Data
如果你是Predicting Quantity
:
除此以外
- 你可以去
Dimensionality Reduction Approach
有上面提到的每一种方法中不同的算法。 特定算法的选择取决于数据集的大小。
来源: http://scikit-learn.org/stable/tutorial/machine_learning_map/
型号选择使用交叉验证可能是你所需要的。
交叉验证
你要做的很简单,就是你的数据集分成K个不重叠的子集(倍),使用K-1倍训练模型,并使用你离开了羊栏预测其性能。 这对你的褶皱每个可能的组合做(先离开1折出,那么2,...,然后第k个,然后用剩下的褶皱训练)。 完成后,您估计所有折叠的平均业绩(业绩也许还方差/标准差)。
如何选择参数k取决于你有时间。 对于k通常值是3,5,10或甚至N,其中N是数据的大小(这是相同的留一法交叉验证 )。 我更喜欢5或10。
选型
比方说,你有5种方法(ANN,SVM,KNN等),并为每个方法(取决于法)10的参数组合。 你只需要运行为每个方法和参数的组合(5 * 10 = 50)交叉验证和选择最佳模型,方法和参数。 然后你再火车上的所有数据的最佳方法和参数,你有你的最终模型。
有一些更多的事情说了。 如果,例如,你用了很多的方法和参数的组合,每个,它很可能你会过度拟合。 在这样的情况下,你必须使用嵌套的交叉验证 。
嵌套交叉验证
在嵌套的交叉验证 ,在执行上的模型选择算法交叉验证。
同样,你先把你的数据分割成k倍。 每个步骤之后,你选择K-1作为你的训练数据,其余作为您的测试数据。 然后运行对那些ķ褶皱的每种可能组合模型选择(I上面所解释的过程)。 完成这个之后,你将有K型,一个褶皱的每个组合。 在这之后,你测试,其余测试数据的每个模型并选择最好的一个。 同样,有最后的模型之后,你培养一个新的与所有你拥有的数据相同的方法和参数。 这就是你的最终模型。
当然,也有这些方法和其他的东西我没有提到的许多变化。 如果您需要了解这些寻找有关这些主题的一些发布的详细信息。
这本书“OpenCV的 ”对这个在462-463页大两页。 搜索词亚马逊预览“歧视性”(可能是谷歌图书还)将让你看到有问题的网页。 这两页是我在这本书中找到的最大的宝石。
简而言之:
推进 -当大量的训练数据是可用的 往往是有效的 。
随机树 -往往非常有效 ,并且还可以进行回归 。
K-最近的邻居 -你可以做最简单的事情, 往往是有效的 ,但是进展缓慢 ,需要大量的内存 。
神经网络 - 慢训练 ,但速度非常快的运行 ,对于字母识别还是最佳的表演。
SVM - 其中最好的 数据有限 ,但失去对提升或仅在大型数据集可用随机树 。
由于安德鲁教授吴常说:总是通过实施粗糙,肮脏的算法开始,然后反复改进它 。
对于分类, 朴素贝叶斯是一个很好的入门,因为它具有良好的性能,是高度可扩展的,并且可以适应几乎任何类型分类的任务。 此外1NN(K最近只有1邻居邻居)是一个没有争议的最佳匹配算法(因为数据将是模型,因此你不必在意你的决策边界的维度配合),唯一的问题是计算成本(二次因为你需要计算距离矩阵,所以它可能不是一个很好的适合高维数据)。
另一个很好的起动算法是随机森林 (决策树组成),这是高度可扩展到任何数量的尺寸,并且具有通常完全可以接受的性能。 后来终于有遗传算法 ,其规模令人钦佩以及对任何尺寸,并与数据本身的最小的知识的任何数据,最最小,最简单的实现作为微生物的遗传算法 (只有一行C代码!通过英曼哈维1996年),和一个最复杂的是CMA-ES和MOGA /电子MOEA。
和记住这一点,往往,你不能真正知道什么工作最适合您的数据你试试算法真实之前。
作为一个侧面说明,如果你想有一个理论框架来测试你的假设和算法理论的演出对于一个给定的问题,您可以使用PAC(可能近似正确的)学习框架 (请注意:这是非常抽象和复杂的!),但综上所述,PAC学习的要点说,你应该使用更简单,但足够复杂(复杂之处在于算法中可以容纳的最大维度)的算法,可以适应您的数据。 换句话说,使用奥卡姆剃刀。
山姆Roweis 曾经说过 ,你应该尽量朴素贝叶斯,逻辑回归,k近邻和别的之前Fisher的线性判别。
我就可以走,就是你总是运行基本分类第一,让您的数据的一些感觉。 更多的往往不是(在我的经验,至少),他们已经足够好。
所以,如果你有监督的数据,训练朴素贝叶斯分类器。 如果你有监督的数据,你可以尝试的k-means聚类。
另一个资源是该系列影片的演讲视频之一斯坦福大学机器学习 ,我看了一会儿回来。 在视频4或5,我想,讲师训练的分类器,优点/权衡等时讨论了一些普遍接受的惯例
你应该始终保持兼顾推理VS预测权衡。
如果你想知道,在您的数据中出现的复杂关系,那么你应该具有丰富的推理算法(例如线性回归或套索)去。 在另一方面,如果你只对结果感兴趣,你可以以高尺寸和更复杂(但不解释)算法去,像神经网络。
算法的选择是根据场景和数据集的类型和尺寸。 还有许多其他因素。
这是基本的机器学习简短的小抄。
首先,这取决于你处理它是否分类或回归哪种类型的问题。 然后明智地选择你的模型。 这取决于跑赢其他车型特定模型中的一个特定的模式。 假设你是从sklearn图书馆工作wine_dataset和第一你试图用线性培养与核SVM的数据,你会得到某种形式的准确性,然后你认为这是不符合,那么你试着用DecisionTreeClassifier训练你的数据()然后你试着用RandomForestClassifier()。 之后无论准确度会更好,也可以说是适合你的数据,可以得出这样的结论。 有这么小的语法差别,你会发现,同时不断变化的模型进行测试。 因此,所有的最好和理解这个问题很好。