编者按:Medium博主James Le近日在网络上分享了他认为的最适合新手的机器学习算法,并授权论智进行编译。以下是我们对原文的编译,如有错误还请指出。
在机器学习界,有这样一个“没有免费午餐”的定理。简单地说,该理论认为,没有一种算法能解决所有问题,尤其对监督学习而言。
例如,你不能认为神经网络总比决策树要好,或决策树永远优于神经网络。这其中还有许多因素需要考虑,比如你的数据量大小和数据结构。
这样就导致我们在面对一个问题时需要尝试不同的算法,同时还要用测试的数据集来评估算法的性能,选出最合适的那一种。
当然,你所选的算法必须适合你的问题,就像当我们需要清理房子的时候,可以使用吸尘器、扫把或拖把,但不会用铲子来挖地。
然而,在为监督式机器学习创建预测模型之前,要记得一条最重要的原则:
机器学习算法可以看做学习一种目标函数(f),该函数是输入变量(X)到输出变量(Y)的完美映射:Y=f(X)
这是一个通用的学习任务,我们希望用新输入的变量(X)能输出预测变量(Y)。我们不知道函数(f)是什么样子的,或者什么形式的。如果我们知道的话就直接使用了,不需要再用机器学习算法从大量的数据中学习它。
最常见的机器学习类型是学习映射Y=f(X),用它来预测Y的值。这被称为预测建模或预测分析,我们的目标是做出最准确的预测。
对于想了解机器学习基础知识的新手,以下是数据科学家最常用的10种机器学习算法。
线性回归也许是数据科学和机器学习中最知名、最好理解的算法了吧。
预测建模主要关注的是,以可解释性为基础,将模型的误差降到最小并尽量作出最准确的预测。我们将借鉴、多次使用甚至“窃取”包括数据统计在内的多个不同领域的算法,从而达到这一目的。
线性回归用方程表示,通过找到作为输入变量的系数(B)的特定权重来描述输入变量(x)和输出变量(y)之间的一条线。
例如:y=B0 + B1*x
给定x的值,我们将预测y的值。同时线性回归学习算法的目标是找到系数B0和B1的值。
想从数据中建立线性回归模型,可以用不同的方法。例如用于最小二乘和梯度下降优化的线性代数。
线性回归已经存在了200多年,并被广泛研究。通常人们会去除非常相似或相关的变量,并从数据中去除噪声。对于新手来说,这是一个简单易上手的技术。
逻辑回归是机器学习从统计领域借鉴的另一个技术,这是二元分类问题的首选算法。
逻辑回归与线性回归类似的一点是,目标都是找出每个输入变量加权的系数值。不同的是,输出的预测结果需要用非线性的逻辑函数进行变换。
逻辑函数看起来像一个大写的S,它可以将任何值转化成一个0到1的数值。因此,我们可以将这一规则应用于逻辑函数的输出,将值限定在0到1之间(例如,IF less than 0.5 then output 1),这样就可以预测一个组值。
根据模型学习的方法,逻辑回归生成的预测也可以用作0到1之间的给定数据的概率。这对于需要给出更多原理做出预测的问题很有用。
像线性回归一样,逻辑回归在删除与输出变量无关的属性以及非常相似的属性之后,表现得效果更好。对于二元分类问题,这一模型很容易学习,并且效率也很高。
线性回归通常只适用于二元分类问题。如果类别超过两个,你可能就需要线性判别分析算法来解决分类问题了。
LDA的表示方法非常直接。它由数据的统计属性构成,为每个类别计算。对于单个输入变量,这包括:
每一类别的平均值; 计算所有类别的差异
通过计算每个类别的识别值(discriminate value)并对具有最大值的类别进行预测,从而做出最终的预测,该技术假定数据的分布遵循高斯分布(钟形曲线),因此在开始分析之前,需要移除数据中的异常值。对于分类预测建模问题来说,这是一种简单而强大的方法。
决策树是机器学习预测建模的重要算法。
决策树的模型是二叉树,这是利用算法和数据结构构建的二叉树,每个节点代表一个输入变量(x)和该变量上的一个分裂点(假定变量是数字)。
树叶的节点包含用于进行预测的输出变量(y)。预测是从树叉开始,直到到达树叶节点并输出该节点的组值。
决策树学习速度快,作出预测的速度也快。它们能解决许多领域的问题,所以无需对数据进行预处理。
朴素贝叶斯虽然简洁,但对预测建模来说是一种非常强大的算法。
该模型由两种类型的概率组成,可以从您的训练数据中直接计算:1)每个类别的概率;2) 给定每个x值的每个类别的条件概率。计算出来后,概率模型就能用贝叶斯定理对新数据进行预测。当你的数据是实值时,通常假设一个高斯分布,这样你可以很容易地预估这些概率。
朴素贝叶斯之所以被称为朴素,是因为它假定每个输入的变量都是独立的。这个假设对于真实的数据是不实际的,但是,这种技术在大范围复杂的问题上非常有效。
KNN算法也很简单有效。模型就是用整个训练数据集表示的,非常简单吧!
通过在整个数据集中搜索K个最相似的样本(邻居),将它们汇总后输出变量来预测新的数据点。对于回归问题,这可能是平均输出变量;对分类问题,这可能是类值的众数(最常见的值)。
重点在于如何确定数据样本之间的相似性。如果你的数据规模相同(例如都以英寸为单位),最简单的方法就是使用欧几里得距离,如果是数字,你可以直接根据每个输入变量之间的差异进行计算。
KNN可能需要大量内存或空间来存储所有的数据,但是只有在需要预测时才会工作(或学习)。您也可以随时更新和管理训练样本,以保证预测的准确性。
距离或紧密性可能会在有大量的输入变量时崩溃,这会导致算法性能下降,这被称为维度的诅咒。所以建议只使用那些与预测输出变量最相关的输入变量。
K-近邻算法的缺点之一是你需要利用整个数据集进行训练,而学习向量量化算法(LVQ)是一种人工神经网络算法,你可以选择训练样本,并学习这些样本应该是什么样的。
LVQ是由向量表的集合表示,这些在开始时是随机选择的,在学习过程中数次迭代后对训练数据集做出最佳总结。在学习之后,这些向量表可以用来做类似K-紧邻算法一样的预测。通过计算每个向量编码表和新数据样本之间的距离来找到最近邻居,然后返回最佳匹配单元的类值(或在回归情况下的实际值)作为预测。如果你重新调整数据使其具有相同的范围(如0到1之间),则可以获得最佳结果。
如果您发现KNN能在你的数据集上表现良好,可以尝试使用LVQ来减少存储整个数据集的内存要求。
支持向量机(SVM)也许是最受欢迎的机器学习算法之一。
超平面是分割输入变量空间的线。在SVM中,超平面能以最佳比例将输入变量空间的点以它们的类别分开。在二维空间中,你可以将其视为一条线,假设输入的所有点都可以被这条线完全分开。SVM学习算法可以找到能够被超平面完美分割类别的系数。
超平面和最近数据点之间的距离被称为间隔(margin)。能够将两类分开的最佳或最优的超平面往往是有最大间隔的线,只有这些点与超平面的定义和分类器的构造有关,这些点就是支持向量。它们支持或定义了超平面,在实践中,可以使用优化算法来找到最大化间隔的系数的值。
随机森林是目前最流行、最强大的机器学习算法之一,它是一种由Bootstrap或Bagging集成的机器学习算法。
Bootstrap是从数据样本中估算数量的强大的统计方法,就像一种平均值。你需要从你的数据中抽取大量样本,计算平均值,然后再计算所有平均值的平均值,从而更好地估计真实平均值。
在Bagging中,可以用上述相同的方法估计整个数据模型,最常见的是决策树。选取训练数据中的多个样本,然后构建模型。当你需要预测新数据时,每个模型都会做出预测,取平均值后以便更好地估计真实输出值。
随机森林是对以上方法的调整,在随机森林中,决策树是这样创建的,不选择最优分割点,而是通过引入随机性选择次优分割点。因此,针对每个数据样本创建的模型与其它方式相比会有所不同,但仍然非常精确,结合预测的值可以更好地估计真实的潜在输出价值。
如果较大方差的算法(如决策树)能获得较好结果,那么通常可以通过bagging获得更好的结果。
Boosting是一种集成技术,它试图从一些弱分类器中创建一个强分类器。通过从训练数据中构建模型,然后创建第二个模型来尝试纠正第一个模型的错误,直到模型能完美预测训练数据集或已经添加了大量模型后,才会停止创建模型。
AdaBoost是为二元分类问题开发的第一个真正成功的boosting算法,这可以帮助我们更好地理解boosting。现在大多boosting方法都建立在AdaBoost上,最出名的就是随机梯度上升。
AdaBoost与短决策树一起使用,在第一棵树创建之后,要使用每个训练样本上的树的性能衡量下一棵树应该对每个训练样本分配多少注意力。难以预测的训练数据被分配的权重高,易于预测的样本权重则少。依次创建模型后,每个模型都会在训练样本上更新权重。所有树在建立之后,将会对新数据进行预测,每棵树的性能由它们在训练数据上的表现进行权衡。
由于大量的注意力都放在了纠正算法的错误上,所以清除异常数据是非常重要的。
初学者在面对各种各样机器学习算法时最常问的问题是:“我该使用那种算法?”回答这一问题要考虑许多因素,包括数据的尺寸、质量和性质、可用的计算时间、任务的紧迫性以及你想用数据做什么。
即使是一位经验丰富的数据科学家,他也无法凭空判断哪种算法表现得最好,一定是要尝试之后才能下结论。除了上述10种算法外,还有其他很多机器学习算法,如果你是新手的话,这篇文章可以作为你的入门教程。
原文地址:https://towardsdatascience.com/a-tour-of-the-top-10-algorithms-for-machine-learning-newbies-dde4edffae11