问题

如何解释「线性回归」的含义?

回答
好的,咱们来聊聊“线性回归”这个概念,争取讲得透彻,让你感觉就像是邻家老哥跟你唠嗑一样。

想象一下,你手里有一堆数据,这些数据之间好像有点儿关系,但又不是那么明显。比如,你记录了一个班级学生的身高和体重。你会发现,一般来说,个子高的同学体重可能也比较重一些,对吧?这之间就存在着一种趋势。

线性回归,就是我们用来量化和描述这种“趋势”的一种方法。

咱们拆开来理解:

“线性”: 这个词就代表着“直线”的意思。如果把我们记录的身高和体重画在一张图上,横轴是身高,纵轴是体重,你会发现,这些点可能不是严丝合缝地连成一条直线,但大部分点会围绕着一条看不见的直线分布。这条直线,就是我们说的“线性”关系。换句话说,一个量(比如身高)的变化,会以一个相对恒定的比例影响另一个量(比如体重)。身高每增加一厘米,体重可能平均增加几斤。这个“几斤”就是那个恒定的比例。

“回归”: 这个词听起来有点儿拗口,但它的意思其实是“回到平均值”或者“预测”。在统计学里,回归分析就是用来研究一个变量(因变量)如何随着另一个或多个变量(自变量)的变化而变化的。它就像是在过去的观测数据里,“回归”出一种规律,然后用这个规律去预测未来。比如,根据班里同学的身高体重数据,我们想预测一下,如果一个新同学身高175cm,他的体重大概会是多少。

所以,线性回归的本质就是:找到一条“最能代表”这些数据点分布趋势的直线,然后用这条直线来解释变量之间的关系,或者预测未知的值。

怎么找到这条“最能代表”的直线呢?

这就好比你在射箭,目标是一个圆心。你射出了很多箭,有的偏左,有的偏右,有的偏上,有的偏下,但你希望能找到一个射击的“平均位置”,让你的箭都尽可能地靠近那个平均位置。

在数学上,我们就是找一条直线,使得所有数据点的实际值与这条直线预测的值之间的“差距”(误差)的平方和最小。 这个听起来有点专业,但你可以理解成,我们希望找到的那条直线,离所有的数据点都“挨得最近”。

这条直线有什么用?

它有两大主要用途:

1. 解释关系(找出规律):
斜率: 直线的一个重要参数是斜率。在身高体重例子里,斜率就告诉我们,身高每增加一个单位,体重平均会增加多少。如果斜率很大,说明身高和体重关系很紧密;如果斜率很小,那身高对体重的影响就不那么大了。
截距: 直线还有一个参数是截距,也就是当自变量(身高)为0时,因变量(体重)的预测值。不过,在很多实际情况中,截距的实际意义可能不大,比如身高为0就不存在了。但它仍然是构成这条最佳拟合直线的一部分。
拟合优度(R²): 我们还需要知道这条直线到底“拟合”得好不好。比如,是不是大部分点都乖乖地在直线附近跳舞,还是散得像一盘散沙?这就有一个叫做“决定系数”(R²)的指标,它告诉你模型解释了因变量变异的多少百分比。R²越接近1,说明这条直线解释能力越强。

2. 预测未来(推断未知):
一旦我们找到了这条最佳的直线,我们就可以利用它来预测。比如,我们知道我们班里“身高体重”这条线的规律了,现在来了一个新同学,我们只知道他身高178cm,就可以把178代入我们算出来的直线方程,得到一个预测的体重值。

举个更贴切的例子:

假设你想知道你每天学习的时间和期末考试的成绩有没有关系。

你记录了自己过去几个学期的学习时间(比如每天2小时、3小时、4小时、5小时)和对应的考试成绩(比如70分、80分、85分、90分)。

你把这些点画在图上:横轴是学习时间,纵轴是考试成绩。你会发现,好像学习时间越长,成绩也越高。

线性回归就是帮你找出一条“学习时间考试成绩”的直线。这条直线可能不是完美地穿过每一个点,但它会尽量靠近所有点。

这条直线是什么样的? 它会有一个“斜率”,比如告诉你,学习时间每增加1小时,你的考试成绩平均会提高多少分。
它的“截距”是什么意思? 可能代表着,如果你什么都不学(学习时间为0),你的基础分数是多少(虽然这个不太可能)。
它的“R²”是多少? 这个值会告诉你,学习时间的变化,在多大程度上解释了你考试成绩的变化。如果R²很高,说明学习时间是影响你成绩的一个重要因素。

然后,你就可以用这条线来预测了。 比如,你计划这学期每天学习4.5小时,你就可以把4.5代入这条线,预测一下你大概能考多少分。

但也要注意它的局限性:

线性假设: 线性回归最根本的假设是,变量之间的关系是线性的。如果实际关系是曲线形的(比如抛物线),那线性回归可能就拟合不好了。
外插危险: 千万不要用你已有的数据范围之外的点去进行预测。比如,你的数据最高只记录了你每天学习5小时的情况,你就不能用这条线去预测你每天学习10小时能考多少分,因为我们不知道学习时间长到一定程度后,成绩是不是还会继续以相同的速度提高,或者会不会因为过度疲劳而下降。
相关不等于因果: 就算我们发现身高和体重有很强的线性关系,也不能直接断定“身高导致体重”,可能还有其他隐藏因素(比如年龄、基因、饮食习惯)同时影响了身高和体重。线性回归只是描述了它们之间的“相关性”,而不是严格的“因果关系”。

总的来说,线性回归就是一种非常基础但又极其有用的统计工具,它帮助我们从看似杂乱的数据中,找到最简洁、最直观的直线关系,并且用它来解释现象和预测未来。就像是在一堆星星点点中,找到那条指引方向的北极星,或者是一团迷雾中,描绘出一条最清晰的道路。

网友意见

user avatar

这篇文章是我们机器学习《监督式学习》课程的一篇试读,感兴趣的同学可以查看我们的微信公众号:马同学图解数学,进一步了解课程。

回归大致可以理解为根据数据集 ,拟合出近似的曲线,所以回归也常称为拟合(Fit),像下列右图一样拟合出来是直线的就称为线性回归:

下面就来解释其中的一些细节。

1 线性回归

首先,为什么拟合曲线会被称为回归呢?

1.1 均值回归

“回归”这个词源于弗朗西斯·高尔顿爵士(英文:Sir Francis Galton,1822年2月16日-1911年1月17日):

他发现高个子父亲的儿子身高会矮一些,而矮个子父亲的儿子身高会高一些(否则高个子家族会越来越高,而矮个子家族会越来越矮),也就是说人类的身高都会回到平均值附近,他将这种现象称为均值回归。

1.2 线性回归

高尔顿的研究过程用现在的数学语言来表述就是,首先对一些父子的身高进行了抽样,得到数据集 ;然后根据数据集拟合出一条直线;最后通过该直线就可以对某父亲 的儿子的身高进行预测了:

高尔顿拟合的直线方程为(单位为米):

将方程和 联立,可得:

也就是说这两条直线会交于点 (1.77, 1.77),这说明身高低于1.77米的父亲,他的儿子身高会高一些;而高于1.77米的父亲,他的儿子身高会矮一些。:

所以这条拟合出来的直线,其实就表示了均值回归现象,因此拟合直线的过程被称为 线性回归(Linear Regression)。

2 经验误差函数

下面开始解释高尔顿是如何根据数据集来拟合直线的。先来介绍下线性回归的经验误差是什么。

2.1 假设空间

首先肯定是用直线来进行拟合:

所以假设空间为:

和感知机的假设空间差不多,只是少了 函数。

2.2 数据集

在历史上,高尔顿总共采集了近千个父子身高的数据来拟合。本课为了方便讲解,我们从中抽取了六个(原始数据的单位是“英寸”,这里全部转为了“米”)作为数据集 :

2.3 经验误差

随便找一条假设空间中的直线 ,对于某父亲身高 ,该直线给出的 和真实的儿子身高 是存在距离的,这个距离也称为点与直线的误差,高尔顿用两者差的平方来表示 :

将数据集 中所有点与该直线的误差加起来,再进行算术平均就是该直线在数据集 上的经验误差:

其中 表示该数据集的大小。

3 最小二乘法

有了经验误差函数之后,就可以利用上一单元介绍的经验误差最小原则来设计算法,从而在假设空间 中挑选离 最近的 作为 :

具体到线性回归中,其经验误差函数为:

根据经验误差最小原则,只需要求出使得该经验误差函数取得最小值的 和 :

实际上就得到了离 最近的 ,本节就来介绍如何求解 和 。

3.1 凸函数

首先,将手上的数据集 :

代入线性回归的经验误差函数后可得:

可见 是关于 和 的函数,并且是 凸函数(Convex Function)。凸函数意味着画出来看上去像山谷:

3.2 凸函数的最小值

就如山谷肯定有最低点一样,凸函数肯定有最小值,这说明最小值是一定存在的。并且凸函数更重要的性质是,使得经验误差函数 取得最小值的 和 ,可以通过求解下面方程组得到:

因为线性回归的经验误差函数 是平方之和,所以本节介绍的求解该经验误差函数的最小值的方法被称为 最小平方法 ,国内各种教材中也常称为 最小二乘法 。

4 代码实现

根据上面的数学原理,可以借助 Python 来求出 和 :

       from sympy import symbols, diff, solve import numpy as np  # 数据集 D X = np.array([1.51, 1.64, 1.6, 1.73, 1.82, 1.87]) y = np.array([1.63, 1.7, 1.71, 1.72, 1.76, 1.86])  # 构造经验误差函数 w, b = symbols('w b', real=True) RDh = 0 for (xi, yi) in zip(X, y):  RDh += (yi - (xi*w + b))**2 RDh *= 1/len(X)  # 对 w 和 b 求偏导 eRDhw = diff(RDh, w) eRDhb = diff(RDh, b)  # 求解方程组 ans = solve((eRDhw, eRDhb), (w, b)) print('使得经验误差函数 RD(h) 取最小值的参数为:{}'.format(ans))     

上面代码运行后,可以解出 以及 ,得到的结果和高尔顿几乎一样:

至此我们就完成了一个简单的线性回归。至于为什么最小二乘法是正确的,可以看我们之后的课程,或者看如何理解最小二乘法

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有