{ "cells": [ { "cell_type": "markdown", "id": "bf758a3e", "metadata": {}, "source": [ "# 第 3 章 线性回归模型\n", "\n", "\n", "\n", "本章将介绍最流行、最有用的一种模型--线性模型。其本身就是非常有用的模型,也是许多其他模型的基础。如果你学过统计学课程,你可能听说过简单线性回归、多元线性回归、逻辑回归、方差分析、方差分析等。所有这些方法都是同一基本主题--线性回归模型的变体。在本章中,我们将介绍以下主题:\n", "\n", "- `一元线性回归`\n", "- `稳健的线性回归`\n", "- `分层线性回归`\n", "- `多项式线性回归`\n", "- `多元线性回归`\n", "- `交互作用`\n", "- `变方差的线性回归`\n", "\n", "---\n", "\n", "## 3.1 高斯线性回归\n", "\n", "实际应用中经常会遇到下面这类问题:我们有一个连续变量 $x$ ,希望对另外一个变量 $y$ 建模并进行预测。这些变量通常以 $\\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\\}$ 成对方式出现。此类问题一般可通过线性回归建模,当只有一个自变量时,被称为一元线性回归模型。\n", "\n", "在上述描述中,通常 $x$ 被称为自变量、预测变量或输入变量,而 $y$ 被称为因变量、结果变量或输出变量。在 `Numpy` 中,一元线性回归模型中的输入 $\\mathbf{X}$ 和 输出 $\\mathbb{y}$ 为一维数组。当存在多个自变量时,输入 $\\mathbf{X}$ 为矩阵,此时的模型被称为多元线性回归模型。\n", "\n", "使用线性模型的一些典型场景包括:\n", "\n", "- 对多个因素之间的关系建模,如雨量、土壤盐度与农作物是否施肥等,然后回答:它们之间的关系是否线性?关系有多强?哪个因素影响最强?\n", "- 找出全国平均巧克力摄入量与诺贝尔奖得主数量之间的关系。理解为什么这二者之间的关系可能是假的。\n", "- 根据当地天气预报中的太阳辐射,预测家里的燃气账单。该预测的准确性如何?\n", " \n", "\n", "### 3.1.1 与机器学习的联系\n", "\n", "(1)机器学习与统计学\n", "\n", "按照 `Kevin P. Murphy` 的说法,机器学习指一系列从数据中自动学习隐藏的规律、并用于预测未知数据,或在不确定状态中做出决策的方法的总称。机器学习与统计学相互交织,不过正如 `Kevin P. Murphy` 所说:“如果从概率视角来看,二者间的关系就比较清晰了”。尽管两个领域在概念和数学上紧密联系,但二者间不同的术语让这种联系显得不那么清晰了。因此,本文会介绍一些机器学习中的术语。\n", "\n", "(2)回归是一种监督学习方法\n", "\n", "用机器学习的术语来说,回归属于典型的`监督学习`。在机器学习框架中,学习从 $\\mathbf{X}$ 到 $\\mathbf{Y}$ 的一个映射就是`回归`问题( $\\mathbf{Y}$ 是连续变量)。不过,机器学习术语中通常用 `特征` 取代统计学中的 `变量`。而 `监督` 则指,已经知道 $\\mathbf{X}-\\mathbf{Y}$ 变量对的观测值,如何从中抽象出一种 `映射关系` 来处理未来的观测(即只知道 $\\mathbf{X}$ 而不知道 $\\mathbf{Y}$ 的情形)。\n", "\n", "### 3.1.2 线性回归模型的核心\n", "\n", "让我们开始学习如何构建线性模型。看下面该公式:\n", "\n", "$$\n", "y_i= \\alpha + x_i \\beta \\tag{式3.1}\n", "$$\n", "\n", "该等式描述了变量 $\\mathbf{X}$ 和 $\\mathbb{y}$ 之间的线性关系。 $\\beta$ 参数控制着线性关系的斜率,可被解释为变量 $y$ 随一个单位 $x$ 的变化而产生的变化量。另外一个参数 $α$ 为截距,可以解释为当 $x_i=0$ 时, $y_i$ 的值,在图形上表示, $α$ 就是直线与 $y$ 轴交点的坐标。\n", "\n", "计算线性模型参数的方法很多,频率主义的最小二乘法就是其中之一。每次使用软件去拟合直线时,底层可能用的就是最小二乘法。最小二乘法返回的 $α$ 和 $β$ 能够让实际观测的 $y$ 与预测的 $\\hat y$ 之间均方误差最小。估计 $α$ 和 $β$ 的本质是求解一个最优化问题,其目标是寻找使目标函数达到最值(最小值或最大值)时的参数解。\n", "\n", "最优化并非求解线性模型的唯一方法,同样的问题可以从贝叶斯角度描述。用概率方式思考的优势是:**在得到最优参数解 $α$ 和 $β$ 的同时,还能够知道其不确定性程度。** 而最优化方法则需要一些其他工作来提供不确定性信息。此外,贝叶斯方法还具备很大灵活性,尤其在使用 `PyMC3` 等工具时,可将模型应用到本章后面所介绍的各种特定问题中。\n", "\n", "从概率角度,线性回归模型可以表示成如下形式:\n", "\n", "$$\n", "\\mathbb{y} \\sim \\mathcal{N} ( \\mu = \\alpha + \\mathbf{X} \\beta , \\epsilon ) \\tag{式3.2}\n", "$$\n", "\n", "也就是说,假设随机变量 $\\mathbb{y}$ 服从均值为 $α + \\mathbf{X} β$ 、标准差为 $\\epsilon$ 的正态分布。其中 $α$ 、 $β$ 、 $\\epsilon$ 为未知的模型参数( 在贝叶斯方法中视其为随机变量,具有自身的概率分布),需要设置先验。\n", "\n", "先验的设置根据问题上下文和数据分析师的经验给出,例如,下面是假设参数服从正态分布的一组先验设置:\n", "\n", "$$\n", "\\alpha \\sim \\mathcal{N}\\left(\\mu_{\\alpha}, \\sigma_{\\alpha}\\right) \\tag{式3.3}\n", "$$\n", "\n", "$$\n", "\\beta \\sim \\mathcal{N}\\left(\\mu_{\\beta}, \\sigma_{\\beta}\\right)\n", "$$\n", "\n", "$$\n", "\\epsilon \\sim\\left|N\\left(0, \\sigma_{\\epsilon}\\right)\\right|\n", "$$\n", "\n", "\n", "其中:\n", "\n", "(1)截距参数 $α$ 的先验,根据问题不同会有较大变化,可使用一个平坦的高斯分布,其标注差 $\\sigma_\\alpha$ 相对于数据的值域较大。\n", "\n", "(2)斜率参数 $\\beta$ 可能比截距更容易获得先验,因为许多问题中至少可以预先知道斜率的正负符号;例如,预期权重值 $\\beta$ 平均会随着高度变化而增加。\n", "\n", "(3)误差参数 $\\epsilon$ 应大于 0,采用半高斯分布是一个选择。当对误差范围不可预期时,可以将 $\\sigma_\\epsilon$ 设置为相对 $\\mathbb{y}$ 的方差而言较大的值,如设置为 $\\sigma_{\\mathbb{y}}$ 的 10 倍,以保留足够空间通过数据似然来驱动不确定性的收缩。\n", "\n", "上述较为模糊的先验设置可保证先验对后验影响不至于过大,并较容易被数据克服,使最终结果更倾向于数据证据。\n", "\n", "```{tip}\n", "(1) 原理上,随着数据证据的逐步增加,先验终被数据似然所克服,或者说,无论先验如何设置,理论上在经过充分的数据证据后,后验将收缩至相同的结果。但现实中可能无法得到如此丰富的观测数据。\n", "\n", "(2)使用最大似然法(最小二乘)得到的参数解与采用平坦高斯先验的贝叶斯最大后验估计(MAP)得到的解都是对参数的点估计,两者的结果一致。\n", "```\n", "\n", "上述误差参数 $\\epsilon$ 的半高斯先验,也可以改为均匀分布或半柯西分布。半柯西分布是一个很好的正则化先验,而均匀分布由于存在硬边界的限制,可能不是一个好的选择。如果想对 $\\epsilon$ 的标准差施加某个特定值附近的强先验,也可以为 $\\epsilon$ 设置伽马先验。不同软件包中伽马分布的默认参数化方法可能有点不一样,不过`PyMC3`允许使用`形状( shape )`和`速率( rate )`参数组合、或者`平均值( mean )`和`标准差( $\\sigma$ )`参数组合来定义它。\n", "\n", "要查看伽马和其他分布的形状,可以查看 [PyMC3 文档](https://docs.pymc.io/api/distributions/continuous.html) 。\n", "\n", "回过头再看线性回归模型,借助 Kruschke 图有图 3.1 。在上一章的 Kruschke 图中,我们曾规定用符号 `=` 来定义确定性变量(如图中的 $\\mu$ ),用 `∼` 来定义随机变量,如图中的 $\\alpha$ 、 $\\beta$ 和 $\\epsilon$ :\n", "\n", "