多元线性回归

文章介绍了多元线性回归作为统计学习方法的基础,用于建立多个自变量与一个因变量的线性关系模型。文中提到了经典论文和教材,如高斯的最小二乘法,以及Fisher、Belsley等人对回归分析的贡献。内容涵盖了模型构建、参数估计、诊断方法和模型应用。核心概念包括最小二乘法求解模型参数,以及如何处理数据中的异常值和多重共线性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

研究背景

多元线性回归是一种基本的统计学习方法,用于建立多个自变量和一个因变量之间的线性关系模型,常用于预测、分析和建模等任务。以下是一些关于多元线性回归算法的经典论文:

Gauss, C. F. (1821). Theoria combinationis observationum erroribus minimis obnoxiae (Theory of the Combination of Observations Least Subject to Errors). Werke, 8, 182-228.
这是多元线性回归分析的最早经典论文之一,提出了最小二乘法的概念和方法,用于估计线性回归模型的参数。

Fisher, R. A. (1925). Statistical methods for research workers. Oliver & Boyd.
这是一本经典的统计学教材,提供了多元线性回归的基本理论和方法,包括最小二乘法、方差分析和协方差分析等。

Belsley, D. A., Kuh, E., & Welsch, R. E. (1980). Regression diagnostics: Identifying influential data and sources of collinearity. John Wiley & Sons.
这本书介绍了多元线性回归模型的诊断方法,用于检测数据中的异常值和多重共线性等问题,以提高回归模型的准确性和可靠性。

Draper, N. R., & Smith, H. (1981). Applied regression analysis (2nd ed.). Wiley.
这本书是多元线性回归分析的经典教材,详细讲解了回归模型的构建、估计、诊断和选择等各个方面。

Kutner, M. H., Nachtsheim, C. J., Neter, J., & Li, W. (2004). Applied linear regression models. McGraw-Hill Irwin.
这本书是多元线性回归分析的一本实用性较强的教材,涵盖了从基本的回归分析到高级的模型选择和诊断技术等方面的内容,适合学习和应用。

这些论文和书籍为多元线性回归算法的理论和应用提供了重要的参考和指导,对于学习和掌握多元线性回归分析方法具有重要意义。

原理说明

多元线性回归是一种利用多个自变量来预测因变量的回归分析方法。在多元线性回归中,我们假设自变量和因变量之间存在线性关系,并且通过最小化残差平方和来求解最优的模型参数。

假设我们有 n n n 个观测值,每个观测值包含 m m m 个自变量和一个因变量,可以表示为 ( x 1 i , x 2 i , . . . , x m i , y i ) (x_{1i},x_{2i},...,x_{mi},y_i) (x1i,x2i,...,xmi,yi),其中 i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n。我们的目标是找到一个线性模型来拟合这些观测值,即:

y i = β 0 + β 1 x 1 i + β 2 x 2 i + . . . + β m x m i + ϵ i y_i=\beta_0+\beta_1x_{1i}+\beta_2x_{2i}+...+\beta_mx_{mi}+\epsilon_i yi=β0+β1x1i+β2x2i+...+βmxmi+ϵi

其中, β 0 , β 1 , β 2 , . . . , β m \beta_0,\beta_1,\beta_2,...,\beta_m β0,β1,β2,...,βm 是我们需要求解的模型参数, ϵ i \epsilon_i ϵi 是误差项,表示模型无法完全拟合观测值。

为了求解模型参数,我们需要定义一个损失函数,通常使用残差平方和来表示:

RSS ⁡ = ∑ i = 1 n ( y i − y i ^ ) 2 = ∑ i = 1 n ( y i − β 0 − β 1 x 1 i − β 2 x 2 i − . . . − β m x m i ) 2 \operatorname{RSS}=\sum_{i=1}^n(y_i-\hat{y_i})^2=\sum_{i=1}^n\left(y_i-\beta_0-\beta_1x_{1i}-\beta_2x_{2i}-...-\beta_mx_{mi}\right)^2 RSS=i=1n(yiyi^)2=i=1n(yiβ0β1x1iβ2x2i...βmxmi)2

其中, y i ^ \hat{y_i} yi^ 是模型对观测值 i i i 的预测值。

通过最小化残差平方和,我们可以求解出模型的最优参数,通常使用最小二乘法来求解,即将 RSS ⁡ \operatorname{RSS} RSS 对模型参数求偏导数,令其等于0,然后解方程组即可得到模型参数的值。

假设我们用矩阵表示自变量,即将 n n n 个观测值中的自变量按列组成一个 n × m n\times m n×m 的矩阵 X X X,将因变量按列组成一个 n × 1 n\times 1 n×1 的矩阵 Y Y Y,将模型参数按列组成一个 ( m + 1 ) × 1 (m+1)\times 1 (m+1)×1 的矩阵 β \beta β,其中第一个元素是截距。那么,我们可以将模型表示为:

Y = X β + ϵ Y=X\beta+\epsilon Y=+ϵ

此时,最小二乘法的解可以表示为:

β = ( X T X ) − 1 X T Y \beta=(X^TX)^{-1}X^TY β=(XTX)1XTY

其中, ( X T X ) − 1 (X^TX)^{-1} (XTX)1 是矩阵 X T X X^TX XTX 的逆矩阵。

以上就是多元线性回归的原理说明,通过求解最小化残差平方和的模型参数,我们可以建立自变量和因变量之间的线性关系模型,从而对因变量进行预测。

公式推导

我们假设有 n n n 个观测值,每个观测值包含 m m m 个自变量和一个因变量,可以表示为 ( x 1 i , x 2 i , . . . , x m i , y i ) (x_{1i},x_{2i},...,x_{mi},y_i) (x1i,x2i,...,xmi,yi),其中 i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n。我们的目标是找到一个线性模型来拟合这些观测值,即:

y i = β 0 + β 1 x 1 i + β 2 x 2 i + . . . + β m x m i + ϵ i y_i=\beta_0+\beta_1x_{1i}+\beta_2x_{2i}+...+\beta_mx_{mi}+\epsilon_i yi=β0+β1x1i+β2x2i+...+βmxmi+ϵi

其中, β 0 , β 1 , β 2 , . . . , β m \beta_0,\beta_1,\beta_2,...,\beta_m β0,β1,β2,...,βm 是我们需要求解的模型参数, ϵ i \epsilon_i ϵi 是误差项,表示模型无法完全拟合观测值。

为了求解模型参数,我们需要定义一个损失函数,通常使用残差平方和来表示:

RSS ⁡ = ∑ i = 1 n ( y i − y i ^ ) 2 = ∑ i = 1 n ( y i − β 0 − β 1 x 1 i − β 2 x 2 i − . . . − β m x m i ) 2 \operatorname{RSS}=\sum_{i=1}^n(y_i-\hat{y_i})^2=\sum_{i=1}^n\left(y_i-\beta_0-\beta_1x_{1i}-\beta_2x_{2i}-...-\beta_mx_{mi}\right)^2 RSS=i=1n(yiyi^)2=i=1n(yiβ0β1x1iβ2x2i...βmxmi)2

其中, y i ^ \hat{y_i} yi^ 是模型对观测值 i i i 的预测值。

我们将自变量按列组成一个 n × ( m + 1 ) n\times (m+1) n×(m+1) 的矩阵 X X X,其中第一列全为1,表示截距。将模型参数按列组成一个 ( m + 1 ) × 1 (m+1)\times 1 (m+1)×1 的矩阵 β \beta β,将因变量按列组成一个 n × 1 n\times 1 n×1 的矩阵 Y Y Y。此时,模型可以表示为:

Y = X β + ϵ Y=X\beta+\epsilon Y=+ϵ

为了最小化残差平方和,我们需要对模型参数 β \beta β 求导,并令其等于0。即,

∂ RSS ⁡ ∂ β = 0 \frac{\partial \operatorname{RSS}}{\partial \beta}=0 βRSS=0

展开上式,得到:

∂ ∂ β [ ( Y − X β ) T ( Y − X β ) ] = 0 \frac{\partial}{\partial \beta}[(Y-X\beta)^T(Y-X\beta)]=0 β[(Y)T(Y)]=0

∂ ∂ β ( Y T Y − Y T X β − β T X T Y + β T X T X β ) = 0 \frac{\partial}{\partial \beta}(Y^TY-Y^TX\beta-\beta^TX^TY+\beta^TX^TX\beta)=0 β(YTYYTβTXTY+βTXT)=0

− 2 X T Y + 2 X T X β = 0 -2X^TY+2X^TX\beta=0 2XTY+2XT=0

X T X β = X T Y X^TX\beta=X^TY XT=XTY

此时,我们可以使用矩阵运算求解模型参数 β \beta β,即:

β = ( X T X ) − 1 X T Y \beta=(X^TX)^{-1}X^TY β=(XTX)1XTY

其中, ( X T X ) − 1 (X^TX)^{-1} (XTX)1 是矩阵 X T X X^TX XTX 的逆矩阵。

最终,我们可以得到多元线性回归模型的公式为:

y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β m x m + ϵ y=\beta_0+\beta_1x_1+\beta_2x_2+...+\beta_mx_m+\epsilon y=β0+β1x1+β2x2+...+βmxm+ϵ

其中, β 0 , β 1 , β 2 , . . . , β m \beta_0,\beta_1,\beta_2,...,\beta_m β0,β1,β2,...,βm 是模型参数, ϵ \epsilon ϵ 是误差项。
得到模型参数后,我们可以使用该模型对新的观测值进行预测。对于一个新的观测值 ( x 1 ∗ , x 2 ∗ , . . . , x m ∗ ) (x_{1*},x_{2*},...,x_{m*}) (x1,x2,...,xm),其预测值为:

y ^ = β 0 + β 1 x 1 ∗ + β 2 x 2 ∗ + . . . + β m x m ∗ \hat{y}=\beta_0+\beta_1x_{1*}+\beta_2x_{2*}+...+\beta_mx_{m*} y^=β0+β1x1+β2x2+...+βmxm

需要注意的是,该预测值仅在模型的假设条件下成立。例如,在多元线性回归中,假设自变量之间不存在多重共线性,误差项服从正态分布等。

此外,我们还需要对模型进行评估,以确定其拟合效果。常用的评估指标包括残差平方和、平均绝对误差、均方误差等。我们还可以使用交叉验证等方法来评估模型的泛化能力。

最后,需要注意的是,在实际应用中,多元线性回归模型可能存在欠拟合或过拟合的问题。欠拟合指模型过于简单,不能很好地拟合数据;过拟合指模型过于复杂,过度拟合了训练数据,导致在测试数据上表现不佳。针对这些问题,我们可以采取一系列方法,如添加正则化项、调整模型超参数等来提高模型的泛化能力。

代码示意

import numpy as np

class MultipleLinearRegression:
    def __init__(self):
        self.coef_ = None
        self.intercept_ = None

    def fit(self, X, y):
        # Add a column of 1s to X to represent the intercept term
        X = np.hstack((np.ones((X.shape[0], 1)), X))

        # Calculate the coefficients using the normal equation
        X_T = np.transpose(X)
        X_T_X = np.dot(X_T, X)
        X_T_X_inv = np.linalg.inv(X_T_X)
        X_T_y = np.dot(X_T, y)
        coef = np.dot(X_T_X_inv, X_T_y)

        # Store the coefficients and intercept
        self.intercept_ = coef[0]
        self.coef_ = coef[1:]

    def predict(self, X):
        # Add a column of 1s to X to represent the intercept term
        X = np.hstack((np.ones((X.shape[0], 1)), X))

        # Predict the y values using the coefficients
        y_pred = np.dot(X, np.hstack(([self.intercept_], self.coef_)))

        return y_pred

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值