机器学习涉及使用算法从历史数据中学习和泛化,以便对新数据做出预测。
这个问题可以描述为逼近一个将输入样本映射到输出样本的函数。逼近函数可以通过将问题构建为函数优化来解决。在这里,机器学习算法定义了一个参数化映射函数(例如,输入的加权和),并使用优化算法来查找最小化函数在将输入映射到输出时的误差的参数(例如,模型系数)的值。
这意味着,每次我们在训练数据集上拟合机器学习算法时,我们都在解决一个优化问题。
在本教程中,您将发现优化在机器学习中的核心作用。
完成本教程后,您将了解:
- 机器学习算法执行函数逼近,该问题通过函数优化来解决。
- 函数优化是我们拟合机器学习算法时最小化误差、成本或损失的原因。
- 在预测建模项目中,优化也在数据准备、超参数调优和模型选择过程中进行。
启动您的项目,阅读我的新书《机器学习优化》,其中包含分步教程和所有示例的Python源代码文件。
让我们开始吧。
为什么优化在机器学习中很重要
图片来源:Marco Verch,部分权利保留。
教程概述
本教程分为三个部分;它们是:
- 机器学习与优化
- 学习即优化
- 机器学习项目中的优化
- 数据准备即优化
- 超参数调优即优化
- 模型选择即优化
机器学习与优化
函数优化是指找到目标目标函数的输入集合,从而使函数达到最小或最大的问题。
这可能是一个具有挑战性的问题,因为函数可能具有数十、数百、数千甚至数百万个输入,并且函数的结构是未知的,并且通常是不可微分和噪声的。
- 函数优化:找到使目标函数最小或最大的输入集合。
机器学习可以被描述为函数逼近。也就是说,从输入样本的示例中逼近未知的底层函数以输出,以便对新数据进行预测。
这可能具有挑战性,因为我们从中逼近函数的示例数量通常有限,并且被逼近函数的结构通常是非线性的、有噪声的,甚至可能包含矛盾。
- 函数逼近:从特定示例泛化到可重用的映射函数,用于对新示例进行预测。
函数优化通常比函数逼近简单。
重要的是,在机器学习中,我们经常通过函数优化来解决函数逼近问题。
几乎所有机器学习算法的核心都是优化算法。
此外,处理预测建模问题过程涉及多个步骤的优化,除了学习模型之外,还包括:
- 选择模型的超参数。
- 选择在建模之前应用于数据的变换
- 选择建模管道作为最终模型。
既然我们知道优化在机器学习中起着核心作用,那么让我们看一些学习算法的例子以及它们如何使用优化。
想要开始学习优化算法吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
学习即优化
预测建模问题涉及从输入示例进行预测。
在回归问题中必须预测一个数值量,而在分类问题中必须预测一个类标签。
预测建模问题非常具有挑战性,以至于我们无法编写代码来做出预测。相反,我们必须使用应用于历史数据的学习算法来学习一个名为“预测模型”的“程序”,我们可以用它来预测新数据。
在统计学习(机器学习的统计视角)中,该问题被构建为给定输入数据(X)和相关输出数据(y)的示例来学习映射函数(f)。
- y = f(X)
给定新的输入示例(Xhat),我们必须使用我们学习的函数(fhat)将每个示例映射到预期的输出值(yhat)。
- yhat = fhat(Xhat)
学习到的映射将是不完美的。没有模型是完美的,考虑到问题的难度、观测数据的噪声以及学习算法的选择,预计会存在一些预测错误。
在数学上,学习算法通过解决函数优化问题来解决逼近映射函数的问题。
具体来说,给定输入和输出的示例,找到映射函数的输入集合,从而最小化损失、成本或预测误差。
映射函数的选择越有偏见或受约束,优化就越容易解决。
让我们看一些例子来阐明这一点。
线性回归(用于回归问题)是一个高度约束的模型,可以使用线性代数解析求解。映射函数的输入是模型的系数。
我们可以使用优化算法,例如准牛顿局部搜索算法,但这几乎总是比解析解效率低。
- 线性回归:函数输入是模型系数,优化问题可以通过解析方法解决。
逻辑回归(用于分类问题)的约束略少,必须作为优化问题来解决,尽管鉴于模型施加的约束,所解决的优化函数的结构是已知的。
这意味着可以使用准牛顿方法等局部搜索算法。我们可以使用随机梯度下降等全局搜索,但这几乎总是效率较低。
- 逻辑回归:函数输入是模型系数,优化问题需要迭代局部搜索算法。
神经网络模型是一个非常灵活的学习算法,施加的约束很少。映射函数的输入是网络权重。由于搜索空间是多模态且高度非线性的,因此无法使用局部搜索算法;相反,必须使用全局搜索算法。
通常使用全局优化算法,特别是随机梯度下降,并且更新方式会考虑到模型的结构(反向传播和链式法则)。我们可以使用对模型结构不敏感的全局搜索算法,例如遗传算法,但这几乎总是效率较低。
- 神经网络:函数输入是模型权重,优化问题需要迭代全局搜索算法。
我们可以看到,每种算法对映射函数的形式都做出不同的假设,这会影响需要解决的优化问题的类型。
我们还可以看到,每种机器学习算法使用的默认优化算法并非随意选择;它代表了解决算法所构建的特定优化问题的最有效算法,例如神经网络的随机梯度下降而不是遗传算法。偏离这些默认设置需要有充分的理由。
并非所有机器学习算法都解决优化问题。一个值得注意的例子是 k-最近邻算法,它存储训练数据集,并对每个新示例进行 k 次最佳匹配查找,以便进行预测。
既然我们熟悉机器学习算法中的学习即优化,那么让我们看看机器学习项目中优化的一些相关示例。
机器学习项目中的优化
优化在机器学习项目中的作用很重要,除了在训练数据集上拟合学习算法之外。
在拟合模型之前准备数据的步骤和调整所选模型的步骤也可以构建为优化问题。事实上,整个预测建模项目可以被视为一个大型优化问题。
让我们逐一仔细看看这些情况。
数据准备即优化
数据准备涉及将原始数据转换为最适合学习算法的格式。
这可能包括缩放值、处理缺失值和更改变量的概率分布。
可以进行变换以改变历史数据的表示形式,以满足特定学习算法的期望或要求。然而,有时当期望被违反或对数据执行不相关的变换时,可以获得良好或最佳的结果。
我们可以将选择应用于训练数据的变换视为一个搜索或优化问题,以最好地将数据的未知底层结构暴露给学习算法。
- 数据准备:函数输入是变换序列,优化问题需要迭代全局搜索算法。
此优化问题通常通过手动试错进行。尽管如此,使用全局优化算法可以自动化此任务,其中函数的输入是应用于训练数据的变换的类型和顺序。
数据变换的数量和排列通常非常有限,可以对常用序列进行穷举搜索或网格搜索。
欲了解更多关于此主题的信息,请参阅教程
超参数调优即优化
机器学习算法具有可以配置以根据特定数据集定制算法的超参数。
尽管许多超参数的动态是已知的,但它们对给定数据集上模型性能的具体影响是未知的。因此,测试所选机器学习算法的关键算法超参数的一系列值是一种标准做法。
这被称为超参数调优或超参数优化。
为此目的,通常使用朴素优化算法,例如随机搜索算法或网格搜索算法。
- 超参数调优:函数输入是算法超参数,优化问题需要迭代全局搜索算法。
欲了解更多关于此主题的信息,请参阅教程
尽管如此,为该优化问题使用迭代全局搜索算法正变得越来越普遍。一个受欢迎的选择是贝叶斯优化算法,它能够同时使用代理函数逼近正在优化的目标函数,同时对其进行优化。
这是可取的,因为评估单个模型超参数组合是昂贵的,需要使用一种或多种方法将模型拟合到整个训练数据集,具体取决于模型评估程序的选择(例如,重复 k 折交叉验证)。
欲了解更多关于此主题的信息,请参阅教程
模型选择即优化
模型选择涉及从众多候选机器学习模型中为预测建模问题选择一个。
实际上,它涉及选择产生模型的机器学习算法或机器学习管道。然后,该模型用于训练最终模型,然后可以在所需的应用程序中使用该最终模型对新数据进行预测。
这个模型选择过程通常是机器学习从业者手动执行的过程,涉及准备数据、评估候选模型、调整性能良好的模型以及最终选择最终模型等任务。
这可以构建为一个优化问题,该问题包含预测建模项目的一部分或全部。
- 模型选择:函数输入是数据变换、机器学习算法和算法超参数;优化问题需要迭代全局搜索算法。
随着自动化机器学习 (AutoML) 算法越来越多地用于选择算法、算法和超参数,或数据准备、算法和超参数,用户的干预非常少。
有关 AutoML 的更多信息,请参阅教程
与超参数调优类似,通常使用也逼近目标函数的全局搜索算法,例如贝叶斯优化,因为每个函数评估都是昂贵的。
这种机器学习的自动化优化方法也是现代机器学习即服务 (MLaaS) 产品的基础,由 Google、Microsoft 和 Amazon 等公司提供。
尽管这些方法快速高效,但它们仍然无法超越像机器学习竞赛参与者那样的高度熟练专家的手工模型。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
教程
- 将应用机器学习作为一个搜索问题的简明介绍
- 如何对数据准备技术进行网格搜索
- 使用随机搜索和网格搜索进行超参数优化
- 如何在 Python 中从零开始实现贝叶斯优化
- Python 的自动化机器学习 (AutoML) 库
文章
总结
在本教程中,您发现了优化在机器学习中的核心作用。
具体来说,你学到了:
- 机器学习算法执行函数逼近,该问题通过函数优化来解决。
- 函数优化是我们拟合机器学习算法时最小化误差、成本或损失的原因。
- 在预测建模项目中,优化也在数据准备、超参数调优和模型选择过程中进行。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
嗨,Jason,
我不会具体问主题,但你能帮我吗?我们能否跟踪数据库表中进行的更改,以及我们能否通过机器学习从记录的更改中推断出什么?
提前感谢
我认为这是现代数据库的一个功能,例如跟踪更改/日志记录。
ML 测试数据集中的测试集误差是什么?可接受的测试集误差值的范围是多少?
这是对未用于训练的数据进行模型评估。
良好的分数优于同一数据集上的朴素模型
https://machinelearning.org.cn/faq/single-faq/how-to-know-if-a-model-has-good-performance
这是我见过解释 ML 本质的最好的文章。谢谢 Jason。
谢谢!
谢谢你
那非常有帮助。
不客气。
您是否愿意扩展您对使用遗传算法作为 ML 超启发式方法解决时间表安排问题的指导和帮助? 指导。
感谢您的建议,也许将来会考虑。
关于机器学习优化需求重要性的精彩文章。