本文旨在介绍什么是回归问题,处理这类问题的基本思路和步骤,以及如何利用机器学习模型解决回归问题,特别是通过线性模型来实现。
作者:莫凡
来源:华章科技
本文将介绍机器学习算法,我们将从线性回归(Linear Regression)开始探讨。
许多机器学习教材习惯一开始就深入讲解算法细节,这样做固然有其优点,但在学习新技术时,我更倾向于遵循“是什么”、“为什么”和“怎么做”的三步曲。如果我们之前没有接触过机器学习,首先需要弄清楚的是“机器学习是什么”。
因此,我们从线性回归算法开始。线性回归不仅结构简单、易于理解,而且包含了许多机器学习算法的核心特征,便于全面了解机器学习算法的工作原理。对于初学者来说,线性回归是机器学习算法的良好入门选择。
学习新技术时,常常面临这样的矛盾:技术太复杂可能会让人望而却步,技术太简单又可能让人觉得过时。然而,线性回归并不是这种情况。它不仅在当下仍具有很高的实用价值,而且在很多实际场景中仍然发挥着重要作用。线性回归模型小巧而全面,非常适合分析和应用。
让我们从“线性回归”这个术语入手。在学习机器学习的过程中,经常会遇到一些令人困惑的术语,“线性回归”就是其中之一。初次接触时,很多人可能不清楚如何拆分这个词语。其实,“线性”指的是一类模型,称为“线性模型”;“回归”则是处理一类问题,称为“回归问题”。因此,“线性回归”可以理解为使用线性模型来解决回归问题。
线性模型和回归问题并不是一开始就设计好的一对组合。回归问题是机器学习中非常经典的一类问题,有许多方法都可以用来解决。除了回归问题,这些方法还可以应用于其他问题,例如分类问题。总的来说,问题和模型之间存在多对多的关系。遇到合适的模型和问题时,两者才能形成有效的配合。
不用担心接下来会遇到复杂的术语。机器学习并非凭空产生,回归问题实际上是从统计学中借用的概念。
大约两百年前,统计学家高尔顿在研究父子身高的关系时,发现了一个“趋中效应”:如果父亲的身高高于平均水平,儿子的身高有更大的概率低于父亲。这个现象被称为“回归”,因此“回归”一词由此而来。
在回归分析中,事物的发展趋势并不是单一的上升或下降,而是围绕均值波动。有时会跌入低谷,但也会逐渐回升;有时会处于高峰,但也可能会遇到困难。从这个角度来看,回归问题更像是一个哲学问题。
那么,什么是回归问题呢?回归问题有很多具体的例子,比如根据历史天气数据预测明天的温度、根据历史股市数据预测股票走势、根据历史数据预测某篇文章的点击率等,这些都是回归问题。正因为回归问题与日常生活密切相关,所以它是机器学习中常见的一类问题。
回归问题具有独特结构,其中一个显著特点是历史数据和未来预测。历史数据和预测未来是回归问题的两个关键特征。
在机器学习中,回归问题和分类问题都属于有监督学习,且在数据形式上非常相似。那么,如何区分一个问题到底是回归问题还是分类问题呢?
回归问题和分类问题的主要区别在于预测结果。根据预测结果的不同,预测结果可以分为连续值和离散值。如果是连续值,那么这就是一个回归问题。
连续值并不是简单的描述词,它有着严格的数学定义。不过,我们可以简单地理解为时间就是连续的,连续型数值在编程中通常用整数和浮点数表示。图3-1展示了连续型数据的示例。 [align=center][attach]293266[/attach][/align]
相比之下,离散值的最大特点是缺少中间过渡值,因此会出现“跳跃”的现象,例如“是”和“否”,通常用布尔类型表示。图3-2展示了离散型数据的示例。 [align=center][attach]293268[/attach][/align]
回归问题是指预测连续值的问题,而满足这种要求的数学模型称为回归模型。我们将要介绍的线性回归就是其中的一种。许多教材在介绍回归模型时,往往直接进入具体算法,而忽略了对初学者的一个重要问题:为什么回归模型可以进行预测?这个问题虽然看似显而易见,但实际上并不是那么简单。
人们对于“预测”的第一印象可能是某个传说故事:两个高人结伴出行,早上在破庙休息时,一个对另一个说:“睡觉别靠墙,我刚刚算出寅时墙会倒。”另一个不以为然地摆摆手:“我也算了一下,墙会倒向左边,我靠左睡应该没问题。”
故事中的高人可能看的是《奇门遁甲》,而不是《机器学习》。奇门遁甲不在本书讨论范围内,那么机器学习的回归模型能否进行精准预测呢?
答案是可以的,但前提是需要足够的历史数据。数据的重要性无论如何强调都不为过。如果把机器学习算法比作一台机器,那么数据就是驱动这台机器的燃料,没有燃料,再精巧的设计也只能是摆设。
我们不是要预测未来吗?为什么又要强调历史数据的重要性呢?这涉及到哲学问题。可以认为世界是一个相互联系的整体,或者说可以把预测看作一次侦探小说中的推理过程。犯罪行为总是会留下痕迹,只要找到相关的线索,就能推理出结果。
当然,预测难点在于待预测对象与什么相关是未知的。但是,这些关系通常隐藏在历史数据中,需要通过机器学习算法将其挖掘出来。机器学习算法并不创造关系,只是发现和利用这些关系。有一种观点认为,机器学习并不是神秘的技术,从数学角度看,它只是对输入数据点的拟合。
机器学习完成预测的流程包括以下几个步骤: 1. 收集数据。 2. 构建模型。 3. 训练模型。 4. 使用模型进行预测。
我们可以通过前面提到的两个高人的故事来说明墙体倒塌的问题。墙体倒塌可能由许多偶然因素引起。虽然我们不是土木专家,但可以凭感觉列出可能导致墙体倒塌的因素,如墙体材料、使用时间、承建商质量、外部环境因素等。这些因素可以分为与倒塌密切相关、有些关系和完全没有关系三种情况。如果人工进行预测,最重要的是找出哪些因素与倒塌密切相关,哪些因素有一定关系,哪些因素无关。
为了找出这些关系,我们可以制作一张调查表,记录墙体材料、使用时间、出现裂缝等情况。这就是数据集中每一条样本数据的维度。就像商家了解用户偏好一样,我们通过调查表了解墙体倒塌的偏好。
调查表的大致形式如下表所示。 [align=center][attach]293269[/attach][/align]
最后一栏是“倒塌概率”,这是我们最关心的。这些已知的概率和相关维度数据将为预测提供重要依据。
最关键的是找出各个维度与倒塌之间的关系,这个步骤将由模型自动完成。
我们需要做的只是将历史数据输入回归模型,模型会通过统计方法寻找墙体倒塌的相关关系,判断使用时间和承建商选择哪个更重要。这个过程称为训练模型,从数学角度看,就是通过调整模型参数来拟合数据。如何调整参数来拟合数据是每款机器学习模型都需要考虑的问题。
训练完成后,将要预测的墙体状况按数据维度填好,回归模型就能给出预测结果。流程如图3-3所示。 [align=center][attach]293270[/attach][/align]
可以看出,回归模型是预测的关键,通过给模型“喂”数据来训练它,使其具备预测能力。也许你对“模型”这个词感到陌生又好奇,不知道该如何想象。而图3-3的“模型”是一个大大的四方盒子,输入数据就能得到预测结果,像是奇幻故事中的水晶球。
不必担心,“模型”这个词将在我们对机器学习的整个探索过程中贯穿始终,就像庆典游行中的花车等待我们一一欣赏。接下来要介绍的第一款模型就是线性模型。
也许你对名为“模型”的大盒子充满期待,同时也担心会遇到一堆数学符号,因此不敢立即揭开谜底。不过,线性模型更像是一个过度包装的大礼盒,打开一看,里面只有唯一的东西:线性方程。第一次接触时,各种名词很容易让人感到困惑,但不必着急,我们先梳理一下名词之间的关系。
在介绍机器学习基本原理时,提到了“假设函数”这个术语。假设函数是一类函数,其作用是进行预测。线性方程就是线性回归模型的假设函数。
虽然名字听起来高冷,但实际上非常简单。“线性”意味着像直线那样,例如线性增长就是像直线那样增长。我们知道,直线是最简单的几何图形,而线性方程就是能画出直线的一种方程。如果方程有性格,那么线性方程一定是“直男”的典型代表。
直线方程最大的特点是“耿直”,从头到尾都是直来直去,函数图像如图3-4所示。 [align=center][attach]293271[/attach][/align]
这看起来没什么特别,但对比一下常见的以2为底数的对数函数(图3-5a)和指数函数(图3-5b),可以看出其他函数或多或少都有些弯曲,这是变化不均匀造成的。相比之下,直线方程始终是直线。
直线方程通常写成y=kx+b的形式,k称为斜率,b称为截距。这两个参数可以看作重要的调节器,直接控制直线的旋转和平移动作。具体来说,通过调整斜率,可以改变直线的角度。 [align=center][attach]293272[/attach][/align]
在图3-6的四幅图中,直线具有相同的截距,但斜率不同。通过改变斜率,可以看到直线发生旋转的效果。 [align=center][attach]293273[/attach][/align]
直线还可以通过调整截距来上下平移。如图3-7所示,这三条平行直线具有相同的斜率,但截距不同,可以看到直线发生了上下平移的效果。 [align=center][attach]293274[/attach][/align]
“旋转”和“平移”是直线的全部技能,这体现了线性方程简单直率的“直男”本性。
准确地说,线性方程和直线方程还是有些区别的。直线是二维平面图形,而线性方程可以在多维空间中应用。不过,无论是二维平面还是多维空间,直线所能做的仍然是“旋转”和“平移”两种动作,线性模型想要拟合数据,主要依靠的就是这两种动作。
在机器学习中,斜率k通常用字母w表示,是权值(weight)的首字母。通过调整w和b的值,可以控制直线在多维空间中的旋转和平移,就像老式收音机上的旋钮,通过旋转旋钮可以选择想要的电台。
这个通过调整权值来实现目标的过程称为权值调整或权值更新。对于线性模型,学习过程的主要工作就是权值调整。通过合理搭配旋转和平移,可以完成对输入数据的拟合,从而解决回归问题。 [align=center][attach]293275[/attach][/align]
在前面我们介绍了什么是回归问题,并直观感受到了线性方程的“直男”本性。接下来,我们将直接回答为什么模型可以进行预测。尽管学术界对此尚未达成一致意见,但这里采用一种当前较为广泛接受的观点。
到目前为止,我们还不能完全理解这个世界,但现实世界基本上遵循着某种规律,我们称之为“奥秘方程”。在机器学习领域,我们通过历史数据训练模型,希望模型尽可能地拟合“奥秘方程”。一旦掌握了“奥秘方程”,还有什么剧情不能预测呢?
不过,这里有一个问题需要注意。
以线性模型为例,线性模型是用直线方程来拟合数据的,但直线毕竟是“钢铁直男”,它的动作也只有旋转和平移。模型的能力有限,如果拟合能力不足,即使想尽量拟合也无法做到。
因此,选择模型的关键不在于模型的复杂程度,而在于数据分布。虽然线性模型简单易懂,也非常适合入门,但唯一的缺点是它太简单了,面对复杂的世界,它真的能解决问题吗?
要知道,尺有所短,寸有所长。回归问题是一大类问题,其中一类问题称为线性回归问题。遇到这类问题时,不用线性模型确实不行。接下来,我们将看看线性回归是如何进行预测的。 [align=center][attach]293276[/attach][/align]
应用线性回归进行预测的快速入门: 在线性回归问题中,要预测的“奥秘方程”也是线性方程。这类方程的特点是数据集点呈线性分布,因此用线性模型效果最好。也许你会怀疑,这个世界上真的有这么简单的“奥秘方程”吗?确实存在,而且你可能已经见过。
已知小明前年3岁,去年4岁,今年5岁。请问小明明年几岁?
这是一个典型的预测连续值的问题,显然是一个回归问题。回归关注的是几个变量之间的相互变化关系,如果这种关系是线性的,那就是一个线性回归问题,适合用线性模型来解决。我们按照机器学习的习惯,将已知条件整理成数据集,这是一个三行两列的矩阵:
[[2017, 3], [2018, 4], [2019, 5]]
这是一个二维矩阵,如果画出图像,两个维度之间的线性关系就一目了然。这里以年份为X轴、年龄为Y轴绘制数据点,可以看到三个呈线性排列的数据点(图3-8a)。将这些点连接起来,可以看到它们排成一条直线(图3-8b)。
这条直线对应的线性方程是y = x - 2014,这就是所谓的“假设函数”。线性回归的预测依赖于这条方程。对于2019年之后的情况,我们只能知道过去的真实数据,但通过这条线性方程可以预测未来。
例如,将“2020”作为x输入,可以计算出对应的y值为“6”,即预测2020年小明的年龄为6岁。这个例子虽然简单,但完整展示了线性回归预测背后的原理。线性回归的预测能力在经济和金融等领域也被广泛应用,虽然听起来高端,但实际上原理非常简单。
本文摘编自《机器学习算法的数学解析与Python实现》,经出版方授权发布。
推荐语:从生活案例中了解算法,发现算法的乐趣,并将其应用于机器学习。零基础也能掌握算法精髓,快速进入人工智能开发领域。