回归分析汇总

回归分析是一种预测性的建模技术,它研究的是因变量和自变量之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。

回归分析的作用

  • 找到真正影响因变量的自变量
  • 确定自变量对因变量影响的大小
  • 将回归模型用于预测

评估性能

常采用 M S E MSE MSE M A E MAE MAE以及 R 2 R^2 R2作为评价模型性能的指标

  • 回归平方和(Sum of Squared Regression)
    预测数据与原始数据均值之差的平方和
    S S R = ∑ i = 1 n ( y i ^ − y ˉ ) 2 SSR=\sum_{i=1}^n(\hat{y_i}-\bar{y})^2 SSR=i=1n(yi^yˉ)2

  • 残差平方和(Sum of Squared Errors)
    拟合数据和原始数据对应点的误差的平方和
    S S E = ∑ i = 1 n ( y i − y i ^ ) 2 SSE=\sum_{i=1}^n(y_i-\hat{y_i})^2 SSE=i=1n(yiyi^)2

  • 总偏差平方和(otal sum of squares)
    平均值与真实值的误差,反映与数学期望的偏离程度
    S S T = S S R + S S E = ∑ i = 1 n ( y i − y ˉ ) 2 SST=SSR+SSE=\sum_{i=1}^n(y_i-\bar{y})^2 SST=SSR+SSE=i=1n(yiyˉ)2

  • 决定系数(R-square score)
    R 2 ( y , y ^ ) = 1 − S S R S S T = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2(y,\hat{y})=1-\frac{SSR}{SST}=1-\frac{\sum_{i=1}^n(y_i-\hat{y}_i)^2}{\sum_{i=1}^n(y_i-\bar{y})^2} R2(y,y^)=1SSTSSR=1i=1n(yiyˉ)2i=1n(yiy^i)2

  • 绝对平均误差(Mean absolute error)
    MAE ( y , y ^ ) = 1 n ∑ i = 0 n ∣ y i − y ^ i ∣ \text{MAE}(y,\hat{y})=\frac1{n} \sum _ { i = 0 }^{n}|y_i-\hat{y}_i| MAE(y,y^)=n1i=0nyiy^i

  • 均方误差(Mean squared error)
    M S E ( y , y ^ ) = 1 n S S E = 1 n ∑ i = 0 n ( y i − y ^ i ) 2 \mathrm{MSE}(y,\hat{y})=\frac{1}{n}SSE=\frac1{n}\sum_{i=0}^{n}(y_i-\hat{y}_i)^2 MSE(y,y^)=n1SSE=n1i=0n(yiy^i)2

线性回归(Linear Regression)

线性回归用于预测分析。 线性回归是一种线性方法,用于对标准或标量响应与多个预测变量或解释变量之间的关系进行建模。线性回归侧重于给定预测变量值的响应的条件概率分布。
y = β 0 + β 1 x + μ y=\beta_0+\beta_1x+\mu y=β0+β1x+μ

多元线性回归的基本假设

  • 变量之间的关系是线性的
  • 同方差性,或者变量和误差项的方差必须保持不变(干扰项必须服从随机分布)
  • 所有解释变量都是相互独立的(无多重共线性)
  • 所有变量都是正态分布的

参数估计方法

  • Ordinary Least Square(OLS)普通最小二乘,最小化SSE
    min ⁡ w ∑ i = 1 m ( y i − w T x i ) 2 \min_{\boldsymbol{w}}\sum_{i=1}^m(y_i-\boldsymbol{w}^\mathrm{T}\boldsymbol{x}_i)^2 wmini=1m(yiwTxi)2

  • Weighted Least Squares(WLS)带权重的最小二乘

  • Generalized Least Squares(GLS)广义最小二乘

sklearn中的LinearRegression使用OLS方法,statsmodels中支持OLSWLSGLS等多种方法

多重共线性

多重共线性是指线性回归模型中的解释变量之间由于存在精确或高度相关关系。多重共线性会导致模型失真、参数难以估计、模型稳定性低等等。检验多重共线性有以下方法:

  • 方差膨胀因子VIF,VIF值大于10时(严格是5),代表模型存在严重的多重共线性
  • 对自变量进行相关分析
  • 条件数Cond. No.

消除多重共线性的方法:

  • 删除高度相关的变量(逐步回归法)
  • 在损失函数中引入L2或L1正则项(Ridge和Lasso)
  • 特征合并或者特征组合
  • 特征降维(PCA、因子分析)

statsmodels提供了计算VIF和Cond. No. 的函数

什么时候会在意多重共线性?

如果你所关注的是模型的拟合或者预测效果,多重共线性问题对模型的拟合值和预测值是没有影响的(当然对置信区间是有影响)

如果你关注的是每个解释变量各自对被解释变量的影响(在经济学中称为“结构分析”),那也没有理由因为多重共线性问题而改变模型的结构

线性回归假设检验

模型显著性检验:

F检验:如果Prob(F-statistic)<0.05,则说明在置信度为95%时,可以认为回归模型是成立的。

系数显著性检验:

T检验:如果相应的P值<0.05(0.1),说明该系数在置信度为95%(90%)水平下,系数是显著的。如果系数不显著,说明对应的变量不能添加到模型中,需要对变量进行筛选,重新建立回归模型。

残差自相关性检验:

Durbin-Watson检验:其取值为[0,4],数值越接近2说明越没有自相关,越接近4说明残差具有越强的负自相关,越接近0说明残差具有越强的正自相关。残差中有很强的自相关说明模型需要调整

残差正态性检验:

Jarque-Bera检验:根据线性回归模型的要求,残差必须服从正态分布,所以Prob(JB)>0.5是我们想要的结果,越大越好。

多重共线性检验:

Cond. No.:条件数用来度量多元回归模型自变量之间是否存在多重共线性。条件数取值是大于0的数值,该值越小,越能说明自变量之间不存在多重共线性问题。

  • 一般情况下,Cond.No.<100,说明共线性程度小;
  • 如果100<Cond.No.<1000,则存在较多的多重共线性;
  • 如果Cond.No.>1000,则存在严重的多重共线性。

使用statsmodels进行OLS回归的输出结果

                            OLS Regression Results
==============================================================================
Dep. Variable:                      y   R-squared:                       0.610
Model:                            OLS   Adj. R-squared:                  0.610
Method:                 Least Squares   F-statistic:                     2826.
Date:                Wed, 27 Mar 2024   Prob (F-statistic):               0.00
Time:                        19:35:20   Log-Likelihood:                -15752.
No. Observations:               14447   AIC:                         3.152e+04
Df Residuals:                   14438   BIC:                         3.159e+04
Df Model:                           8
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const        -36.7306      0.775    -47.398      0.000     -38.250     -35.212
x1             0.4467      0.005     89.491      0.000       0.437       0.456
x2             0.0098      0.001     18.316      0.000       0.009       0.011
x3            -0.1188      0.007    -17.000      0.000      -0.133      -0.105
x4             0.7653      0.035     21.760      0.000       0.696       0.834
x5         -1.109e-06   5.94e-06     -0.187      0.852   -1.27e-05    1.05e-05
x6            -0.0044      0.001     -4.832      0.000      -0.006      -0.003
x7            -0.4171      0.008    -49.245      0.000      -0.434      -0.400
x8            -0.4305      0.009    -48.599      0.000      -0.448      -0.413
==============================================================================
Omnibus:                     3065.671   Durbin-Watson:                   2.028
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             9085.339
Skew:                           1.104   Prob(JB):                         0.00
Kurtosis:                       6.196   Cond. No.                     2.31e+05
==============================================================================

多项式回归(Polynomial Regression)

这是线性回归的扩展,用于对因变量和自变量之间的非线性关系进行建模。通过多项式特征,我们可以很容易地拟合目标特征和输入特征之间的一些非线性关系。
y = β 0 + β 1 x 1 + β 2 x 2 + β 3 x 1 x 2 + β 4 x 1 2 + β 5 x 2 2 y=\beta_0+\beta_1x_1+\beta_2x_2+\beta_3x_1x_2+\beta_4x_1^2+\beta_5x_2^2 y=β0+β1x1+β2x2+β3x1x2+β4x12+β5x22

多项式回归不可避免会引入多重共线性

Ramsey’s RESET test for neglected nonlinearity

岭回归(Ridge Regression)

岭回归就是在残差平凡和最小化的基础上加了一个L2范数的惩罚项,L2范数就是平方和开根号,L2正则化只会让参数尽量小,不会取到0
min ⁡ w ( ∑ i = 1 m ( y i − w T x i ) 2 + λ ∥ w ∥ 2 2 ) \min_{\boldsymbol{w}}\left(\sum_{i=1}^m(y_i-\boldsymbol{w}^\mathrm{T}\boldsymbol{x}_i)^2+\lambda\|\boldsymbol{w}\|_2^2\right) wmin(i=1m(yiwTxi)2+λw22)

套索回归(Lasso Regression)

套索回归就是在残差平凡和最小化的基础上加了一个L1范数的惩罚项,L1范数就是绝对值之和,L1正则化会将参数压缩到0
min ⁡ w ( ∑ i = 1 m ( y i − w T x i ) 2 + λ ∥ w ∥ 1 ) \min_{\boldsymbol{w}}\left(\sum_{i=1}^m(y_i-\boldsymbol{w}^\mathrm{T}\boldsymbol{x}_i)^2+\lambda\|\boldsymbol{w}\|_1\right) wmin(i=1m(yiwTxi)2+λw1)

弹性网络回归(ElasticNet Regression)

结合套索回归和岭回归的改进,同时加入L1和L2正则化项
min ⁡ w ( ∑ i = 1 m ( y i − w T x i ) 2 + λ ρ ∥ w ∥ 2 2 + λ ( 1 − ρ ) 2 ∥ w ∥ 1 ) \min_{\boldsymbol{w}}\left(\sum_{i=1}^m(y_i-\boldsymbol{w}^\mathrm{T}\boldsymbol{x}_i)^2+\lambda\rho\|\boldsymbol{w}\|_2^2+\frac{\lambda(1-\rho)}{2}\|\boldsymbol{w}\|_1\right) wmin(i=1m(yiwTxi)2+λρw22+2λ(1ρ)w1)

逐步回归(Stepwise Regression)

逐步回归用于将回归模型与预测模型拟合。它是自动执行的。每一步,都会在解释变量集中添加或减去变量。逐步回归的方法是前向选择、后向消除和双向消除。

  • Forward selection:将自变量逐个引入模型,引入一个自变量后要查看该变量的引入是否使得模型发生显著性变化(F检验),如果发生了显著性变化,那么则将该变量引入模型中,否则忽略该变量,直至所有变量都进行了考虑。即将变量按照贡献度从大到小排列,依次加入。
  • Backward elimination:与Forward selection选择相反,在这个方法中,将所有变量放入模型,然后尝试将某一变量进行剔除,查看剔除后对整个模型是否有显著性变化(F检验),如果没有显著性变化则剔除,若有则保留,直到留下所有对模型有显著性变化的因素。即将自变量按贡献度从小到大,依次剔除。
  • Bidirectional elimination:逐步筛选法。是在第一个的基础上做一定的改进,当引入一个变量后,首先查看这个变量是否使得模型发生显著性变化(F检验),若发生显著性变化,再对所有变量进行t检验,当原来引入变量由于后面加入的变量的引入而不再显著变化时,则剔除此变量,确保每次引入新的变量之前回归方程中只包含显著性变量,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止,最终得到一个最优的变量集合。

逻辑斯特回归

在线性回归的基础上,对输出结果应用sigmoid函数(分类器),作为类判别概率

激活函数

s i g m o i d ( x ) = 1 1 + e − x s i g m o i d ′ ( x ) = e − x ( 1 + e − x ) 2 = s i g m o i d ( x ) ( 1 − s i g m o i d ( x ) ) sigmoid(x)=\frac{1}{1+e^{-x}}\\ sigmoid^{'}(x)=\frac{e^{-x}}{(1+e^{-x})^2}=sigmoid(x)(1-sigmoid(x)) sigmoid(x)=1+ex1sigmoid(x)=(1+ex)2ex=sigmoid(x)(1sigmoid(x))

对数损失函数

对数损失(Log Loss),也称为二元交叉熵损失(Binary Cross-Entropy Loss),是一种常用的损失函数,主要用于二分类问题中,用于衡量模型预测结果与真实标签之间的差异。
L o g   L o s s = − 1 N ∑ i = 1 N [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \mathrm{Log~Loss}=-\frac1N\sum_{i=1}^N\left[y_i\log(\hat{y}_i)+(1-y_i)\log(1-\hat{y}_i)\right] Log Loss=N1i=1N[yilog(y^i)+(1yi)log(1y^i)]

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中有多种方法可以进行回归分析,以下是其中两种比较常用的方法: 1. 使用scikit-learn库进行回归分析 scikit-learn是Python中一个非常流行的机器学习库,其中包含了多种回归分析方法。以下是一个示例代码,使用线性回归模型对数据进行拟合: ```python from sklearn.linear_model import LinearRegression import numpy as np # 准备数据 x = np.array([1, 2, 3, 4, 5]).reshape((-1, 1)) y = np.array([2, 4, 5, 4, 5]) # 创建一个线性回归模型 model = LinearRegression() # 拟合数据 model.fit(x, y) # 输出结果 r_sq = model.score(x, y) print('coefficient of determination:', r_sq) print('intercept:', model.intercept_) print('slope:', model.coef_) ``` 这个程序会输出线性回归模型的相关参数,包括确定系数、截距和斜率。 2. 使用statsmodels库进行回归分析 statsmodels是Python中一个专门用于统计分析的库,其中包括了多种回归分析方法。以下是一个示例代码,使用普通最小二乘法对数据进行拟合: ```python import statsmodels.api as sm import numpy as np # 准备数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 5, 4, 5]) # 添加常数列 x = sm.add_constant(x) # 创建一个OLS模型 model = sm.OLS(y, x) # 拟合数据 results = model.fit() # 输出结果 print(results.summary()) ``` 这个程序会输出拟合结果的汇总信息,包括回归系数、截距、确定系数等。 以上两种方法都可以用于回归分析,具体选择哪种方法取决于个人喜好和具体需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值