来源:DeepNoMind
对于初学者来说,机器学习相当复杂,可能很容易迷失在细节的海洋里。本文通过将机器学习算法分为三个类别,梳理出一条相对清晰的路线,帮助初学者理解机器学习算法的基本原理,从而更高效地学习机器学习。原文: Machine Learning in Three Steps: How to Efficiently Learn It[1]
当有志于成为数据科学家的学习者试图学习机器学习算法时,通常会采用两种极端方法。第一种方法是学习并从头实现所有复杂算法,从而期待真正掌握这些算法。另一种方法假设计算机可以自己"学习",因此个人没有必要学习算法,从而导致一些人只依赖于诸如lazypredict之类的工具软件包。
在学习机器学习算法时,比较现实的是在这两个极端中间采取某种方法。不过还有问题,那就是从哪里开始呢?本文中我将把机器学习算法分为三类,并就从什么开始和可以跳过什么提供一些拙见。
由于可用算法众多,开始学习机器学习可能很快就会被压垮。线性回归(linear regression)、支持向量机(SVM, support vector machine)、梯度下降(gradient descent)、梯度增强(gradient boosting)、决策树(decision tree)、LASSO(Least Absolute Shrinkage and Selection Operator)、岭回归(ridge)、网格搜索(grid search)、等等,都是在提出这个问题时立马能够想到的一些算法。
在监督学习领域,这些算法有不同的目的和目标。本文只讨论监督学习。
为了更好地理解各种技术,根据其目标和复杂度级别进行分类是有帮助的。通过将这些算法组织成不同类别和复杂度,可以简化概念,使其更容易理解。这种方法可以极大增强人们对机器学习的理解,并帮助确定用于特定任务或目标的最合适的技术。
当学生深入研究机器学习领域时,可能会因为其复杂性而感到气馁。然而,在付诸实践之前,没有必要学习或熟悉所有算法。机器学习领域的不同职位可能需要不同熟练程度,在某些方面缺乏知识是可以接受的。例如,数据科学家、数据分析师、数据工程师和机器学习研究人员这些不同的角色有不同的要求。
对整个过程有广泛的理解可以使机器学习从业者在时间紧迫的情况下跳过某些技术细节,同时仍然理解整个过程。
1.1 模型、训练和调优
"机器学习算法"的范围相当广泛,可以分为三种主要类型的算法:
1.2 三类ML模型
第一种类型涉及能够接收数据并根据该数据生成预测的模型。这些模型可以分为三大类:
1.3 元模型和集成方法
在机器学习中,元模型(meta-model)是一种将多个个体模型的预测结果结合起来以获得更准确预测的模型,也被称为"堆叠模型(stacked model)"或"超级学习器(super learner)"。构成元模型的个体模型可以是不同类型的或使用不同算法,它们的预测结果可以通过加权平均或其他技术进行组合。
元模型的目标是通过减少个体模型可能存在的方差和偏差来提高预测的总体准确性和鲁棒性,并且通过捕捉数据中更复杂的模式来克服个体模型的局限性。
常见的创建元模型的方法是基于集成的方法,比如打包(bagging)、增强(boosting)或堆叠(stacking)。
集成方法最常应用于决策树,而非线性回归等线性模型。这是因为决策树比线性模型更容易出现过拟合,而集成方法通过组合多个模型有助于减少过拟合。
决策树有高方差和低偏差,意味着容易过度拟合训练数据,导致在新的、未见过的数据上表现不佳。集成方法通过聚合多个决策树的预测来解决这个问题,从而产生更健壮和准确的模型。
另一方面,线性模型(如线性回归)具有低方差和高偏差,意味着不太容易过度拟合,但可能造成欠拟合。集成方法对线性模型不那么有效,因为模型已经是低方差的,无法从聚合中获益。
然而,在某些情况下,集成方法仍然可以应用于线性模型。例如,Bagging中使用的自举聚合技术可以应用于任何类型模型,包括线性回归。在这种情况下,Bagging算法会对训练数据进行采样,并在自举样本上拟合多个线性回归模型,从而使模型更稳定、更具有鲁棒性。然而,值得注意的是,得到的模型仍然是线性回归模型,而不是元模型。
总的来说,虽然集成方法最常用于决策树,但在某些情况下,也可以与线性模型一起使用,重要的是要记住每种模型的优点和局限性,并为手头的问题选择合适的方法。
1.4 机器学习算法概述
下图提供了三类机器学习算法的摘要,本文后续部分将更深入研究每个类别。
机器学习算法概述
本节我们将仔细研究机器学习模型的三大类别:
(1) 基于距离的模型
基于距离的模型:KNN
贝叶斯分类:LDA, QDA
(2) 决策树模型
(3) 基于数学函数的模型
深度学习模型
2.1 基于距离的模型
第一类机器学习模型是基于距离的模型,这些模型利用数据点之间的距离进行预测。
最简单、最具代表性的模型是K近邻模型(KNN, K-Nearest Neighbors),可以计算新数据点与数据集中所有现有数据点之间的距离,然后选择K个最近的邻居,并将新数据点分配给K个邻居中最常见的类。
在检验K近邻(KNN)算法时,注意到在训练阶段没有建立显式模型。在KNN中,对新观测值的预测是通过在训练集中找到与该观测值最近的K个邻居,并取其目标值的平均值或多数投票来完成的。
与其他算法在训练期间将模型拟合到数据不同,KNN存储整个训练数据集,并简单地计算新观测值与现有数据集之间的距离来进行预测。因此,KNN可以被认为是一种"懒学习(lazy learning)"算法,在训练阶段不主动构建模型,并将决策过程推迟到推理时。
因此,推理/测试阶段可能很慢,可以用更有效的算法(如k-d树)进行优化。
2.2 贝叶斯分类
线性判别分析(LDA,Linear Discriminant Analysis) 和二次判别分析(QDA,Quadratic Discriminant Analysis) 都是基于距离的模型,利用马氏距离(Mahalanobis distance) 进行预测,马氏距离是点和分布之间距离的度量,因此考虑到了变量之间的相关性。
LDA假设不同类别的方差相同,而QDA假设每个类别的方差不同。这意味着LDA假设所有类别的协方差矩阵是相同的,而QDA允许每个类别有自己的协方差矩阵。
2.3 基于决策树的模型
第二种机器学习模型是基于决策树的模型,也被称为基于规则的模型(rule-based models)。这种模型生成一组规则,用来解释如何做出决策或预测。
决策树的每个分支代表一个规则或条件,用于确定接下来要遵循的数据子集。这些规则通常采用简单的if-then语句的形式,例如"如果变量X的值大于5,则遵循左分支,否则遵循右分支"。
决策树的最终叶节点表示的是基于输入变量值以及相关规则所做出的目标变量预测类/值。
决策树的优点是易于解释和理解,因为规则可以以清晰直观的方式可视化和解释,因此对于向非技术相关方解释预测或决策背后的原因非常有用。
然而,决策树也容易出现过拟合,当模型变得过于复杂,与训练数据拟合过于紧密时,就会出现过拟合,从而导致对新数据的泛化能力差。为了解决这个问题,通常将集成方法应用于决策树。
2.4 基于数学函数的模型
第三类机器学习模型是基于数学函数的模型,基于数学函数模拟输入变量和目标变量之间的关系。线性模型(如普通最小二乘(OLS,Ordinary Least Squares)回归、具有线性核的支持向量机(SVM,Support Vector Machines)、Ridge、LASSO)假设输入变量与目标变量之间的关系是线性的。非线性模型,如具有非线性核的支持向量机和神经网络,可以模拟输入变量和目标变量之间更复杂的关系。
对于基于数学函数的模型,如线性回归或逻辑回归,必须定义损失函数。损失函数衡量模型的预测与实际数据的匹配程度,目标是通过调整模型参数最小化损失函数。
相比之下,对于非数学函数为基础的模型(如KNN或决策树),不需要定义损失函数,而是通过不同的方法进行匹配,例如在KNN的情况下找到最近的邻居,或者在决策树的情况下根据特征值递归分割数据。
在基于数学函数的模型中,定义合适的损失函数至关重要,因为它决定了模型要解决的优化问题。可以根据手头问题使用不同的损失函数,例如回归问题的均方误差或二元分类问题的交叉熵。
值得注意的是,所有具有线性核的线性模型(如OLS、LASSO、Ridge、SVM等),都可以写成线性方程y = wX + b的形式。然而,这些模型之间的区别在于用于估计模型参数w和b的最优值的代价函数。
因此,虽然所有这些模型都可以以相同的数学函数的形式编写,但重要的是要注意选择的代价函数决定了模型的行为和性能,因此可以将它们视为具有不同代价函数的不同模型,而不是具有不同代价函数的同一模型。
非线性模型是解决复杂机器学习问题的强大工具,而线性模型无法充分解决这些问题。在实践中基本上有两种方法:核技巧(kernel trick)和神经网络。
核技巧是一种有效实现特征映射的方法,无需显式计算转换后的特征。相反,它定义核函数来计算转换后的特征空间中输入样本对之间的相似性。通过使用核函数,可以隐式地将输入数据映射到高维空间,在高维空间中可以更容易地分离和建模。
从这个意义上说,核部分可以看作是特征工程的一种形式,其中模型能够创建更适合手头任务的新特征。这与传统特征工程不一样,在传统特征工程中,人类专家根据领域知识和直觉手动创建新特征。
另一种创建非线性模型的方法是使用神经网络。它们由相互连接的节点或"神经元"层组成,每个节点对其输入执行简单的数学运算,并将结果传递给下一层。
神经网络强大的关键在于能够学习输入和输出之间复杂的非线性关系。这是通过在训练期间根据预测输出和实际输出之间的误差调整神经元之间连接的权重来实现的。
2.5 深度学习模型
深度学习的重点是通过多层结构来学习数据的表示。近年来,由于其在计算机视觉、自然语言处理和语音识别等应用中的广泛成功,变得越来越受欢迎。虽然深度学习模型有大量参数和层,实现相对复杂,但其特征工程也是其重要部分之一。
卷积神经网络(CNN,convolutional neural network)是深度学习模型的一个例子,其核心是对输入图像应用一系列滤波器,每个滤波器寻找特定的特征,如边缘或角,然后网络的下一层使用这些提取的特征对输入图像进行分类。
像CNN这样的深度学习模型可以被认为是特征工程和可训练模型的结合。该模型的特征工程涉及设计网络架构以从输入数据中提取有用的特征,而可训练模型涉及优化网络参数以拟合数据并做出准确的预测。
训练机器学习模型是通过向模型展示一组标记的示例来教模型做出预测或决策的过程。标记的示例,也称为训练数据,由成对的输入特征和输出标签组成。
在训练过程中,机器学习模型学习识别输入特征及其对应的输出标签中的模式。该模型使用特定算法从训练数据中学习并调整其内部参数,以提高对新数据的预测或分类能力。
一旦模型在标记的例子上进行了训练,就可以用来对新的、没见过的数据进行预测或决策,这个过程被称为推理或测试。
不同的机器学习模型有不同的训练算法,以下是不同机器学习模型使用的训练算法的一些示例。
3.1 基于距离的模型训练
KNN是一种不需要显式训练的非参数算法。它存储整个训练数据集,并用来预测新实例的标签,方法是根据一些距离度量在训练数据集中找到K个最接近的实例,然后根据K个最近邻居的多数投票进行预测。
LDA是一种用于分类任务的监督学习算法。LDA对每个类的输入特征的分布进行建模,并用该信息找到输入特征的线性组合,使类之间的分离最大化。得到的线性判别式可以用来对新实例进行分类。
LDA的训练过程包括估计每个类别的输入特征的均值和协方差矩阵,然后用这些估值来计算类内和类间散点矩阵,这些散点矩阵用于导出线性判别式,线性判别式的数量等于类的数量减一。
3.2 基于决策树的模型训练
至于决策树,通常用一种称为递归划分的方法进行训练。
递归分区从整个数据集开始,自上而下根据一组规则或条件将其分成子集。在每个子集上递归重复分割过程,直到满足停止条件(通常是当子集变得太小或进一步分割无法提高模型性能时)。
分割规则基于数据集特征或属性,算法在每一步中选择对模型性能改善最显著的特征。分割过程产生一个树状结构,其中内部节点表示分割条件,叶节点表示最终预测。
在训练过程中,可以使用各种度量来评估决策树,例如信息增益或基尼杂质(Gini impurity),以确定最佳分割标准。一旦训练好决策树,就可以根据输入特征从根节点找到适当的叶节点路径,对新的、未知的数据进行预测。
3.3 基于数学函数的模型训练
基于数学函数的模型,也称为参数模型,是为输入和输出之间的关系假设特定函数形式的模型。
用于优化基于数学函数的模型参数的最基本算法是梯度下降(gradient descent)。梯度下降是一种迭代优化算法,它首先对参数值进行初始猜测,然后根据损失函数相对于参数的梯度对参数值进行更新,持续这一过程直到算法收敛到损失函数最小为止。
对于非凸函数(non-convex functions),通常用随机梯度下降(SGD, stochastic gradient descent)来代替梯度下降,SGD在每次迭代时随机抽取一个数据子集来计算梯度,这种方法比梯度下降算法更快、更有效。
在神经网络中,反向传播(backpropagation)用于计算损失函数相对于参数的梯度。反向传播本质上就是将微积分的链式法则应用于由神经网络表示的复合函数,可以有效计算网络每层的梯度,对于训练深度神经网络必不可少。
对于深度学习模型,通常使用更高级的优化技术来提高性能,包括动量(momentum)和自适应学习率(adaptive learning rate)等技术,动量可以帮助算法避免陷入局部最小值,自适应学习率可以在训练过程中自动调整学习率,以提高收敛速度和稳定性。
综上所述,梯度下降是优化函数模型参数的基本算法。对于非凸函数,通常使用随机梯度下降法。反向传播用于计算神经网络中的梯度,此外还有其他更高级的技术用于深度学习模型。
机器学习的第三个方面包括通过使用网格搜索来优化模型的超参数(hyperparameters)。超参数是模型的设置或配置,这些设置或配置不是在训练过程中学习到的,而必须手动指定。
超参数的例子包括学习率、神经网络中隐藏层的数量以及正则化强度等,通过使用网格搜索,评估多个超参数组合,从而可以确定模型的最佳配置。
网格搜索是一种用于优化机器学习模型超参数的常用技术。然而,这并不是唯一可用的方法,还有其他几种可用于微调模型参数的替代方法,一些最流行的替代方案包括:
每种替代方法都有其优缺点,需要根据所处理的特定问题、参数空间大小和可用计算资源选择最佳方法。
现在我们对机器学习算法的不同类别有了大致了解,接下来探索一下为了创建有效的预测模型,需要学习什么。
5.1 算法太难学?
如果我们从一些乍一看可能很复杂的算法开始,就会觉得机器学习是个具有挑战性的领域。然而,通过将该过程分解为三个阶段(建模、拟合和调优),就能够获得更清晰的理解。
例如,学习支持向量机(SVM)对于数据科学家来说可能令人生畏,因为有大量的技术术语,如最优超平面(optimal hyperplane)、无约束最小化(unconstrained minimization)、对偶性(原始和对偶形式)、拉格朗日乘子(Lagrange multipliers)、Karush-Kuhn-Tucker条件、二次规划等等。然而,有必要将SVM只是理解为一个线性模型,和OLS回归类似,方程为y = wX + b。
虽然上面提到的各种技术可以被用来优化SVM,但重要的是不要陷入技术问题的泥潭,而是要关注SVM作为线性模型的基本概念。
5.2 了解模型
我们已经讨论了三种类型的机器学习算法——模型、拟合算法和调优算法。在我看来,对于数据科学家来说,重要的是将理解模型置于其他两个步骤之上。
从这个角度来看,将机器学习模型分为三种主要类型,从而有助于理解其功能:
基于距离的模型:在这种类型中,KNN不是一个合适的模型,因为新数据的距离是直接计算的,而在LDA或QDA中,是基于分布距离计算。
基于决策树的模型:决策树遵循if-else规则,形成一组可用于决策的规则。
基于数学函数的模型:可能不太容易理解,然而函数通常都很简单。
一旦对模型如何工作有了坚实的理解,就可以使用预先存在的包来进行拟合和调优:对于拟合,流行的scikit-learn库提供了model.fit方法。而对于调优,像Optuna这样的工具通过study.optimize提供了高效的学习优化技术。通过专注于理解模型本身,数据科学家可以更好地为自己在该领域的成功做好准备。
对于一些独立模型,如果采用这种方法,可以提升对其的理解,这里有一些例子:
10个最常见但最令人困惑的机器学习模型名称说明[3]这篇文章说明理解模型并不总是直截了当的。
5.3 模型可视化
在理解模型时,可视化是一个非常有用的工具。当使用机器学习模型时,使用简单的数据集创建可视化可以帮助说明模型是如何创建以及如何工作的。
下面一些文章涵盖的主题包括线性回归的可视化,也可以应用于ridge、lasso、SVM以及神经网络。
另一种方法是在Excel中实现模型,因为它可以提供一种可视化的方式来查看数据和模型的输出。
线性回归的可视化
不同特征尺度的KNN回归器
5.4 使用Excel了解拟合过程
一开始,了解拟合过程可能会让人望而生畏。但是,如果想要学习,那么首先要对模型的工作原理有一个坚实的理解。在这方面,一个特别有用的工具是微软Excel。
Excel是一个广泛使用的电子表格程序,可用于可视化和操作数据。在机器学习领域,可以用来演示拟合过程是如何工作的简单模型(如线性回归)。通过使用Excel,可以看到这个算法是如何一步步实现的。
要记住,虽然Excel可以是一种理解简单数据集的拟合过程的有效方法,但并不是机器学习最有效工具。
用Excel来理解拟合过程对于机器学习初学者来说是一个有用的工具,它提供了一种简单易用的方法来可视化算法并了解它们是如何工作的。
下面是几篇关于线性回归、逻辑回归和神经网络梯度下降的文章。
基于Excel的机器学习算法
5.5 使用简单数据集进行测试
为了全面理解机器学习算法,从头开始实现可能是一种有效方法,然而这种方法可能相当耗时,并且可能需要高水平的技术熟练度。另一种方法是使用预先训练好的包或库来使用简单的数据集创建和可视化模型的输出。
通过这些包,可以轻松试验不同参数并测试各种机器学习算法。这种方法可以帮助我们了解算法的内部工作原理,同时也使我们能够快速评估在特定数据集上的有效性。
通过使用这样的数据集,可以很容易可视化模型的输入和输出。反过来,也可以让我们更深入了解模型是如何进行预测的。此外,通过改变模型的超参数和其他方面,还可以可视化这些变化对模型预测的影响。
这种方法可以帮助初学者开始机器学习,并更好地理解不同算法的工作原理。这是一种获得实践经验和试验不同模型的极好方法,而无需在实现上花费太多时间。
总之,机器学习是一个复杂的领域。然而,了解三种主要类型的机器学习算法(模型、拟合算法和调优算法),并根据它们的目标和复杂性进行分类,可以帮助我们全面了解其工作原理。通过优先理解模型,将它们可视化,并在Excel等工具中实现,可以揭开拟合和调优过程的神秘面纱。
不断学习机器学习的不同方面至关重要,例如分类与回归、处理缺失值和变量权重,以不断加深对该领域的理解。如果想了解更多,请查看这篇文章: 监督机器学习算法概述[16]。
你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind
全部0条评论
快来发表一下你的评论吧 !