机器学习新手十大算法导览
原文:A Tour of The Top 10 Algorithms for Machine Learning Newbies
在机器学习中,有一种叫做“ 免费午餐(No Free Lunch
) ”的定理。 简而言之,它指出没有任何一种算法对每个问题都是最好的,这一点对有监督学习(supervised learning)(即预测建模,predictive modeling)尤其重要。
例如,你不能说神经网络(neural networks)总是比决策树(decision tree)好,反之亦然。 游戏中有许多因素,例如数据集的大小和结构。
因此,您应该针对您的问题尝试许多不同的算法,同时使用数据的“测试集(test set)”来评估性能并选择获胜者。
当然,你尝试的算法必须适合你的问题,这就是需要选择正确的机器学习任务的地方。作一个比喻,如果你需要清理你的房子,你可以使用真空吸尘器,扫帚或拖把,但你不会取出铲子并开始挖掘。
大原则
然而,对于预测建模(predictive modeling)的所有有监督机器学习(supervised machine learning)算法的基础之上有一个共同的原则。
机器学习算法被描述为学习得出目标函数(f),该目标函数将输入变量(X)最佳地映射到输出变量(Y): Y = f(X)
这是一个通用的学习任务,我们希望在给出输入变量(X)的新例子时能做出对未来(Y)的预测。 我们不知道函数(f)的外观或形式。 如果我们知道的话,我们会直接使用它,从而我们不需要使用机器学习算法从数据中学习它。
最常见的机器学习类型是学习映射Y = f(X),来预测新X对应的Y。这被称为预测建模( predictive modeling)或预测分析(predictive analytics),我们的目标是使最准确的预测成为可能。
对于渴望了解机器学习基础知识的机器学习新手,请浏览数据科学家使用的前10种机器学习算法。
1 - 线性回归(Linear Regression)
线性回归可能是统计学(statistics)和机器学习(machine learning)中最知名和最易理解的算法之一。
预测建模(Predictive modeling)主要关注最小化模型的误差或者做出最准确的预测,以可解释性为代价。 我们将从许多不同领域借用,重用和窃取算法,包括统计学(statistics)并将其用于这些目的。
线性回归的表示法是一个等式,通过找到输入变量的特定权重(称为系数(B))来描述的一条线,这条线最适合输入变量(x)与输出变量(y)之间关系。
Linear Regression例如:y = B0 + B1 * x
给定输入x,我们将预测y,线性回归学习算法的目标是找到系数B0和B1的值。
可以使用不同的技术从数据中学习线性回归模型,例如用于普通最小二乘(ordinary least squares)和梯度下降优化(gradient descent optimization)的线性代数解(linear algebra solution)。
线性回归已经存在了200多年,并且已经进行了广泛的研究。 使用这种技术时的一些经验法则是去除非常相似的变量(相关)并从数据中移除噪声,如果可能的话。 这是一种快速简单的技术,值得一试的第一种良好算法。
2 - 逻辑回归(Logistic Regression)
逻辑回归是机器学习从统计领域借鉴的另一种技术。 这是二进制分类问题(binary classification problems)的推荐方法(go-to method)(有两类值的问题)。
逻辑回归就像线性回归,因为目标是找出加权每个输入变量的系数值。 与线性回归不同,输出的预测(prediction for the output)使用称为逻辑函数(logistic function)的非线性函数进行变换。
逻辑函数看起来像一个大S,并将任何值转换为0到1的范围。这很有用,因为我们可以将规则应用于逻辑函数的输出以将值捕捉到0和1(例如,如果小于0.5,那么输出1)并预测类别值。
逻辑回归由于学习该模型的方式,通过逻辑回归所做的预测也可以用作给定数据实例的属于类0或类1的概率。这对于某些预测你需要给出更多基本原理(give more rationale)的问题很有用。
与线性回归一样,当您移除与输出变量无关的属性以及彼此非常相似(相关)的属性时,逻辑回归确实会更好。 这是一个快速学习的模型(fast model to learn)并且可以有效处理二元分类问题(effective on binary classification problems)。
3 - 线性判别分析(Linear Discriminant Analysis)
逻辑回归是传统上仅限于两类分类问题的分类算法。 如果你有两个以上的类别,那么线性判别分析算法是首选的线性分类技术。
LDA的表示非常简单。 它由您的数据的统计属性组成(statistical properties of your data),为每个类别计算(calculated for each class)。 对于单个输入变量,这包括:
- 每个类别的平均值。
- 计算所有类别的差异。
预测是通过计算每个类的识别值(calculating a discriminate value for each class)并对具有最大值的类进行预测(making a prediction for the class with the largest value)来进行的。 该技术假定数据具有高斯分布(Gaussian distribution)(钟形曲线,bell curve),因此最好先手动从数据中移除异常值。 这是一种分类预测建模问题(classification predictive modeling problems)的简单而强大的方法。
4 - 分类和回归树( Classification and Regression Trees)
决策树(Decision Trees)是预测建模机器学习(predictive modeling machine learning)的一种重要算法。
决策树模型的表示是二叉树。 这是来自算法和数据结构的二叉树,没什么特别。 每个节点代表单个输入变量(x)和该变量上的分裂点(split point)(假定变量是数字)。
Decision Tree树的叶节点包含用于进行预测的输出变量(y)。 预测是通过遍历树的分裂进行的(walking the splits of the tree),直到到达叶节点并输出该叶节点的类值。
树(Trees)学习速度快,预测速度快。 它们对于广泛的问题也经常是准确的,并且不需要为您的数据做任何特殊准备。
5 - 朴素贝叶斯(Naive Bayes)
朴素贝叶斯(Naive Bayes)是一种简单但令人惊讶的强大的预测建模算法。
该模型由两种类型的概率组成,可以直接从您的训练数据中计算出来:1)每个类别的概率(probability); 和2)给定每个x值的每个类别的条件概率(conditional probability)。 一旦计算出来,概率模型(probability model)就可以用于使用贝叶斯定理(Bayes Theorem)对新数据进行预测。 当您的数据是实数值(real-valued)时,通常假设高斯分布(Gaussian distribution)(钟形曲线,bell curve),以便您可以轻松估计这些概率。
Bayes Theorem朴素贝叶斯(Naive Bayes)被称为朴素(naive)的,因为它假设每个输入变量是独立的。 这是一个强有力的假设,对于真实数据是不切实际的,但是,该技术对于大范围的复杂问题非常有效。
6 - K最近的邻居( K-Nearest Neighbors)
KNN算法非常简单而且非常有效。 KNN的模型表示是整个训练数据集(entire training dataset)。 简单,对吧?
通过在整个训练集中搜索K个最相似的实例(searching through the entire training set for the K most similar instances)(邻居),并对这K个实例的输出变量进行汇总(summarizing the output variable for those K instances)来预测新的数据点。 对于回归问题(regression problems),这可能是平均输出变量(mean output variable),对于分类问题(classification problems),这可能是模式(或最常见的)类别值(mode (or most common) class value)。
诀窍在于如何确定数据实例之间的相似性(how to determine the similarity between the data instances)。 最简单的技术,如果你的属性都是相同的比例尺( all of the same scale)(例如全部以英寸为单位),则使用欧几里德距离(Euclidean distance),这个数字可以根据每个输入变量之间的差异直接计算。
K-Nearest NeighborsKNN可能需要大量的内存或空间来存储所有的数据,但只有在需要预测时才会执行计算(或学习)。 您还可以随时更新和管理您的训练实例(update and curate your training instances),以保持预测的准确性。
距离或贴近度的概念可能会在非常高的维度(大量输入变量)时分解(distance or closeness can break down in very high dimensions),这会对算法在您的问题上的性能产生负面影响。 这被称为维度的诅咒(curse of dimensionality)。 这就建议您只使用那些与预测输出变量最相关的输入变量(use those input variables that are most relevant to predicting the output variable)。
7 - 学习矢量量化(Learning Vector Quantization)
K-最近邻居的缺点是你需要依赖你的整个训练数据集(hang on to your entire training dataset)。 学习矢量量化(Learning Vector Quantization)算法(或简称LVQ)是一种人工神经网络算法(artificial neural network algorithm),允许您选择依赖多少个训练实例( choose how many training instances to hang onto)并准确了解这些实例的外观。
Learning Vector QuantizationLVQ的表示是码书向量的集合(collection of codebook vectors)。 这些是在开始时随机选择的,并且在学习算法的多次迭代中不断适配以最佳地总结训练数据集(adapted to best summarize the training dataset over a number of iterations of the learning algorithm)。 在学习之后,码书矢量(codebook vectors)可以用来进行像K-最近邻居一样的预测。 通过计算每个码书向量(codebook vector)与新数据实例之间的距离来找到最相似的邻居(最佳匹配码书向量,best matching codebook vector)。 然后返回最佳匹配单元的类别值或(在回归情况下的实际值)(class value or (real value in the case of regression) for the best matching unit)作为预测。 如果您将数据重新调整为具有相同范围(如0到1之间)(rescale your data to have the same range, such as between 0 and 1),则可以获得最佳结果。
如果您发现KNN在您的数据集上给出了很好的结果,请尝试使用LVQ来减少存储整个训练数据集的内存要求。
8 - 支持向量机(Support Vector Machines)
支持向量机(Support Vector Machines)也许是最受欢迎和讨论的机器学习算法之一。
超平面(hyperplane)是分割输入变量空间的线。 在SVM中,选择一个超平面(hyperplane)以最好地将输入变量空间中的点按其类别(0类或1类)进行分离。在二维中,可以将其视为一条线,让我们假设我们所有的输入点都可以被这条线完全分开。 SVM学习算法找到导致超平面对类的最佳分离的系数(finds the coefficients that results in the best separation of the classes by the hyperplane)。
Support Vector Machine超平面和最近的数据点之间的距离(distance between the hyperplane and the closest data points)被称为余量(margin)。 可以分离两个类的最佳或最优超平面是具有最大余量(margin)的线。 只有这些点与定义超平面和分类器的构造有关(relevant in defining the hyperplane and in the construction of the classifier)。 这些点被称为支持向量(support vectors)。 他们支持或定义超平面。 在实践中,使用优化算法来找到最大化余量的系数值(optimization algorithm is used to find the values for the coefficients that maximizes the margin)。
SVM可能是最强大的开箱即用分类器(out-of-the-box classifiers)之一,您的数据集值得尝试使用。
9 - 套袋和随机森林(Bagging and Random Forest)
随机森林(Random Forest)是最流行和最强大的机器学习算法之一。 它是一种称为Bootstrap Aggregation或Bagging的集成机器学习算法(ensemble machine learning algorithm)。
bootstrap是一个强大的统计方法,用于从数据样本中估计数量(statistical method for estimating a quantity from a data sample)。 如取平均值。 您需要抽取大量样本数据,计算平均值,然后平均所有平均值,以便更准确地估算真实平均值。
在套袋算法(Bagging)中,使用相同的方法,但不是用于估计整个统计模型,最常见的是决策树(instead for estimating entire statistical models, most commonly decision trees)。 对您的训练数据进行多重抽样,然后为每个数据样本构建模型。 当您需要对新数据进行预测时,每个模型都会进行预测,并对预测结果进行平均,以更好地估计真实的输出值。
Random Forest随机森林是对这种方法的一种调整,在这种方法中创建决策树,以便不是选择最佳分割点,而是通过引入随机性来实现次优分割(decision trees are created so that rather than selecting optimal split points, suboptimal splits are made by introducing randomness)。
因此,为每个数据样本创建的模型与其他情况相比会有所不同,但仍以其独特和不同的方式准确无误。 结合他们的预测可以更好地估计真实的潜在输出值。
如果使用高方差算法(algorithm with high variance)(如决策树)获得了良好结果,那么通常可以通过将该算法入袋(bagging that algorithm)来获得更好的结果。
10 - Boosting和AdaBoost(Boosting and AdaBoost)
Boosting是一种集成技术,试图从一些弱分类器中创建一个强分类器(create a strong classifier from a number of weak classifiers)。 这是通过从训练数据构建模型,然后创建第二个模型来尝试纠正第一个模型的错误。 增加模型,直到训练集被完美预测或增加到最大数量的模型。
AdaBoost是为二进制分类开发的第一个真正成功的Boosting算法(boosting algorithm)。 这是理解Boosting的最佳起点。 现代Boosting方法建立在AdaBoost上,最显著的是随机梯度增强机器(stochastic gradient boosting machines)。
AdaBoostAdaBoost与短决策树(short decision trees)一起使用。 在创建第一棵树之后,每个训练实例上的树的性能用于衡量创建的下一棵树应该关注每个训练实例的注意程度。 难以预测的训练数据被赋予更多的权重,而易于预测的实例被赋予更少的权重。 模型按顺序依次创建,每个模型更新训练实例的权重,影响由序列中下一棵树执行的学习(Models are created sequentially one after the other, each updating the weights on the training instances that affect the learning performed by the next tree in the sequence)。 在建立所有树之后,对新数据进行预测,并且通过训练数据的准确程度来加权每棵树的性能。
因为非常注意通过算法纠正错误(so much attention is put on correcting mistakes by the algorithm),所以干净的数据并删除异常值(you have clean data with outliers removed)非常重要。
最后的外送(Last Takeaway)
初学者在面对各种各样的机器学习算法时提出的一个典型问题是“我应该使用哪种算法?”问题的答案取决于许多因素,其中包括:(1)数据的大小,质量和性质; (2)可用的计算时间; (3)任务的紧迫性; 和(4)你想要对数据做什么。
即使是一位经验丰富的数据科学家,在尝试不同的算法之前,也无法知道哪种算法会表现最好。 虽然还有很多其他的机器学习算法,但这些算法是最受欢迎的算法。 如果你是机器学习的新手,这将是一个很好的学习起点。
网友评论