机器学习新手十大算法之旅
由ypyu创建,最终由ypyu 被浏览 327 用户
作者:James Le 编译:caoxiyang
在机器学习中,有一个叫做“世上没有免费午餐”的定理(NFL)。简而言之,我们无法找到一个放之四海而皆准的最优方案,这一点对于监督学习(即预测建模)尤为重要。例如,你不能说神经网络总是比决策树好,反之亦然。因为其中有很多因素在起作用,比如数据集的大小和结构。
因此,您应该针对您的问题尝试多种不同的算法,同时,保留一组数据,即“测试集”来评估性能并选择优胜者。
当然,您尝试的算法必须适合您的问题,所以需要选择正确的机器学习任务。打个比方,如果你需要打扫房子,你可能会用吸尘器、扫帚或拖把,但你不会拿出铲子开始挖掘。
大原则
在所有监督机器学习算法的基础上,有一个共同的原则。
机器学习算法被描述为学习一个目标函数(f),它最好地将输入变量(X)映射到输出变量(Y): Y = f(X)
这是一项通用的学习任务,即我们想在给出新的输入变量(X)后预测(Y),但我们不知道函数(f)是什么样子或者它的形式,不然我们就会直接使用它,而不需要使用机器学习算法从数据中学习了。
最常见的机器学习类型是学习映射Y = f(X)来为新的X做出Y的预测。这被称为预测建模或预测分析,我们的目标是使最准确的预测成为可能。
对于渴望了解机器学习基本原理的机器学习新手来说,这里有一个关于数据科学家使用的10种机器学习算法的鸟瞰。
1. 线性回归(Linear Regression)
线性回归可能是统计学和机器学习中最著名和最容易理解的算法之一。
预测建模主要关注的是最小化模型的误差,以牺牲可解释性为代价使最准确的预测成为可能。我们借鉴各种的领域的算法来处理统计数据以达到预测目的。
线性回归的表示是一个方程,它描述了一条线,通过寻找输入变量系数(B)的特定权重,拟合输入变量(x)和输出变量(y)之间的关系。
$例如:y = B0 + B1 * x$
我们将在给定输入x的情况下预测y,线性回归学习算法的目标是找到系数B0和B1的值。 可以使用不同的技术从数据中学习线性回归模型,如普通最小二乘的线性代数解和梯度下降优化。
线性回归已经有200多年的历史了,并被广泛研究。在使用此技术时,一些很好的经验法则是删除非常相似(相关)的变量,并尽可能从数据中删除噪声。这是一种快速简单的技术,也是一种很好的算法。
2. 逻辑回归(Logistic Regression)
逻辑回归是机器学习在统计学领域借鉴的另一种技术。它是二进制分类问题(具有两个类值的问题)的首选方法。
逻辑回归就像线性回归,目标是找到每个输入变量的系数的值。与线性回归不同的是,输出的预测是用一个叫做logistic函数的非线性函数进行转换。
逻辑函数看起来像一个大S,它会将任意值转换到0到1的范围。这很有用,因为我们可以将一个规则应用于逻辑函数的输出以将值压缩到0和1(例如IF小于0.5然后输出0)并预测一个类值。
由于模型的学习方式,逻辑回归的预测也可以作为属于0类或1类的给定数据实例的概率。这对于需要为预测提供概率解释的问题很有用。
与线性回归一样,当您删除与输出变量无关的属性以及彼此非常相似(相关)的属性时,逻辑回归确实更有效。这是一个快速有效地学习二分类问题的模型。
3. 线性判别分析(Linear Discriminant Analysis)
逻辑回归是一种传统上仅局限于两类分类问题的分类算法。如果你有两个以上的类,那么线性判别分析算法是首选的线性分类技术。
LDA的表示非常直接。它包括数据的统计属性,为每个类计算。对于单个输入变量,包括:
(1)每个类别的平均值。(2)每个类别的方差。
通过计算每个类的判别值,并对具有最大值的类进行预测。该技术假定数据具有高斯分布(钟形曲线),因此最好事先从数据中删除异常值。这是一种简单而有效的分类预测建模方法。
4. 分类和回归树(Classification and Regression Trees)
决策树是一种重要的预测建模算法。
决策树模型用二叉树来表示,二叉树来自于算法和数据结构。每个节点代表一个输入变量(x)和该变量上的分裂点(假设变量是数值)。
树的叶节点包含一个输出变量(y),用于进行预测。过程是遍历树的分叉直到到达叶节点并在该叶节点上输出类值。
树的学习速度很快,预测的速度也很快。它们通常适用于广泛的问题,不需要对数据进行任何特殊的准备。
5. 朴素贝叶斯(Naive Bayes)
朴素贝叶斯是一种简单但功能惊人的预测建模算法。
该模型由两种可以直接从训练数据中计算的概率组成: 1) 每个类的概率; 2) 给定每个x值后每个类的条件概率。 一旦计算出概率模型,就可以用贝叶斯定理对新数据进行预测。当你的数据是实值时,通常假设一个高斯分布(钟形曲线),这样你就可以很容易地估计这些概率。
朴素贝叶斯之所以称“朴素”,是因为它假设每个输入变量是独立的。这对于真实数据来说是一个很强的、不切实际的假设,然而,该技术对于大量复杂问题非常有效。
6. K近邻(k-Nearest Neighbor,kNN)
KNN算法非常简单和有效。通过对K个最相似的实例(邻居)对整个训练集进行搜索并汇总这些K个实例的输出变量,可以对一个新的数据点进行预测。对于回归问题,它可能是平均输出变量,对于分类问题,可能是模型(或最常见)类值。
关键在于如何确定数据实例之间的相似性。如果您的属性都具有相同的比例(例如,以英寸为单位),最简单的技术是使用欧几里得距离,您可以根据每个输入变量之间的差异直接计算该数字。
KNN可能需要大量内存或空间来存储所有数据,但只在需要预测时才进行计算(或学习)。您还可以随着时间的推移更新和策划您的训练实例,以保持预测准确。
当维数提高时,空间的体积提高得很快,因而可用数据变得很稀疏,这会对算法的性能产生负面影响。这被称为维度灾难。故建议您只使用那些与预测输出变量最相关的输入变量。
7. 学习矢量量化(Learning Vector Quantization,LVQ)
k近邻的一个缺点是您需要挂载整个训练数据集。学习向量量化算法(或简称LVQ)是一种人工神经网络算法,它允许您选择要挂载的训练实例。
LVQ的表示是一组码本向量(codebook vector),这些都是在开始时随机选择的,并根据学习算法的多次迭代对训练数据集进行最佳的总结。
在学习之后,码本向量可以用来做出像k近邻那样的预测。通过计算每个码本向量和新数据实例之间的距离,可以找到最相似的邻(最佳匹配的码本向量)。
然后返回最佳匹配单元的类值(或回归时的真实值)作为预测。如果您重新缩放数据,使其具有相同的范围(如0到1之间),则可获得最佳结果。
如果您发现KNN在您的数据集上表现良好,请尝试使用LVQ来减少存储整个训练数据集的内存需求。
8. 支持向量机(Support Vector Machines)
支持向量机可能是最流行和最受关注的机器学习算法之一。
超平面是分割输入变量空间的线。在SVM中,通过选择一个超平面,并根据输入变量空间中的类(类0或类1),来最好地分离输入变量空间中的点。
在二维中,你可以把它想象成一条直线,并假设所有的输入点都可以被这条直线分开。支持向量机学习算法通过超平面的方法,找出使得类间达到最佳分离的系数。
超平面与最近的数据点之间的距离称为边距,能够将两个类分离得最好的或最优的超平面是具有最大边距的那条线,它是由几个关键点决定的,这些点与定义超平面和构造分类器直接相关,被称为支持向量。
SVM可能是最强大的开箱即用分类器之一,非常值得在您的数据集中进行这样的尝试。
9. 装袋和随机森林(Bagging and Random Forest)
随机森林是最流行和最强大的机器学习算法之一。它是一种称为引导聚集算法(Bootstrap Aggregation)或套袋(bagging)的集成机器学习算法。
bootstrap是一种强大的统计方法,比如求平均值,您可以从数据样本中均匀有放回地取出一部分求平均值,然后把得到的平均值再求一个平均,这样可以更好地估计真实平均值。
在装袋(bagging)中,用到同样的方法,装袋法并不仅适用于决策树,但对决策树尤其有用,从训练数据中抽多个样本,然后为每个数据样本构建模型。当您需要对新数据进行预测时,每个模型都会进行预测,并对预测进行平均,以便更好地估计真实的输出值。
随机森林是这种方法的一个改进,在这种方法中,创建决策树,以便通过引入随机性来进行次优分割,而不是选择最佳分割点。
因此,为每个数据样本创建的模型与其他情况下的模型更加不同,但仍然精确。将预测结果结合起来,可以更好地估计潜在结果的真实值。
如果您使用具有高方差的算法(如决策树)得到不错的结果,那么您通过装袋算法通常可以得到更好的结果。
10. 提升和自适应增强(Boosting和AdaBoost)
boosting是一种集成技术,试图从多个弱分类器中创建强分类器。通过从训练数据构建一个模型,然后创建第二个模型试图纠正第一个模型中的错误。不断添加模型,直到训练集被完美地预测或者添加到最大数量。
AdaBoost是第一个为二分类开发的真正成功的提升算法。现代boosting方法建立在AdaBoost上,最著名的是随机梯度提升机(stochastic gradient boosting machines)。
AdaBoost用于短决策树。创建第一棵树之后,使用树在每个训练实例上的性能来得到一个权重,决定下一棵树对每个训练实例的注意力。
难以预测的训练数据被赋予更多权重,而易于预测的实例被赋予更少的权重。模型是一个接一个地顺序创建的,每个模型更新训练实例上的权重,这些权重影响序列中下一个树所执行的学习。构建完所有树之后,将对新数据进行预测。
因为着重于修正算法的错误,所以重要的是提前清洗好数据,去掉异常值。
最后
当一个初学者面对各种各样的机器学习算法时,一个典型的问题是“我应该使用哪种算法?”问题的答案因许多因素而异,包括:(1)数据的大小、质量和性质;(2)可用计算时间;(三)任务的紧迫性;(4)你想对数据做什么。
即使是经验丰富的数据科学家,在尝试不同的算法之前,也无法判断哪种算法的性能最好。虽然有许多其他的机器学习算法,但以上这些是最流行的。如果你是机器学习的新手,开始尝试以上的算法将是一个很好的起点。
原文链接:《A Tour of The Top 10 Algorithms for Machine Learning Newbies》