精华内容
下载资源
问答
  • 拓端tecdat|R方和线性回归拟合优度

    万次阅读 2019-09-04 15:41:11
    R方由协变量X解释的结果Y的变化比例通常被描述为拟合优度的度量。这当然看起来非常合理,因为R平方测量观察到的Y值与模型的预测(拟合)值的接近程度。 然而,要记住的重要一点是,R平方不会向我们提供有关我们...

    原文连接:http://tecdat.cn/?p=6267

    原文出处:拓端数据部落公众号

    我最近一直在教授建模课程,并一直在阅读和思考适合度的概念。 R方由协变量X解释的结果Y的变化比例通常被描述为拟合优度的度量。这当然看起来非常合理,因为R平方测量观察到的Y值与模型的预测(拟合)值的接近程度。

    然而,要记住的重要一点是,R平方不会向我们提供有关我们的模型是否正确指定的信息。也就是说,它没有告诉我们我们是否正确地指定了结果Y的期望如何取决于协变量。特别是,R平方的高值并不一定意味着我们的模型被正确指定。用一个简单的例子说明这是最简单的。

    首先,我们将使用R模拟一些数据。为此,我们从标准正态分布(均值为零,方差一)中随机生成X值。然后,我们生成结果Y等于X加上随机误差,再次使用标准正态分布:

    n < -  1000
    set.seed(512312)
    x < -  rnorm(n)
    y < -  x + rnorm(n)

    然后我们可以拟合Y的(正确的)线性回归模型,其中X作为协变量:

    summary(mod1)
    
    Call:
    lm(formula = y ~ x)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -2.8571 -0.6387 -0.0022  0.6050  3.0716 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept)  0.02193    0.03099   0.708    0.479    
    x            0.93946    0.03127  30.040   <2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 0.98 on 998 degrees of freedom
    Multiple R-squared:  0.4748,    Adjusted R-squared:  0.4743 
    F-statistic: 902.4 on 1 and 998 DF,  p-value: < 2.2e-16

     

    我们还可以绘制数据,用模型中的拟合线覆盖:

     

    观察到(Y,X)数据并重叠拟合线。 

    现在让我们重新生成数据,但是生成Y使得它的期望值是X的指数函数:

     
    x < -  rnorm(n)
    y < -  exp(x)+ rnorm(n)
    

    当然,在实践中,我们不模拟我们的数据 - 我们观察或收集数据,然后尝试将合理的模型拟合到它。因此,和以前一样,我们可以从拟合简单的线性回归模型开始,该模型假设Y的期望是X的线性函数:

    Call:
    lm(formula = y ~ x)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -3.5022 -0.9963 -0.1706  0.6980 21.7411 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept)  1.65123    0.05220   31.63   <2e-16 ***
    x            1.53517    0.05267   29.15   <2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 1.651 on 998 degrees of freedom
    Multiple R-squared:  0.4598,    Adjusted R-squared:  0.4593 
    F-statistic: 849.5 on 1 and 998 DF,  p-value: < 2.2e-16

    与第一种情况不同,我们获得的参数估计(1.65,1.54)不是“真实”数据生成机制中参数的无偏估计,其中Y的期望是exp(X)的线性函数。此外,我们看到我们得到的R平方值为0.46,再次表明X(包括线性)解释了Y中相当大的变化。我们可能认为这意味着我们使用的模型,即期望Y在X中是线性的,是合理的。但是,如果我们再次绘制观察到的数据,并用拟合线覆盖它:

    将拟合线叠加到观察到的数据上清楚地表明我们使用的模型未正确指定,尽管R平方值非常大。特别地,我们看到对于X的低值和高值,拟合值太小。这显然是Y的期望取决于exp(X)这一事实的结果,而我们使用的模型假设它是X的线性函数。

    这个简单的例子说明,尽管R平方是一个重要的度量,但高值并不意味着我们的模型被正确指定。可以说,描述R平方的更好方法是“解释变异”的度量。为了评估我们的模型是否正确指定,我们应该使用模型诊断技术,例如针对协变量的残差图或线性预测器。

    展开全文
  • 拟合了Y关于X的线性模型之后,我们不但想知道这种线性关系是否真的存在,还想度量模型对数据的拟合效果。拟合效果可以采用下面的方法之一进行度量,这些方法有很高的关联性。 1.Y对X的散点图、Y对Y的散点图 Y...

    在拟合了Y关于X的线性模型之后,我们不但想知道这种线性关系是否真的存在,还想度量模型对数据的拟合效果。拟合效果可以采用下面的方法之一进行度量,这些方法有很高的关联性。

     

    1.Y对X的散点图、Y对Y的散点图

        Y与X之间线性关系的强度还可以通过考察Y对X或Y对Y\widehat{}的散点图和相关系数Cor(X,Y)(Cor(Y\widehat{},Y))的值直接度量。散点图上的点离一条直线越近(或Cor(X,Y)/Cor(X,Y\widehat{})越接近1、-1),Y与X(Y\widehat{})之间的线性关系越强。这个方法是不正规的且有主观性,但只需要线性假定。

       详细步骤见《例解回归分析》(原书第五版)(美)Samprit Chatterjee   Ali S.Hadi 著 (p36)

    2.回归参数和相关系数的t检验

       X是否具备对Y的预测能力,一般可以通过相关系数和相应的Y对X的散点图来衡量。但是这只是一种视觉上的直观判断方法。现在提供一种更严格化的数量化方法:对回归参数\beta做假设检验。

       在模型中,若\beta=0意味着Y和X之间没有线性关系,若\beta!=0,则Y和X之间存在线性关系。因此对假设\beta=0做检验。前提是对于X的每一个固定的值,所有的\xi都相互独立,且都服从均值为0,方差为\sigma ^{2}的正态分布。

       详细步骤见《例解回归分析》(原书第五版)(美)Samprit Chatterjee   Ali S.Hadi 著 (p30)

    3.R^{2}拟合优度样本决定系数

        R^{2}是一个拟合优度指数,表示的是响应变量Y的总离差平方和中能由预测变量X解释的比例。0<= R^{2}<=1,如果R^{2}接近1,说明Y的绝大部分变化可由X解释。因此,R^{2}称为决定系数,反应了预测变量对响应变量的解释能力。

       详细步骤见《例解回归分析》(原书第五版)(美)Samprit Chatterjee   Ali S.Hadi 著 (p37)

        

     

    参考文献

       详细步骤见《例解回归分析》(原书第五版)(美)Samprit Chatterjee   Ali S.Hadi 著

     

     

    展开全文
  • 大家好,我是东哥。 前一篇文章给大家介绍了...线性回归拟合优度 线性回归假设检验 线性回归诊断 线性回归拟合优度 1. 判定系数 回归直线与各观测点的接近程度成为回归直线对数据的拟合优度。而评判直线拟合优度

    大家好,我是东哥。

    前一篇文章给大家介绍了线性回归的模型假设,损失函数,参数估计,和简单的预测。具体内容请看下面链接:【机器学习笔记】:大话线性回归(一)

    但其实还有很多问题需要我们解决:这个模型的效果如何?如何评判这个效果?开始线性模型的假设成立吗?如何验证这些假设?还会有其它问题会影响模型效果吗?带着这些问题我们开始本篇的内容。

    • 线性回归拟合优度

    • 线性回归假设检验

    • 线性回归诊断

    线性回归拟合优度

    1. 判定系数

    回归直线与各观测点的接近程度成为回归直线对数据的拟合优度。而评判直线拟合优度需要一些指标,其中一个就是判定系数

    我们知道,因变量y值有来自两个方面的影响:

    (1)来自x值的影响,也就是我们预测的主要依据

    (2)来自无法预测的干扰项ϵ的影响

    如果一个回归直线预测非常准确,那么它就需要让来自x的影响尽可能的大,而让来自无法预测干扰项的影响尽可能的小,也就是说x影响占比越高,预测效果就越好。下面我们看一下如何定义这些影响,并形成指标。
    S S T = ∑ ( y i − y ˉ ) 2 S S R = ∑ ( y i ^ − y ˉ ) 2 S S E = ∑ ( y i − y ^ ) 2 SST = \sum(y_i-\bar{y})^2 \\ SSR = \sum( \hat{y_i}-\bar{y})^2 \\ SSE = \sum( y_i- \hat{y})^2 \\ SST=(yiyˉ)2SSR=(yi^yˉ)2SSE=(yiy^)2

    • SST(总平方和):变差总平方和

    • SSR(回归平方和):由x与y之间的线性关系引起的y变化

    • SSE(残差平方和):除x影响之外的其它因素引起的y变化

    在这里插入图片描述

    它们之间的关系是: S S T = S S R + S S E SST=SSR+SSE SST=SSR+SSE。根据我们前面的分析,SSR越高,则代表回归预测越准确,观测点越是靠近直线,也即 S S R / S S T SSR/SST SSR/SST越大,直线拟合越好。因此,判定系数的定义就自然的引出来了,我们一般称为R2

    R 2 = S S R S S T = ∑ ( y i ^ − y ˉ ) 2 ∑ ( y i − y ˉ ) 2 = 1 − ∑ ( y i − y ^ ) 2 ∑ ( y i − y ˉ ) 2 R^2 = \frac{SSR}{SST}=\frac{\sum( \hat{y_i}-\bar{y})^2}{\sum(y_i-\bar{y})^2}=1-\frac{\sum( y_i- \hat{y})^2 }{\sum(y_i-\bar{y})^2} R2=SSTSSR=(yiyˉ)2(yi^yˉ)2=1(yiyˉ)2(yiy^)2

    还是用上篇的数据为例,利用R2来测试一下拟合的效果是怎么样的。

    def R2square(yArr,y_hat):
        n = len(yArr)
        yArr = np.array(yArr).reshape(n,1)
        y_hat = np.array(y_hat).reshape(n,1)
        # ssr
        diff_yhat = y_predict - np.mean(yArr)
        ssr = np.sum(np.power(diff_yhat,2))
        # sst
        diff_y = yArr - np.mean(yArr)
        sst = np.sum(np.power(diff_y,2))
        return round(ssr/sst,2)
    R2square(yArr,y_predict)
    >>0.97
    

    可以看到最后的得分是0.97,说明拟合程度还是很不错的。

    2. 估计标准误差

    判定系数R2的意义是由x引起的影响占总影响的比例来判断拟合程度的。当然,我们也可以从误差的角度去评估,也就是用残差SSE进行判断。估计标准误差是均方残差的平方根,可以度量各实际观测点在直线周围散布的情况。

    S e = ∑ ( y i − y ^ ) 2 n − 2 = S S E n − 2 = M S E S_e = \sqrt{\frac{\sum( y_i- \hat{y})^2 }{n-2}}=\sqrt{\frac{SSE}{n-2}}=\sqrt{MSE} Se=n2(yiy^)2 =n2SSE =MSE

    估计标准误差与判定系数相反,se反映了预测值与真实值之间误差的大小, S e S_e Se越小说明拟合度越高,相反, S e S_e Se越大说明拟合度越低。仍然用之前的数据集进行测试:

    def MSEsqrt(yArr,y_hat):
        n = len(yArr)
        yArr = np.array(yArr).reshape(n,1)
        y_hat = np.array(y_hat).reshape(n,1)
        diff = yArr - y_predict
        # sse
        sse = np.sum(np.power(diff,2))
        return round(np.sqrt(sse/(n-2)),2)
    
    MSEsqrt(yArr,y_predict)
    >>0.08
    

    可以看到,平均的标准误差只有0.08,非常低,说明了拟合效果很不错,同时也证实了R2结果的正确性。

    线性回归的显著性检验

    要想知道我们根据样本拟合的模型是否可以有效地预测或估计,我们需要对拟合的模型进行显著性检验。回归分析中的显著性检验主要包括两方面内容:线性关系检验;回归系数检验。

    1. 线性关系检验

    线性关系检验是指多个自变量x和因变量y之间的线性关系是否显著,它们之间是否可以用一个线性模型表示。检验统计量使用F分布,其定义如下:
    F = S S R / k S S R / ( n − k − 1 ) = M S R M S E ∼ F ( k , n − k − 1 ) F=\frac{SSR/k}{SSR/(n-k-1)}=\frac{MSR}{MSE}\sim F{(k,n-k-1)} F=SSR/(nk1)SSR/k=MSEMSRF(k,nk1)

    • SSR的自由度为:自变量的个数k

    • SSE的自由度为:n-k-1

    利用F统计量,线性关系检验的一般步骤为:

    (1)提出原假设和备择假设

    H 0 : β 1 = β 2 = . . . = β k = 0 H 1 : β 1 , β 2 . . . β k 至 少 有 一 个 不 等 于 0 H_0:\beta_1=\beta_2=...=\beta_k=0 \\ H_1:\beta_1,\beta_2...\beta_k至少有一个不等于0 \\ H0:β1=β2=...=βk=0H1:β1,β2...βk0

    (2)计算检验的统计量F

    F = S S R / k S S R / ( n − k − 1 ) = M S R M S E ∼ F ( k , n − k − 1 ) F=\frac{SSR/k}{SSR/(n-k-1)}=\frac{MSR}{MSE}\sim F{(k,n-k-1)} F=SSR/(nk1)SSR/k=MSEMSRF(k,nk1)

    (2)作出统计决策

    与假设检验相同,如果给定显著性水平α,则根据两个自由度k和n-k-1进行F分布的查表。若图片,则拒绝原假设,说明发生了小概率事件,若图片,则不拒绝原假设。当然,我们也可以直接通过观察P值来决定是否拒绝原假设。

    通过上面步骤的假设,我们也看到了:在多元线性回归中,只要有一个自变量系数不为零(即至少一个自变量系数与因变量有线性关系),我们就说这个线性关系是显著的。如果不显著,说明所有自变量系数均为零。

    2. 回归系数检验

    回归系数的显著性检验与线性检验不同,它要求对每一个自变量系数进行检验,然后通过检验结果可判断出自变量是否显著。因此,我们可以通过这种检验来判断一个特征(自变量)的重要性,并对特征进行筛选。检验统计量使用t分布,步骤如下:

    (1)提出原假设和备择假设

    对于任意参数 ( β i , i = 1 , 2 , . . . k ) (\beta_i,i=1,2,...k) (βi,i=1,2,...k),有:
    H 0 : β i = 0 H 1 : β i ≠ 0 H_0 :\beta_i=0 \\ H_1 :\beta_i\ne0 H0:βi=0H1:βi=0
    (2)计算检验统计量t
    t i = β ^ i s β ^ i ∼ t ( n − k − 1 ) s β ^ i = s e ∑ x i 2 − 1 n ( ∑ x i ) 2 t_i=\frac{\hat{\beta}_i}{s_{\hat{\beta}_i}}\sim t(n-k-1) \\ s_{\hat{\beta}_i}=\frac{s_e}{\sqrt{\sum{x_i}^2-\frac{1}{n}(\sum{x_i})^2}} ti=sβ^iβ^it(nk1)sβ^i=xi2n1(xi)2 se

    (3)作出统计决策

    如前面一样,我们需要根据自由度 n − k − 1 n-k-1 nk1查t分布表,并通过α或者p值判断显著性。

    3. Python代码实现

    下面通过一段代码来说明上面两种显著性检验,为了方便我们直接通过statsmodels模型引入ols模型进行回归拟合,然后查看总结表,其中包括F和t统计量结果。

    import statsmodels.formula.api as smf
    import statsmodels.api as sm
    
    # 创建线性回归最小二乘法模型
    model = sm.OLS(yArr,xArr)
    results = model.fit()
    results.summary()
    

    在这里插入图片描述

    通过上面结果我们清楚看到:

    • F统计量的p值非常小,拒绝原假设,说明线性关系显著

    • 两个回归系数的t统计量p值均为0,拒绝原假设,说明回归系数也都显著

    线性回归的诊断

    线性回归的诊断包括很多内容,比较重要的几个有:

    (1)残差分析

    (2)线性相关性检验

    (3)多重共线性分析

    (4)强影响点分析

    下面我们开始分别介绍这几个需要诊断的内容。

    残差分析

    还记得我们的模型是怎么来的吗?没错,线性回归模型是基于一些假设条件的:除了自变量和因变量有线性相关关系外,其它假设基本都是关于残差的,主要就是残差 ϵ ϵ ϵ独立同分布,服从 N ∼ ( 0 , σ 2 ) N\sim(0,\sigma^2) N(0,σ2)

    总结一下关于残差有三点假设:

    • 正态性检验;
    • 独立性检验;
    • 方差齐性检验。

    下面我们将对这些假设逐一诊断,只有假设被验证,模型才是成立的。

    1. 正态性检验

    干扰项(即残差),服从正态分布的本质是要求因变量服从变量分布。 因此,验证残差是否服从正态分布就等于验证因变量的正态分布特性。关于正态分布的检验通常有以下几种方法。

    (1)直方图法:

    直方图法就是根据数据分布的直方图与标准正态分布对比进行检验,主要是通过目测。比如本例中我们的直方图可以这样显示出来:

    residual = results.resid
    sns.distplot(residual,
                 bins = 10,
                 kde = False,
                 color = 'blue',
                 fit = stats.norm)
    plt.show()
    

    在这里插入图片描述

    通过目测,我们发现残差的数据分布并不是很好的服从正态分布,因此这里是不满足假设条件的。

    (2)PP图和QQ图:

    PP图是对比正态分布的累积概率值和实际分布的累积概率值。statsmodels中直接提供了该检测方法:

    # pp图法
    pq = sm.ProbPlot(residual)
    pq.ppplot(line='45')
    

    QQ图是通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况。对应于正态分布的QQ图,就是由标准正态分布的分位数为横坐标,样本值为纵坐标的散点图。 同样的,我们通过一段代码来观察一下:

    # qq图法
    pq = sm.ProbPlot(residual)
    pq.qqplot(line='q')
    

    在这里插入图片描述

    pp图和qq图判断标准是:如果观察点都比较均匀的分布在直线附近,就可以说明变量近似的服从正态分布,否则不服从正态分布。

    从pp图和qq图可以看出,样本点并不是十分均匀地落在直线上,有的地方有一些较大的偏差,因此判断不是正态分布。

    (3)Shapiro检验:

    这种检验方法均属于非参数方法,先假设变量是服从正态分布的,然后对假设进行检验。一般地数据量低于5000则可以使用Shapiro检验,大于5000的数据量可以使用K-S检验,这种方法在scipy库中可以直接调用:

    # shapiro检验
    import scipy.stats as stats
    stats.shapiro(residual)
    
    out:
    (0.9539670944213867, 4.640808128e-06)
    

    上面结果两个参数:第一个是Shaprio检验统计量值,第二个是相对应的p值。可以看到,p值非常小,远远小于0.05,因此拒绝原假设,说明残差不服从正态分布。

    同样的方法还有KS检验,也可以直接通过scipy调用进行计算。

    2. 独立性检验

    残差的独立性可以通过Durbin-Watson统计量(DW)来检验。

    原假设: p = 0 p=0 p=0(即前后扰动项不存在相关性)

    背责假设: p ≠ 0 p\ne0 p=0(即近邻的前后扰动项存在相关性)

    DW统计量公式如下:

    D W = ∑ t = 2 T ( u t ^ − u t − 1 ^ ) 2 ∑ t = 1 T u t ^ 2 = 2 ( 1 − p ^ ) DW=\frac{\sum_{t=2}^{T}{(\hat{u_t}-\hat{u_{t-1}})^2}}{\sum_{t=1}^{T}{\hat{u_t}^2}}=2(1-\hat{p}) DW=t=1Tut^2t=2T(ut^ut1^)2=2(1p^)

    判断标准是:

    • p=0,DW=2:扰动项完全不相关

    • p=1,DW=0:扰动项完全正相关

    • p=-1,DW=4:扰动项完全负相关

    在我们前面使用的statsmodels结果表中就包含了DW统计量:

    在这里插入图片描述

    DW值为2.192,说明残差之间是不相关的,也即满足独立性假设。

    3. 方差齐性检验

    如果残差随着自变量增发生随机变化,上下界基本对称,无明显自相关,方差为齐性,我们就说这是正常的残差。判断方差齐性检验的方法一般有两个:图形法,BP检验。

    (1)图形法

    图形法就是画出自变量与残差的散点图,自变量为横坐标,残差为纵坐标。下面是残差图形的代码:

    # 图形法
    var1 = np.array(xArr)[:,1]
    plt.scatter(np.array(xArr)[:,1], residual)
    plt.hlines(y = 0,
               xmin = np.min(var1),
               xmax = np.max(var1),
              color = 'red',
              linestyles = '--')
    plt.xlabel('var0')
    plt.ylabel('residual')
    plt.show()
    

    图形法可以看出:残差的方差(即观察点相对红色虚线的上下浮动大小)不随着自变量变化有很大的浮动,说明了残差的方差是齐性的。

    如果残差方差不是齐性的,有很多修正的方法,比如加权最小二乘法,稳健回归等,而最简单的方法就是对变量取自然对数。而取对数从业务上来说也是有意义的,解释变量和被解释变量的表达形式不同,对回归系数的解释也不同。下面是不同转换情况下的解释:

    在这里插入图片描述

    对数转换后的效果可以通过R2或者修改R2的结果比对得出,如果方差通过取对数变换变成齐性,那么它的R2应该比变换之前数值高,即会取得更好的效果。

    (2)BP检验法

    这种方法也是一种假设检验的方法,其原假设为:残差的方差为一个常数,然后通过计算LM统计量,判断假设是否成立。在statsmodels中也同样有相应的方法可以实现BP检查方法。

    # BP检验
    sm.stats.diagnostic.het_breuschpagan(residual,results.model.exog)
    
    out:
    (0.16586685109032384,
     0.6838114989412791,
     0.1643444790856123,
     0.6856254489662914)
    

    上述参数:

    • 第一个为:LM统计量值

    • 第二个为:响应的p值,0.68远大于显著性水平0.05,因此接受原假设,即残差方差是一个常数

    • 第三个为:F统计量值,用来检验残差平方项与自变量之间是否独立,如果独立则表明残差方差齐性

    • 第四个为:F统计量对应的p值,也是远大于0.05的,因此进一步验证了残差方差的齐性。

    参考:

    统计学,贾俊平

    计量经济学导论,伍德里奇

    从零开始学Python数据分析与挖掘,刘顺祥

    Python数据科学技术详解与商业实践,常国珍

    原创不易,欢迎点赞。

    欢迎关注东哥的原创公众号:Python数据科学

    展开全文
  • 一个学习线性回归方面的文档,参加数学建模的可以学习
  • 建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度拟合优度是指回归方程对观测值的拟合程度。度量...
  • 今天小编就为大家分享一篇python 线性回归分析模型检验标准--拟合优度详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度拟合优度是指回归方程对观测值的拟合程度。度量...

    建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度。

    拟合优度是指回归方程对观测值的拟合程度。度量拟合优度的统计量是判定系数R^2。R^2的取值范围是[0,1]。R^2的值越接近1,说明回归方程对观测值的拟合程度越好;反之,R^2的值越接近0,说明回归方程对观测值的拟合程度越差。

    拟合优度问题目前还没有找到统一的标准说大于多少就代表模型准确,一般默认大于0.8即可

     

    拟合优度的公式:R^2 = 1 - RSS/TSS

    注: RSS 离差平方和 ; TSS 总体平方和

    理解拟合优度的公式前,需要先了解清楚几个概念:总体平方和、离差平方和、回归平方和。

    一、总体平方和、离差平方和、回归平方和

    回归平方和 ESS,残差平方和 RSS,总体平方和 TSS

    TSS(Total Sum of Squares)表示实际值与期望值的离差平方和,代表变量的总变动程度

    ESS(Explained Sum of Squares)表示预测值与期望值的离差平方和,代表预测模型拥有的变量变动程度

    RSS(Residual Sum of Squares)表示实际值与预测值的离差平方和,代表变量的未知变动程度

    各个平方和的计算公式如下:

     

     

     

    二、拟合优度

    接上一节内容可知,我们拿实际值与期望值的离差平方和作为整体变量的总变动程度,这个变动程度就是我们建模型的目的,我们建立模型就是为了模拟这个变动程度。

    建立模型后,整体变量的总变动程度(TSS)可以划分为两部分:模型模拟的变动程度(ESS)和未知的变动程度(RSS)

    通常来说,预测模型拥有的变量变动程度在总变动程度中的占比越高,代表模型越准确,当RSS=0时,表示模型能完全模拟变量的总变动。

    回到文章开头的拟合优度公式:R^2 = 1 - RSS/TSS 。是不是很好理解了!

     

    假设R^2 = 0.8,意味着咱们建立的模型拥有的变动程度能模拟80%的总变动程度,剩下20%为未知变动。

    三、例子

    对于学生而言,现在要探索一下学生的学习成绩与单一的学习时间是否有关系,给出两组数据如下:

    '学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75, 2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
    '分数':[10,22,13,43,20,22,33,50,62,48,55,75,62,73,81,76,64,82,90,93]

    常识理解,学习时间越长,分数一般都会越高,两者是正比关系,因为就一个自变量,直接用sklearn,算出截距和斜率即可

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from pandas import DataFrame,Series
    from sklearn.cross_validation import train_test_split
    from sklearn.linear_model import LinearRegression
    
    #创建数据集
    examDict  = {'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,
                         2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
                 '分数':[10,22,13,43,20,22,33,50,62,
                       48,55,75,62,73,81,76,64,82,90,93]}
    
    #转换为DataFrame的数据格式
    examDf = DataFrame(examDict)
    #examDf
    #绘制散点图
    plt.scatter(examDf.分数,examDf.学习时间,color = 'b',label = "Exam Data")
    
    #添加图的标签(x轴,y轴)
    plt.xlabel("Hours")
    plt.ylabel("Score")
    #显示图像
    plt.show()
    
    #将原数据集拆分训练集和测试集
    exam_X = examDf.学习时间
    exam_Y = examDf.分数
    X_train,X_test,Y_train,Y_test = train_test_split(exam_X,exam_Y,train_size=0.8)
    #X_train为训练数据标签,X_test为测试数据标签,exam_X为样本特征,exam_y为样本标签,train_size 训练数据占比
     
    print("原始数据特征:",exam_X.shape,
          ",训练数据特征:",X_train.shape,
          ",测试数据特征:",X_test.shape)
     
    print("原始数据标签:",exam_Y.shape,
          ",训练数据标签:",Y_train.shape,
          ",测试数据标签:",Y_test.shape)
    
    model = LinearRegression()
     
    #对于模型错误我们需要把我们的训练集进行reshape操作来达到函数所需要的要求
    # model.fit(X_train,Y_train)
     
    #reshape如果行数=-1的话可以使我们的数组所改的列数自动按照数组的大小形成新的数组
    #因为model需要二维的数组来进行拟合但是这里只有一个特征所以需要reshape来转换为二维数组
    X_train = X_train.values.reshape(-1,1)
    X_test = X_test.values.reshape(-1,1)
     
    model.fit(X_train,Y_train)
    a  = model.intercept_#截距
    b = model.coef_#回归系数
    print("最佳拟合线:截距",a,",回归系数:",b)
    
    

     

     接下来算出拟合优度看看 ,拟合优度0.83,符合要求

    # 用训练集进行拟合优度,验证回归方程是否合理
    def get_lr_stats(x, y, model):
        message0 = '一元线性回归方程为: '+'\ty' + '=' + str(model.intercept_)+' + ' +str(model.coef_[0]) + '*x'
        from scipy import stats
        n = len(x)
        y_prd = model.predict(x)
        Regression = sum((y_prd - np.mean(y))**2) # 回归平方和
        Residual   = sum((y - y_prd)**2)          # 残差平方和
        total = sum((y-np.mean(y))**2) #总体平方和
        R_square   = 1-Residual / total # 相关性系数R^2
        message1 = ('相关系数(R^2): ' + str(R_square) + ';' + '\n'+ '总体平方和(TSS): ' +  str(total) + ';' + '\n')
        message2 = ('回归平方和(RSS): ' + str(Regression) + ';' + '\n残差平方和(ESS): ' +  str(Residual) + ';' + '\n')
        return print(message0 +'\n' +message1 + message2 )
    
    get_lr_stats(X_train,Y_train,model)
    

    如果需要,可以把所有点和回归直线画出来,直观感受一下

    #训练数据的预测值
    y_train_pred = model.predict(X_train)
    #绘制最佳拟合线:标签用的是训练数据集中的极值预测值
    X_train_pred = [min(X_train),max(X_train)]
    y_train_pred = [a+b*min(X_train),a+b*max(X_train)]
    plt.plot(X_train_pred, y_train_pred, color='green', linewidth=3, label="best line")
    
    #测试数据散点图
    plt.scatter(X_test, Y_test, color='red', label="test data")
    plt.scatter(X_train, Y_train, color="blue", label="train data")
    
    #添加图标标签
    plt.legend(loc=2)
    plt.xlabel("Hours")
    plt.ylabel("Score")
    #显示图像
    plt.savefig("lines.jpg")
    plt.show()
    #计算拟合优度
    score = model.score(X_test,Y_test)
    print(score)

    展开全文
  • 建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度拟合优度是指回归方程对观测值的拟合程度。度量拟合...
  • 拟合优度 解释变量对被解释变量的解释比例 值得注意的是,拟合优度并不一定随解释变量个数的增多而变大(当然,若增加的x是显著的,拟合优度会变大,即模型的解释力度变强) 修正后的拟合优度 在原基础上考虑了自由...
  • 建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度拟合优度是指回归方程对观测值的拟合程度。度量拟合...
  • 在这篇文章中,我们将看一下Poisson回归拟合优度测试与个体计数数据。许多软件包在拟合Poisson回归模型时在输出中提供此测试,或者在拟合此类模型(例如Stata)之后执行此测试,这可能导致研究人员和分析人员依赖...
  • 建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度拟合优度是指回归方程对观测值的拟合程度。度量拟合...
  • 拟合优度R2

    万次阅读 2019-05-07 18:15:08
    拟合优度定义近期做多元回归分析拟合工作中,在进行线性拟合时,决定系数(又称拟合优度)上不去(卡在0.3左右)一直是困扰工作进度的一个大问题。在经过多元高阶多项式和指数多项式等方法尝试后,虽有一定提高...
  • 在依赖模型得出结论或预测未来结果之前,我们应尽可能检查我们假设的模型是否正确指定...在这篇文章中,我们将看一下 Hosmer-Lemeshow逻辑回归拟合优度检验。 Hosmer-Lemeshow拟合优度检验 Hosmer-Lemeshow...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,002
精华内容 800
关键字:

线性回归拟合优度