线性回归背后的数学

1、什么是线性回归?

线性回归是一种统计方法,用于对因变量与一个或多个自变量之间的关系进行建模。它是最广泛使用的机器学习算法之一,并且通常是学习者接触的第一个算法。

线性回归的工作原理是找到最适合数据的线性方程,然后使用线性方程来预测因变量的值,从而得到新的自变量值。

用于预测因变量的线性方程称为回归方程。回归方程通常采用以下方式:

复制代码
y = mx + b

其中:

  • y 是因变量
  • x 是独立变量(自变量)
  • m 是回归线的斜率
  • b 是回归线的 y 截距

使用数据估计回归线的斜率和 y 截距。斜率表示独立变量每变化一个单位时因变量的变化。例如,如果直线的斜率为正,则表示输入变量和输出变量之间存在正相关性。这意味着随着输入变量的增加,输出变量也趋于增加。

y 截距表示当独立变量为零时因变量的值。

2、线性回归为什么有用?

线性回归是一种非常有用的算法,因为简单、可解释且准确。所以也就非常通用,可用于解决各种问题,例如:

  • 预测房价
  • 预测销售
  • 预测客户流失
  • 预测患者风险
  • 预测学生表现

假设我们想根据房屋面积预测房屋的价格,我么可以收集一些房屋的面积和价格数据,然后可以使用线性回归找到最合适数据的线性方程,然后可以使用该线性方程根据新房的面积预测其价格。

回归线显示房价和建筑面积呈正相关性,换句话说,房屋面积越大,价格就越高。

3、线性回归的工作原理

线性回归的工作原理是通过数据找到最佳拟合线。最佳拟合线是使残差平方和(SSE)最小的线。残差是预测值与实际值之间的差值。

为了找到最佳拟合线,线性回归使用一种称为普通最小二乘(OLS)的算法。OLS 通过迭代调整线性方程的参数,直到 SSE 最小化。

一旦找到最佳拟合线,就可以用它来预测新输入值得输出变量。为此,只需要将输入值代入线性方程即可。

4、线性回归假设

线性回归模型在应用中通常基于一系列假设,这些假设确保了模型的有效性和估计结果的可靠性。线性回归对数据做出了许多假设,包括:

  • 线性: 输入和输出变量之间必须存在线性关系。
  • 同方差性: 误差项的方差必须是常数,不随自变量的变化而变化。
  • 正态性: 误差项必须呈正态分布。
  • 独立性: 输入变量必须彼此独立。

线性

可以通过绘制输入和输出变量来检查线性假设。如果图显示线性关系,则满足线性假设,如果图显示非线性关系,则违反线性假设。

线性关系的示例:

非线性关系示例:

同方差性

可以通过绘制残差(预测值与实际值之间的差值)与预测值的关系图来检查同方差性假设。如果残差的方差为常数,则满足同方差性假设。如果残差的方差不是常数,则违反同方差性假设。

正态性

可以使用正态性检验来检查正态性假设。有许多不同的正态性检验可用,例如Shapiro-Wilk 检验和 Kolmogorov-Smirnov 检验。如果正态性检验表明残差呈正态分布,则正态性假设得到满足。如果正态性检验表明残差不呈正态分布,则违反正态性假设。

独立性

独立性假设可以用相关矩阵来检验。相关矩阵显示每对输入变量之间的相关性。如果相关矩阵显示输入变量彼此不相关,则独立性假设得到满足。如果相关矩阵显示输入变量彼此相关,则独立性假设不成立。

如果违反线性回归假设该怎么办

如果违反了一个或多个线性回归假设,可以采取以下措施:

  • 转换数据: 可以尝试转换数据以使其更加线性、同方差和/或正态分布。
  • 使用稳健回归算法: 稳健回归算法对违反线性回归假设的敏感度较低。
  • 使用广义线性模型(GLM): GLM是一类机器学习算法,可用于建模非线性关系和非正常目标变量。
5、如何评估线性回归

有多种方法可以评估线性回归模型的性能。一些常见指标包括:

  • 均方误差(MSE): 预测值和实际值之间的平均平方差。
  • 平均绝对误差(MAE): 预测值和实际值之间的平均绝对差异。
  • R 平方: 衡量模型对输出变量变化的解释能力的指标。
  • 调整后的 R 平方: R 平方的一个版本,考虑了模型中的预测变量的数量。

均方误差(MSE)

MSE 计算如下:

M S E = 1 n ∑ i = 1 n ( y i ^ − y i ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n}(\hat{y_i} - y_i)^2 MSE=n1i=1∑n(yi^−yi)2

其中:

  • n n n 是数据点的数量
  • y i ^ \hat{y_i} yi^ 是每个数据点的预测值
  • y i y_i yi 是每个数据点的实际值

MSE 衡量模型与数据的拟合程度。MSE 的值越低,拟合度越高。

平均绝对误差(MAE)

MAE 计算如下:

M A E = 1 n ⋅ ∑ i = 1 n ∣ y ^ − y ∣ MAE = \frac{1}{n} \cdot \sum_{i=1}^{n}|\hat{y} - y| MAE=n1⋅i=1∑n∣y^−y∣

其中:

  • n \text{n} n 是数据点的数量
  • y ^ \hat{y} y^ 是每个数据点的预测值
  • n \text{n} n 是每个数据点的实际值

MAE 是预测值与实际值之间的平均绝对差。MAE 越低,表示拟合度越高。

MAE 是一种稳健的指标,它对异常值的敏感度不如 MSE。这使得它成为评估线性回归模型对可能包含异常值的数据的性能的不错选择。

R 平方

R 平方的计算方法如下:

复制代码
R-squared = SSR / SST = 1 - SSE / SST

其中:

  • SSR 是回归平方和。表示模型预测值与均值之间的变异量。是通过将回归模型中因变量的每个预测值与因变量的总体平均值之间的平方差相加来计算的。量化了回归模型所解释的因变量的变异性。它通过捕获预测值与因变量总体平均值的偏差来衡量回归模型与数据的拟合程度。公式: SSR = sum((y_hat - y_mean)^2),其中,y_hat表示预测值,y_mean 表示实际值的平均值。
  • SST 是总平方和(total sum of squares)。表示观测值与其均值之间的总变异量。通过将因变量的每个观测值与因变量的总体平均值之间的平方差相加来计算。量化因变量 (响应变量) 中的总变异性,而不考虑任何解释变量 (独立变量)。它测量因变量的观测值与其平均值的偏差程度。公式: SST = sum((y - y_mean)^2),其中,y 表示实际值,y_mean 表示实际值的平均值。
  • SSE 是误差平方和(residual sum of squares)。表示观测值与模型预测值之间的变异量,即残差平方和。通过将回归模型中因变量的每个预测值与其相应观测值之间的平方差相加来计算。它衡量了回归模型在拟合数据时产生的误差。公式: SSE = sum((y - y_hat)^2),其中,y 表示实际值,y_hat 表示预测值。
  • SST、SSR、SSE三者之间的关系可表示为: SST = SSR + SSE。换句话说,因变量 (SST) 的总变异性可以分解为两个部分:回归模型解释的变异性 (SSR) 和无法解释的变异性或误差 (SSE)。这种关系突出了回归分析的基本原理,其目标是最小化误差 (SSE) 并最大化解释变异性 (SSR),以实现回归模型与观测数据之间的更好拟合。

R 平方是衡量模型解释输出变量变化能力的指标。R 平方越高,拟合度越高。

调整后的 R 平方

调整后的 R 平方的计算方法如下:

复制代码
Adjusted R-squared = 1 - (SSE / (n - k - 1)) / (SST / (n - 1))

其中:

  • SSE 是误差平方和,即 ∑ i = 1 n ( y i − y i ^ ) 2 \sum_{i=1}^{n} (y_i - \hat{y_i})^2 ∑i=1n(yi−yi^)2。
  • SST 是总平方和,即 ∑ i = 1 n ( y i − y ˉ ) 2 \sum_{i=1}^{n} (y_i - \bar{y})^2 ∑i=1n(yi−yˉ)2。
  • n 是数据点的数量。
  • k 是自变量的数量。

调整后的 R 平方是对 R 平方的一个改进,它考虑了模型中自变量的数量。调整后的 R 平方越高,拟合度越高。

6、如何选择最佳评估指标

为线性回归模型选择的最佳评估指标取决于自己要解决的具体问题。选择评估指标时需要考虑的一些因素包括:

  • 正在使用的数据类型: 如果自己的数据包含异常值,那么可能需要选择对异常值稳健的指标,如 MAE。
  • 数据的规模: 如果自己的数据规模非常大,那么可能需要选择计算效率高的指标,如MSE。
  • 指标的可解释性: 某些指标(例如 R 平方)比其他指标更易于解释。如果需要向利益相关者解释模型的结果,这一点可能很重要。

以下是何时选择每个评估指标的一些具体示例:

  • MSE 是评估线性回归模型对正态分布且不包含异常值的数据的性能的良好选择。对于需要最小化预测值和实际值之间的平方误差的问题,MSE 也是一个不错的选择。
  • 对于可能包含异常值的数据,MAE 是评估线性回归模型性能的不错选择。对于需要最小化预测值和实际值之间的绝对误差的问题,MAE 也是一个不错的选择。
  • R 平方是评估线性回归模型与数据的整体拟合度的不错选择。但是,需要注意的是,如果模型过度拟合数据,R 平方可能会产生误导。
  • 调整后的 R 平方是评估具有多个预测变量(自变量)的数据的线性回归模型性能的不错选择。调整后的 R 平方会惩罚具有更多预测变量的模型,这有助于防止过度拟合。

一般来说,使用多个评估指标来评估线性回归模型的性能是一个好主意。这将帮助自己更全面的了解模型的性能。

以下是为线性回归模型选择最佳评估指标的一些其他技巧:

  • 考虑模型的目标: 自己希望模型实现什么?了解模型的目标后,可以选择与这些目标相符的评估指标。
  • 考虑结果的受众: 谁将使用自己的模型结果?如果自己需要向非技术利益相关者解释模型结果,那么自己可能需要选择一个更易于解释的指标。
  • 考虑可用的计算资源: 某些评估指标(例如交叉验证)的计算成本可能很高。如果自己爹计算资源有限,那么自己可能希望选择计算成本较低的指标。

最终,为线性回归模型选择最佳评估指标的最佳方法是尝试不同的指标,看看哪一个最适合自己的特定问题。

7、使用 Python 从头实现

假设我们想根据房屋的面积预测房屋的价格。我们可以收集一些房屋的面积和价格数据。然后我们可以使用线性回归找到最适合数据的线性方程。然后可以使用该线性方程根绝新房的面积预测其价格。

首先模拟数据:

复制代码
import numpy as np
import pandas as pd

# 生成房屋面积和价格的模拟数据
# 随机生成100个位于区间[1000, 3000]内的整数,作为房屋面积
square_footage = np.random.randint(1000, 3000, size=100)
price = 100000 + 500 * square_footage + np.random.randn(100) * 10000
# 将数据存入DataFrame中
data = pd.DataFrame({'square_footage': square_footage, 'price': price})
print(data)

要在 Python 中从头开始创建线性回归模型而不使用任何库,可以按照以下步骤:

1、计算平方英尺和价格数据的平均值和方差

复制代码
def calculate_mean_and_variance(data):
    """ 计算一个 Numpy 数组的平均值和方差

    Args:
       data (numpy.ndarray): 输入数据

    Returns:
      tuple: (mean, variance),包含数据平均值和方差的元组
    """
    mean = np.mean(data)
    # 计算总体方差,是每个样本值与全体样本值的平均数之差的平方值的平均数
    # var = np.sum((data - mean)**2) / len(data)
    variance = np.var(data)
    return (mean, variance)


square_footage_mean, square_footage_variance = calculate_mean_and_variance(data['square_footage'])
price_mean, price_variance = calculate_mean_and_variance(data['price'])
print('房屋面积的平均值和方差分别为:', square_footage_mean, square_footage_variance)
  • 计算平方英尺和价格数据之间的协方差

    def calculate_covariance(data1, data2):
    """ 计算两个 Numpy 数组之间的协方差

    复制代码
      Args:
         data1 (numpy.ndarray): 输入数据1
         data2 (numpy.ndarray): 输入数据2
      
      Returns:
          float: 输入数据的协方差
      """
      covariance = np.cov(data1, data2)[0][1]
      return covariance

    square_footage_price_covariance = calculate_covariance(data['square_footage'], data['price'])
    print('房屋面积和价格的协方差为:', square_footage_price_covariance)

  • 计算回归线的斜率和 y 截距

回归线的斜率和 y 截距可以使用以下公式计算:

复制代码
slope = square_footage_price_covariance / square_footage_variance
y_intercept = price_mean - (slope * square_footage_mean)
  • 对给定平方英尺的新房进行预测

可以使用以下公式计算给定平方英尺的新房的预测价格:

复制代码
predicted_price = (slope * square_footage) + y_intercept

def predict_price(square_footage, slope, y_intercept):
    """ 根据房屋面积预测房屋价格
    
    Args:
       square_footage (float): 输入的房屋面积
       slope (float): 回归线的斜率
       y_intercept (float): 回归线的 y 截距

    Returns:
       float: 预测的房屋价格
    """
    predict_price = (slope * square_footage) + y_intercept
    return predict_price


new_house_square_footage = 2000
predict_price = predict_price(new_house_square_footage, slope, y_intercept)
print('预测的房屋价格为:', predict_price)

这个示例说明如何在不使用任何库的情况下在Python中从头创建线性回归模型。下面解释为什么线性回归中的斜率等于面积与价格协方差除以房屋面积的方差,并逐步推导出结果

1、线性回归模型的基本假设

线性回归假设中因变量 y 与自变量 X 之间的关系为:

y i = slope × X i + y-intercept + ε i y_i = \text{slope} \times X_i + \text{y-intercept} + \varepsilon_i yi=slope×Xi+y-intercept+εi

其中:

  • y i y_i yi 是第 i 个样本的因变量值(房屋价格)。
  • X i X_i Xi 是第 i 个样本的自变量值(房屋面积)。
  • slope \text{slope} slope 是回归线的斜率,表示 X 每增加一个单位时 y 的增量。
  • y-intercept \text{y-intercept} y-intercept 是回归线的截距,表示当 X 为 0 时 y 的预测值。
  • ε i \varepsilon_i εi 是第 i 个样本的误差,表示因变量与回归线之间的距离。

我们的目标是找到最优的 slope 和 y-intercept,使得预测值 y ^ i = slope × X i + y-intercept \hat{y}_i = \text{slope} \times X_i + \text{y-intercept} y^i=slope×Xi+y-intercept 与真实值 y i y_i yi 的误差平方和最小。

2、最小二乘法的目标

最小二乘法的目标时最小化所有数据点的预测值与实际值之间的误差平方和(SSE):

S S E = ∑ i = 1 n ( y i − y ^ i ) 2 SSE = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 SSE=i=1∑n(yi−y^i)2

即:

S S E = ∑ i = 1 n ( y i − ( slope × X i + y-intercept ) ) 2 SSE = \sum_{i=1}^{n} (y_i - (\text{slope} \times X_i + \text{y-intercept}))^2 SSE=i=1∑n(yi−(slope×Xi+y-intercept))2

其中 n 时样本数量。为了找到最优的 slope \text{slope} slope 和 y-intercept \text{y-intercept} y-intercept,我们需要 SSE 分别对他们求导并令其为零。

3、对斜率求导以找到最优解

为了找到最优的 slope \text{slope} slope 和 y-intercept \text{y-intercept} y-intercept,我们将 SSE 对 slope \text{slope} slope 求导并令导数为零:

对斜率 slope \text{slope} slope 求导以找到最优解:

∂ SSE ∂ slope = − 2 ∑ i = 1 n X i ( y i − ( slope × X i + y-intercept ) ) = 0 \frac{\partial \text{SSE}}{\partial \text{slope}} = -2 \sum_{i=1}^{n} X_i (y_i - (\text{slope} \times X_i + \text{y-intercept})) = 0 ∂slope∂SSE=−2i=1∑nXi(yi−(slope×Xi+y-intercept))=0

将其展开为:

∂ SSE ∂ slope = − 2 ∑ i = 1 n X i y i + 2 ∑ i = 1 n slope × X i 2 + 2 ∑ i = 1 n y-intercept × X i = 0 \frac{\partial \text{SSE}}{\partial \text{slope}} = -2 \sum_{i=1}^{n} X_i y_i + 2 \sum_{i=1}^{n}\text{slope} \times X_i^2 + 2 \sum_{i=1}^{n} \text{y-intercept} \times X_i = 0 ∂slope∂SSE=−2i=1∑nXiyi+2i=1∑nslope×Xi2+2i=1∑ny-intercept×Xi=0

将公式简化后得到:

∑ i = 1 n X i y i = slope × ∑ i = 1 n X i 2 + y-intercept × ∑ i = 1 n X i \sum_{i=1}^{n} X_i y_i = \text{slope} \times \sum_{i=1}^{n}X_i^2 + \text{y-intercept} \times \sum_{i=1}^{n}X_i i=1∑nXiyi=slope×i=1∑nXi2+y-intercept×i=1∑nXi

4、对截距求导以找到最优解

为了找到最优的 y-intercept \text{y-intercept} y-intercept,我们将 SSE 对 y-intercept \text{y-intercept} y-intercept 求导并令导数为零:

∂ SSE ∂ y-intercept = − 2 ∑ i = 1 n ( y i − ( slope × X i + y-intercept ) ) = 0 \frac{\partial \text{SSE}}{\partial \text{y-intercept}} = -2 \sum_{i=1}^{n} (y_i - (\text{slope} \times X_i + \text{y-intercept})) = 0 ∂y-intercept∂SSE=−2i=1∑n(yi−(slope×Xi+y-intercept))=0

展开后:

∂ SSE ∂ y-intercept = ∑ i = 1 n y i − slop × ∑ i = 1 n X i − n × y-intercept = 0 \frac{\partial \text{SSE}}{\partial \text{y-intercept}} = \sum_{i=1}^{n} y_i - \text{slop} \times \sum_{i=1}^{n} X_i - n \times \text{y-intercept} = 0 ∂y-intercept∂SSE=i=1∑nyi−slop×i=1∑nXi−n×y-intercept=0

将公式简化后等到:

y-intercept = ∑ i = 1 n y i n − slope × ∑ i = 1 n X i n \text{y-intercept} = \frac{\sum_{i=1}^{n}y_i}{n} - \text{slope} \times \frac{\sum_{i=1}^{n}X_i}{n} y-intercept=n∑i=1nyi−slope×n∑i=1nXi

注意到 ∑ i = 1 n y i n = y ˉ \frac{\sum_{i=1}^{n} y_i}{n} = \bar{y} n∑i=1nyi=yˉ 是 y 的平均值,而 ∑ i = 1 n X i n = X ˉ \frac{\sum_{i=1}^{n} X_i}{n} = \bar{X} n∑i=1nXi=Xˉ 是 x 的平均值,所以可以简化为:

y-intercept = y ˉ − slope × X ˉ \text{y-intercept} = \bar{y} - \text{slope} \times \bar{X} y-intercept=yˉ−slope×Xˉ

5、将截距代入公式以消除 y-intercept

将上面的截距公式代入前面对斜率求导得到的方程中:

∑ i = 1 n X i y i = slope × ∑ i = 1 n X i 2 + ( y ˉ − slope × X ˉ ) × ∑ i = 1 n X i \sum_{i=1}^{n} X_i y_i = \text{slope} \times \sum_{i=1}^{n} X_i^2 + (\bar{y} - \text{slope} \times \bar{X}) \times \sum_{i=1}^{n} X_i i=1∑nXiyi=slope×i=1∑nXi2+(yˉ−slope×Xˉ)×i=1∑nXi

展开后得到:

∑ i − 1 n X i y i = slope × ∑ i = 1 n X i 2 + y ˉ × ∑ i = 1 n X i − slope × X ˉ × ∑ i = 1 n X i \sum_{i-1}^{n} X_i y_i = \text{slope} \times \sum_{i=1}^{n} X_i^2 + \bar{y} \times \sum_{i=1}^{n} X_i - \text{slope} \times \bar{X} \times \sum_{i=1}^{n} X_i i−1∑nXiyi=slope×i=1∑nXi2+yˉ×i=1∑nXi−slope×Xˉ×i=1∑nXi

将所有含有 slope 的项合并:

∑ i = 1 n X i y i = slope × ( ∑ i = 1 n X i 2 − X ˉ × ∑ i = 1 n X i ) + y ˉ × ∑ i = 1 n X i \sum_{i=1}^{n} X_i y_i = \text{slope} \times (\sum_{i=1}^{n} X_i^2 - \bar{X} \times \sum_{i=1}^{n} X_i) + \bar{y} \times \sum_{i=1}^{n} X_i i=1∑nXiyi=slope×(i=1∑nXi2−Xˉ×i=1∑nXi)+yˉ×i=1∑nXi

等式两边除以 n n n,为:

1 n ∑ i = 1 n X i y i = slope × ( 1 n ∑ i = 1 n X i 2 − X ˉ ⋅ 1 n ∑ i = 1 n X i ) + y ˉ ⋅ 1 n ∑ i = 1 n X i \frac{1}{n} \sum_{i=1}^{n} X_i y_i = \text{slope} \times (\frac{1}{n} \sum_{i=1}^{n} X_i^2 - \bar{X} \cdot \frac{1}{n} \sum_{i=1}^{n} X_i) + \bar{y} \cdot \frac{1}{n} \sum_{i=1}^{n} X_i n1i=1∑nXiyi=slope×(n1i=1∑nXi2−Xˉ⋅n1i=1∑nXi)+yˉ⋅n1i=1∑nXi

注意到 X ˉ = 1 n ∑ i = 1 n X i \bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i Xˉ=n1∑i=1nXi,所以:

1 n ∑ i = 1 n X i y i = slope × ( 1 n ∑ i = 1 n X i 2 − X ˉ 2 ) + y ˉ ⋅ X ˉ \frac{1}{n} \sum_{i=1}^{n} X_i y_i = \text{slope} \times (\frac{1}{n} \sum_{i=1}^{n} X_i^2 - \bar{X}^2) + \bar{y} \cdot \bar{X} n1i=1∑nXiyi=slope×(n1i=1∑nXi2−Xˉ2)+yˉ⋅Xˉ

6、使用协方差和方差的表达式简化
1、方差的定义

X的方差定义为所用样本值与其均值偏差的平方的平均值:

V a r ( X ) = 1 n ∑ i = 1 n ( X i − X ˉ ) 2 = 1 n ∑ i = 1 n X i 2 − X ˉ 2 Var(X) = \frac{1}{n}\sum_{i=1}^{n} (X_i - \bar{X})^2 = \frac{1}{n} \sum_{i=1}^{n} X_i^2 - \bar{X}^2 Var(X)=n1i=1∑n(Xi−Xˉ)2=n1i=1∑nXi2−Xˉ2

其中:

  • X i X_i Xi 是第 i 个样本的值。
  • X ˉ \bar{X} Xˉ 是样本的均值,定义为: 1 n ∑ i = 1 n X i \frac{1}{n} \sum_{i=1}^{n} X_i n1∑i=1nXi

将方差公式等号左边展开:

V a r ( X ) = 1 n ∑ i = 1 n ( X i 2 − 2 X i X ˉ + X ˉ 2 ) Var(X) = \frac{1}{n} \sum_{i=1}^{n} (X_i^2 - 2X_i\bar{X} + \bar{X}^2) Var(X)=n1i=1∑n(Xi2−2XiXˉ+Xˉ2)

将求和符号分开:

V a r ( X ) = 1 n ( ∑ i = 1 n X i 2 − 2 X ˉ ∑ i = 1 n X i + ∑ i = 1 n X ˉ 2 ) Var(X) = \frac{1}{n}(\sum_{i=1}^{n} X_i^2 - 2\bar{X}\sum_{i=1}^{n} X_i + \sum_{i=1}^{n} \bar{X}^2) Var(X)=n1(i=1∑nXi2−2Xˉi=1∑nXi+i=1∑nXˉ2)

注意到 X ˉ = 1 n ∑ i = 1 n X i \bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i Xˉ=n1∑i=1nXi,所以:

V a r ( X ) = 1 n ∑ i = 1 n X i 2 − 2 n X ˉ ⋅ n ⋅ X ˉ + 1 n ∑ i = 1 n X ˉ 2 Var(X) = \frac{1}{n} \sum_{i=1}^{n} X_i^2 - \frac{2}{n} \bar{X} \cdot n \cdot \bar{X} + \frac{1}{n} \sum_{i=1}^{n} \bar{X}^2 Var(X)=n1i=1∑nXi2−n2Xˉ⋅n⋅Xˉ+n1i=1∑nXˉ2

由于 X ˉ \bar{X} Xˉ 是一个常数,可以从求和符号中移出,同时注意到 ∑ i = 1 n X ˉ 2 = n ⋅ X ˉ 2 \sum_{i=1}^{n} \bar{X}^2 = n \cdot \bar{X}^2 ∑i=1nXˉ2=n⋅Xˉ2,所以:

V a r ( X ) = 1 n ∑ i = 1 n X i 2 − 2 X ˉ n ⋅ n ⋅ X ˉ + n X ˉ 2 n Var(X) = \frac{1}{n} \sum_{i=1}^{n} X_i^2 - \frac{2 \bar{X}}{n} \cdot n \cdot \bar{X} + \frac{n \bar{X}^2}{n} Var(X)=n1i=1∑nXi2−n2Xˉ⋅n⋅Xˉ+nnXˉ2

进一步简化为:

V a r ( X ) = 1 n ∑ i = 1 n X i 2 − X ˉ 2 Var(X) = \frac{1}{n} \sum_{i=1}^{n} X_i^2 - \bar{X}^2 Var(X)=n1i=1∑nXi2−Xˉ2

因此方差公式可以写成:

V a r ( X ) = 1 n ∑ i = 1 n ( X i − X ˉ ) 2 = 1 n ∑ i = 1 n X i 2 − X ˉ 2 = 1 n ∑ i = 1 n X i 2 − ( 1 n ∑ i = 1 n X i ) 2 Var(X) = \frac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^2 = \frac{1}{n} \sum_{i=1}^{n} X_i^2 - \bar{X}^2 = \frac{1}{n} \sum_{i=1}^{n} X_i^2 - (\frac{1}{n} \sum_{i=1}^{n} X_i)^2 Var(X)=n1i=1∑n(Xi−Xˉ)2=n1i=1∑nXi2−Xˉ2=n1i=1∑nXi2−(n1i=1∑nXi)2

2、协方差的定义

协方差的定义为两个变量 X 和 y 的样本值与各自均值的偏差乘积的平均值:

C o v ( X , y ) = 1 n ∑ i = 1 n ( X i − X ˉ ) ( y i − y ˉ ) = 1 n ∑ i = 1 n X i y i − X ˉ ⋅ y ˉ Cov(X, y) = \frac{1}{n} \sum_{i=1}^{n}(X_i - \bar{X})(y_i - \bar{y}) = \frac{1}{n} \sum_{i=1}^{n} X_i y_i - \bar{X} \cdot\bar{y} Cov(X,y)=n1i=1∑n(Xi−Xˉ)(yi−yˉ)=n1i=1∑nXiyi−Xˉ⋅yˉ

其中:

  • X i X_i Xi 和 y i y_i yi 分别是第 i 个样本的 X X X 和 y y y 的值。
  • X ˉ = 1 n ∑ i = 1 n X i \bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i Xˉ=n1∑i=1nXi 是 X X X 的样本均值。
  • y ˉ = 1 n ∑ i = 1 n y i \bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i yˉ=n1∑i=1nyi 是 y y y 的样本均值。

将协方差公式的等号左边展开:

C o v ( X , y ) = 1 n ∑ i = 1 n ( X i y i − X i y ˉ − X ˉ y i + X ˉ y ˉ ) Cov(X, y) = \frac{1}{n} \sum_{i=1}^{n} (X_i y_i - X_i \bar{y} - \bar{X} y_i + \bar{X} \bar{y}) Cov(X,y)=n1i=1∑n(Xiyi−Xiyˉ−Xˉyi+Xˉyˉ)

把求和符号分开:

C o v ( X , y ) = 1 n ( ∑ i = 1 n X i y i − ∑ i = 1 n X i y ˉ − ∑ i = 1 n X ˉ y i + ∑ i = 1 n X ˉ y ˉ ) Cov(X, y) = \frac{1}{n} (\sum_{i=1}^{n} X_i y_i - \sum_{i=1}^{n} X_i \bar{y} - \sum_{i=1}^{n} \bar{X} y_i + \sum_{i=1}^{n} \bar{X} \bar{y}) Cov(X,y)=n1(i=1∑nXiyi−i=1∑nXiyˉ−i=1∑nXˉyi+i=1∑nXˉyˉ)

由于 X ˉ \bar{X} Xˉ 和 y ˉ \bar{y} yˉ 是常数,所以它们的求和可以移出:

C o v ( X , y ) = 1 n ∑ i = 1 n X i y i − y ˉ n ∑ i = 1 n X i − X ˉ n ∑ i = 1 n y i + X ˉ y ˉ n ⋅ n Cov(X, y) = \frac{1}{n} \sum_{i=1}^{n} X_i y_i - \frac{\bar{y}}{n} \sum_{i=1}^{n} X_i - \frac{\bar{X}}{n} \sum_{i=1}^{n} y_i + \frac{\bar{X} \bar{y}}{n} \cdot n Cov(X,y)=n1i=1∑nXiyi−nyˉi=1∑nXi−nXˉi=1∑nyi+nXˉyˉ⋅n

由于 1 n ∑ i = 1 n X i = X ˉ \frac{1}{n} \sum_{i=1}^{n} X_i = \bar{X} n1∑i=1nXi=Xˉ, 1 n ∑ i = 1 n y i = y ˉ \frac{1}{n} \sum_{i=1}^{n} y_i = \bar{y} n1∑i=1nyi=yˉ,所以进一步简化为:

C o v ( X , y ) = 1 n ∑ i = 1 n X i y i − y ˉ X ˉ − X ˉ y ˉ + X ˉ y ˉ = 1 n ∑ i = 1 n X i y i − X ˉ ⋅ y ˉ Cov(X, y) = \frac{1}{n} \sum_{i=1}^{n} X_i y_i - \bar{y} \bar{X} - \bar{X} \bar{y} + \bar{X} \bar{y} = \frac{1}{n} \sum_{i=1}^{n} X_i y_i - \bar{X} \cdot \bar{y} Cov(X,y)=n1i=1∑nXiyi−yˉXˉ−Xˉyˉ+Xˉyˉ=n1i=1∑nXiyi−Xˉ⋅yˉ

因此,协方差公式可以写为:

C o v ( X , y ) = 1 n ∑ i = 1 n ( X i − X ˉ ) ( y i − y ˉ ) = 1 n ∑ i = 1 n X i y i − X ˉ ⋅ y ˉ = 1 n ∑ i = 1 n X i y i − ( 1 n ∑ i = 1 n X i ) ( 1 n ∑ i = 1 n y i ) Cov(X, y) = \frac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X}) (y_i - \bar{y}) = \frac{1}{n} \sum_{i=1}^{n} X_i y_i - \bar{X} \cdot \bar{y} = \frac{1}{n} \sum_{i=1}^{n} X_i y_i - (\frac{1}{n} \sum_{i=1}^{n} X_i) (\frac{1}{n} \sum_{i=1}^{n} y_i) Cov(X,y)=n1i=1∑n(Xi−Xˉ)(yi−yˉ)=n1i=1∑nXiyi−Xˉ⋅yˉ=n1i=1∑nXiyi−(n1i=1∑nXi)(n1i=1∑nyi)

将方差和协方差公式代入到第 5 步的公式中,得到:

slope = C o v ( X , y ) V a r ( X ) \text{slope} = \frac{Cov(X, y)}{Var(X)} slope=Var(X)Cov(X,y)

这意味着斜率表示 X X X 和 y y y 的协方差(两个变量共同变化的程度)与 X X X 的方差( X X X 的变化幅度)的比值。

斜率公式 slope = C o v ( X , y ) V a r ( X ) \text{slope} = \frac{Cov(X, y)}{Var(X)} slope=Var(X)Cov(X,y) 的推导主要依赖于最小二乘的目标:最小化误差平方和。通过对 SSE 对斜率求导,结合方差和协方差的定义,最终得到这一公式。直观上,这个公式告诉我们:斜率是因变量 y y y 随自变量 X X X 的变化的平均增量,而这个增量正是由两个变量之间的线性关系(协方差)以及自变量的变异度(方差)所决定的。

相关推荐
罗西的思考1 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX2 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面3 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号3 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽3 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI3 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者5 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者5 小时前
【征程6】校准量化中HistogramObserver解析
算法
OuO-26 小时前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径
java·算法·矩阵
程序喵大人6 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法