机器学习新手十大算法之旅!
在机器学习中,有一种叫做“没有免费的午餐”的定理。简而言之,它指出没有任何一种算法能够适用每一个问题,而且它对于监督式学习(即预测性建模)尤其重要。
例如,你不能说神经网络总是比决策树好,反之亦然。有很多因素在起作用,比如数据集的大小和结构。
因此,你应该为你的问题尝试许多不同的算法,同时使用数据的“测试集”来评估性能并选择胜出者。
当然,你尝试的算法必须适合你的问题,这就是选择正确的机器学习任务的地方。打一个比方,如果你需要清理你的房子,你可以使用真空吸尘器、扫帚或拖把,但是你不会用一个铲子来挖掘。
大的原则
然而,有一个共同的原则,即所有监督机器学习算法预测建模的基础。
机器学习算法被描述为学习一个目标函数,将输入变量(X)最佳映射到输出变量(Y)的目标函数(f):Y = f(X)
这是一个通用的学习任务,我们希望在未来(Y)给出预测输入变量(X)的新例子。我们不知道函数(f)是什么样子或是它的形式。如果这样做,我们会直接使用它,不需要使用机器学习算法从数据中学习它。
最常见的机器学习类型是学习映射Y = f(X)来预测新的X。这被称为预测建模或预测分析,我们的目标是使最准确的预测成为可能。
对于渴望了解机器学习基础知识的机器学习新手,请浏览数据科学家使用的前10位的机器学习算法。
1 - 线性回归
线性回归可能是统计学和机器学习中最知名和最易理解的算法之一。
预测建模主要关注最小化模型的误差或者以可解释性为代价来做出最准确的预测。我们将借用、重用和窃取包括统计数据在内的许多不同领域的算法,并将其用于这些目的。
线性回归的表示是一个方程,通过找到称为系数(B)的输入变量的特定权重来描述最适合输入变量(x)和输出变量(y)之间关系的线。
例如:y = B0 + B1 * x
给定输入x,我们将预测y,线性回归学习算法的目标是找到系数B0和B1的值。
可以使用不同的技术从数据中学习线性回归模型,例如用于普通最小二乘和梯度下降优化的线性代数解。
线性回归已经存在了200多年,并且已经被广泛研究。如果可能的话,使用这种技术的一些经验法则是去除非常相似的变量(相关),并从数据中去除噪声。这是一个快速和简单的技术,也是一个好的算法。
2 - Logistic回归
逻辑回归是机器学习从统计领域借鉴的另一种技术。这是二进制分类问题的首选方法(有两个类值的问题)。
逻辑回归就像线性回归,因为目标是找出加权每个输入变量的系数值。与线性回归不同,输出的预测使用称为逻辑函数的非线性函数进行变换。
逻辑函数看起来像一个大S,并将任何值转换为0到1的范围。这是有用的,因为我们可以将规则应用到逻辑函数的输出,将值捕设为0和1(例如,IF小于0.5,则输出1)并预测一个类别值。
由于模型的学习方式,逻辑回归的预测也可以作为一个给定数据实例的概率,属于第0类或第1类。这对于需要为预测提供更多理由的问题很有用。
像线性回归一样,逻辑回归在删除与输出变量无关的属性以及非常相似(相关)的属性时效果更好。对于二元分类问题,这是一个快速学习和且有效的二元分类问题的模型。
3 - 线性判别分析
Logistic回归是传统上仅限于两类分类问题的分类算法。如果你有两个以上的类,那么,线性判别分析算法是首选的线性分类技术。
LDA的表示非常简单。它由你的数据统计属性组成,为每个类别计算。对于单个输入变量,这包括:
·在所有类中计算的方差
·线性判别分析
预测是通过计算每个类别的识别值并对具有最大值的类别进行预测来进行的。该技术假定数据具有高斯分布(钟形曲线),因此在手之前从数据中移除异常值是个好主意。这是一个简单而强大的分类预测建模问题的方法。
4 - 分类和回归树
决策树是机器学习预测建模的重要算法。
决策树模型的表示是二叉树,来自算法和数据结构,没什么特别的。每个节点代表一个单独的输入变量(x)和该变量上的一个拆分点(假定变量是数值)。
树的叶节点包含用于进行预测的输出变量(y)。预测是通过遍历树的分裂进行的,直到到达叶节点并输出该叶节点的类值。
树的学习速度快,预测速度快。对于广泛的问题,它们也经常是准确的,不需要为你的数据做任何特别准备。
5 - 朴素贝叶斯
朴素贝叶斯是一个简单但又强大的预测建模算法。
该模型由两种概率组成,可以从你的训练数据中直接计算:1)每个类别的概率;和2)给定每个x值的每个类别的条件概率。一旦计算出来,就可以使用概率模型来使用贝叶斯定理对新数据进行预测。当你的数据是实值时,通常假定一个高斯分布(钟形曲线),这样你可以很容易地估计这些概率。
朴素贝叶斯假定每个输入变量是独立的,这是一个强大的假设,对于真实的数据是不切实际的,但是,这种技术在大范围的复杂问题上是非常有效的。
6-K-近邻算法
KNN算法非常简单而且非常有效。 KNN的模型表示是整个训练数据集,比较简单。
通过搜索K个最相似的实例(邻居)的整个训练集并且汇总这些K个实例的输出变量来预测新的数据点。对于回归问题,这可能是平均输出变量,对于分类问题,这可能是模式(或最常见的)类值。
诀窍在于如何确定数据实例之间的相似性。最简单的方法就是就是使用Euclidean距离,你可以根据每个输入变量之间的差异直接计算一个数字。
KNN可能需要大量的内存或空间来存储所有的数据,但是只有在需要预测时才会执行计算(或学习)。你也可以随时更新和管理你的训练实例,以保持预测的准确性。
距离或贴近度的概念可能在非常高的维度(大量的输入变量)中分解,这会对算法在你的问题上的性能产生负面影响。它建议你只使用那些与预测输出变量最相关的输入变量。
7 - 学习矢量量化
KNN的一个缺点是你需要坚持你的整个训练数据集,学习矢量量化算法(简称LVQ)是一种人工神经网络算法,可以让你选择多少个训练实例,并精确地学习这些实例应该是什么样的。
LVQ的表示是codebook vector的集合。这些在开始时是随机选择的,并且适合于在学习算法的多次迭代中最佳地总结训练数据集。在学习之后,codebook vector可以用来做如KNN一样的预测。通过计算每个codebook vector和新数据实例之间的距离来找到最相似的邻居(最佳匹配码本向量)。然后将最佳匹配单元的类别值或(在回归情况下的实际值)作为预测返回。如果你重新调整数据以使其具有相同的范围(如0和1之间),则可以获得最佳结果。
如果你发现KNN在你的数据集上给出了很好的结果,请尝试使用LVQ来减少存储整个训练数据集的内存要求。
8 - 支持向量机
支持向量机也许是最受欢迎和讨论的机器学习算法之一。
超平面是分割输入变量空间的线。在SVM中,选择一个超平面,以便通过它们的类(类0或类1)将输入变量空间中的点最好地分开。在二维中,可以将其视为一条线,让我们假设所有的输入点都可以被这条线完全分开。 SVM学习算法找到导致由超平面对类进行最佳分离的系数。
超平面和最近的数据点之间的距离被称为边界。可以分离两个类的最好或最优超平面是具有最大边界的直线。只有这些点与定义超平面和分类器的构造有关。这些点被称为支持向量,他们支持或定义超平面。在实践中,使用优化算法来找到最大化边界的系数的值。
支持向量机可能是最强大的现成分类器之一,值得在你的数据集上尝试。
9 - Bagging 和随机森林
随机森林是最流行和最强大的机器学习算法之一。它是一种称为Bootstrap Aggregation或Bagging的集成机器学习算法。
Bootstrap 是从数据样本中估算数量的一种强大的统计方法。你需要大量的数据样本、计算平均值,然后平均所有的平均值,以便更好地估计真实的平均值。
在Bagging 中,使用相同的方法,而是用于估计整个统计模型,最常见的是决策树。你的训练数据的多个样本被采取,然后为每个数据样本构建模型。当你需要对新数据进行预测时,每个模型都会进行预测,并对预测进行平均,以更好地估计真实的产出值。
随机森林是对这种方法的一种调整,在这种方法中创建决策树,而不是选择最佳分割点,通过引入随机性来进行次优分割。
因此,为每一个数据样本创建的模型比它们本来的样子更不一样,但是它们以其独特和不同的方式仍然是准确的。结合他们的预测可以更好地估计真实的潜在产出价值。
如果用高方差的算法(如决策树)获得较好的结果,那么通常可以通过bagging算法来获得更好的结果。
10 - 增强和AdaBoost
Boosting是一种集成技术,试图从一些弱分类器中创建一个强分类器。这是通过从训练数据构建模型,然后创建第二个模型来尝试纠正第一个模型的错误。添加模型,直到完美预测训练集或添加最大数量的模型。
AdaBoost是为二进制分类开发的第一个真正成功的增强算法。这是理解提升的最佳起点。现代的助推方法建立在AdaBoost上,最显著的是随机梯度提升机。
AdaBoost与短决策树一起使用。在创建第一棵树之后,使用每个训练实例上的树的性能来衡量所创建的下一棵树应该关注每个训练实例的注意力。难以预测的训练数据被赋予更多的权重,而易于预测的实例被赋予更少的权重。依次创建模型,每个模型更新影响由序列中下一棵树执行的学习的训练实例的权重。在建立所有树之后,对新数据进行预测,并且通过训练数据的精确度对每棵树的性能进行加权。
因为如此多的注意力放在了纠正算法的错误上,所以清除掉异常值的数据非常重要。
初学者在面对各种各样的机器学习算法时所提出的一个典型问题是“我应该使用哪种算法?”问题的答案取决于许多因素,包括:(1)数据的大小、质量和性质;(2)可用的计算时间; (3)任务的紧迫性; (4)你想要如何处理数据。
即使是一位经验丰富的数据科学家,在尝试不同的算法之前,也无法分辨哪种算法会表现最好。虽然还有很多其他的机器学习算法,但这些算法是最受欢迎的算法。如果你是机器学习的新手,这将是一个很好的学习起点。