精华内容
下载资源
问答
  • 一元线性回归估计式
    千次阅读
    2021-08-01 00:42:31

      这篇文章详细推导了一元线性回归方程的参数解,供新手朋友参考。
      假定一元线性回归方程的具体形式为
    y = a + b x (1) y=a+bx \tag{1} y=a+bx(1)
    现在,为确定参数 a , b a,b a,b进行了 n n n次观测,观测结果为:
    i 1 2 3 ⋯ n x x 1 x 2 x 3 ⋯ x n y y 1 y 2 y 3 ⋯ y n \begin{array}{c|ccccc} i & \text{1} & \text{2} & \text{3} & \cdots & \text{n} \\ \hline x & x_1 & x_2 & x_3 & \cdots & x_n\\ y & y_1 & y_2 & y_3 & \cdots & y_n \\ \end{array} ixy1x1y12x2y23x3y3nxnyn
      参数估计即从这 n n n组数据中解出 a , b a,b a,b。由于观测不可避免的带有误差(观测仪器、人为或环境因素引起),故 n n n组方程
    { y 1 = a + b x 1 y 2 = a + b x 2 ⋮ y n = a + b x n (2) \left\{ \begin{array}{c} y_1=a+bx_1 \\ y_2=a+bx_2 \\ \vdots \\ y_n=a+bx_n \\ \end{array} \right. \tag{2} y1=a+bx1y2=a+bx2yn=a+bxn(2)
    不相容(为矛盾方程组)。为消除矛盾并确定 a , b a,b a,b的最佳估值,可采用最小二乘法来求解,目标函数为
    Q = ∑ i = 1 n ( y i − a − b x i ) 2 = m i n (3) Q=\sum_{i=1}^n \left ( y_i-a-bx_i \right ) ^2 = min \tag{3} Q=i=1n(yiabxi)2=min(3)
    由于 Q Q Q是关于 a , b a,b a,b的凸函数《南瓜书》),根据凸函数极值特性,可知在 ∂ Q ∂ a = 0 \frac{ \partial Q}{\partial a}=0 aQ=0 ∂ Q ∂ b = 0 \frac{ \partial Q}{\partial b}=0 bQ=0对应的 a , b a,b a,b处取得极小值(最小值)。
       Q Q Q关于 a , b a,b a,b的偏导数如下
    ∂ Q ∂ a = ∑ i = 1 n 2 ( y i − a − b x i ) ⋅ ( − 1 ) = 2 ∑ i = 1 n ( a + b x i − y i ) (4) \frac{\partial Q}{\partial a}=\sum_{i=1}^n 2 \left (y_i-a-bx_i \right )\cdot(-1) =2 \sum_{i=1}^n \left (a+bx_i-y_i \right ) \tag{4} aQ=i=1n2(yiabxi)(1)=2i=1n(a+bxiyi)(4)
    ∂ Q ∂ b = ∑ i = 1 n 2 ( y i − a − b x i ) ⋅ ( − x i ) = 2 ∑ i = 1 n x i ( a + b x i − y i ) (5) \frac{\partial Q}{\partial b}=\sum_{i=1}^n 2 \left (y_i-a-bx_i \right )\cdot(-x_i) =2 \sum_{i=1}^n x_i \left (a+bx_i-y_i \right ) \tag{5} bQ=i=1n2(yiabxi)(xi)=2i=1nxi(a+bxiyi)(5)
    当令 ( 4 ) = 0 (4)=0 (4)=0可得:
    ∑ i = 1 n ( a + b x i − y i ) = 0    ⟹    n a + b ∑ i = 1 n x i − ∑ i = 1 n y i = 0    ⟹    a = y ˉ − b x ˉ (6) \sum_{i=1}^n \left( a+bx_i-y_i \right)=0 \implies na+b\sum_{i=1}^nx_i- \sum_{i=1}^n y_i=0 \implies a=\bar{y}-b\bar{x} \tag{6} i=1n(a+bxiyi)=0na+bi=1nxii=1nyi=0a=yˉbxˉ(6)
    ( 5 ) = 0 (5)=0 (5)=0并代入式 ( 6 ) (6) (6)可得:
    ∑ i = 1 n x i ( a + b x i − y i ) = 0    ⟹    a ∑ i = 1 n x i + b ∑ i = 1 n x i 2 − ∑ i = 1 n x i y i = 0    ⟹    b = ∑ i = 1 n ( x i y i − y ˉ x i ) ∑ i = 1 n ( x i 2 − x ˉ x i ) (7) \sum_{i=1}^nx_i \left (a+bx_i-y_i \right )=0 \implies a\sum_{i=1}^n x_i +b\sum_{i=1}^n x_i^2 - \sum_{i=1}^n x_iy_i =0 \implies b=\frac{\sum_{i=1}^n \left(x_iy_i- \bar{y}x_i \right)}{\sum_{i=1}^n \left(x_i^2-\bar{x}x_i \right)} \tag{7} i=1nxi(a+bxiyi)=0ai=1nxi+bi=1nxi2i=1nxiyi=0b=i=1n(xi2xˉxi)i=1n(xiyiyˉxi)(7)
    再顾及
    ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) = ∑ i = 1 n ( x i y i − y ˉ x i ) a n d ∑ i = 1 n ( x i − x ˉ ) 2 = ∑ i = 1 n ( x i 2 − x ˉ x i ) \sum_{i=1}^n \left( x_i-\bar{x} \right) \left( y_i-\bar{y} \right)=\sum_{i=1}^n \left(x_iy_i- \bar{y}x_i \right) and \sum_{i=1}^n \left( x_i-\bar{x} \right)^2 =\sum_{i=1}^n \left( x_i^2-\bar{x}x_i \right) i=1n(xixˉ)(yiyˉ)=i=1n(xiyiyˉxi)andi=1n(xixˉ)2=i=1n(xi2xˉxi)
    则一元线性回归方程的参数解为
    b = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 (8) b=\frac{\sum_{i=1}^n \left( x_i-\bar{x} \right) \left( y_i-\bar{y} \right)}{\sum_{i=1}^n \left( x_i-\bar{x} \right)^2} \tag{8} b=i=1n(xixˉ)2i=1n(xixˉ)(yiyˉ)(8)
    a = y ˉ − b x ˉ (9) a=\bar{y}-b\bar{x} \tag{9} a=yˉbxˉ(9)
      以上。

    更多相关内容
  • 后来我翻阅了一些数理统计和项目估算方面的资料,告诉了他利用一元线性回归分析估计软件项目开发时间的方法。想到这种估算需要在一些开发团队很常见,所以在这里整理成文。问题的定义及数学模型这里我们仅考虑比较...
  • 普通最小二乘估计对数据进行一元线性回归分析原理,附详细推导
  • 包括基于矩阵运算计算回归系数并添加趋势线,基于多项式拟合计算回归系数并添加趋势线,借助回归分析程序包计算回归系数并估计检验统计量,及预测和各统计量。
  • 一元线性回归、代价函数、梯度下降算法、样例(含数据)及代码

    目录

    什么是线性回归模型?

     一元线性回归模型

    问题引入:

     问题解析:

     代价函数(损失函数):

     代价函数的图像

    为什么不是最小而是极小值?

     梯度下降算法

     梯度下降算法公式(对于一元线性回归模型)

    学习率a的选择

      关于梯度下降每一步的变化

    补充:

     代码部分 - 案例实现

    数据

     导入数据并绘制初始图

     梯度计算函数

      梯度迭代函数

     代价函数

     绘图和预测

    结果


    前言:本系列为机器学习的学习笔记,参考教程链接:

    # (强推|双字)2022吴恩达机器学习Deeplearning.ai课程

    观点不一定完全正确,欢迎指出错误的地方。

    什么是线性回归模型?

    回归分析是研究自变量与因变量之间数量变化关系的一种分析方法,它主要是通过因变量Y与影响它的自变量X_{i}(i=1,2,3…)之间的回归模型,衡量自变量X_{i}对因变量Y的影响能力的,进而可以用来预测因变量Y的发展趋势。线性回归模型指因变量和自变量呈直线型关系的模型,是回归分析中最常用且最简单的方法,线性归回模型又分为一元线性回归模型和多元回归模型。

     一元线性回归模型

    一元线性回归模型即自变量只有一个的线性回归模型。

    问题引入:

    已知上图数据集,其中,X为自变量,Y为因变量,请预测当X为5000时Y的取值。

     问题解析:

    因为自变量只有一个,即让你模拟一个f_{w,b}(x)=wx+b,使该函数与上图自变量与应变量的变化趋势尽量满足,f_{w,b}(x)即一元线性回归函数,再用计算出的回归函数去预测值即可。难点在于,这里的w和b都是未知数,我们要做的就是推断出最合适的w和b。

     代价函数(损失函数):

    如何判断w和b是否合适,我们引入了代价函数。代价函数用于判断整体来看,每个点的实际Y值与估计Y值的差距大小。

    这里先随便画一条线。

    令模拟出来的自变量对应应变量的值为\hat{y},即\hat{y} = f_{w,b}(x),则代价函数为:

    J(w,b) =\frac{1}{2m}\sum_{i=0}^{m-1}{(\hat{y}_{i}-y_{i})^2} = \frac{1}{2m}\sum_{i=0}^{m-1}{(f_{w,b}(x_{i})-y_{i})^2}

    其中,m为训练集样例数,第一个点下标为0。这里除以2是方便后续计算。

     代价函数的图像

    我们先将f_{w,b}(x)简化为f_{w}(x) = wx,那么J(w) = \frac{1}{2m}\sum_{i=0}^{m-1}{(wx_{i}-y_{i})^2}

    此时J(w)的图像为一个凸函数:

     对应的f_w(x)模拟情况:

     

     当我们将f_{w,b}(x)简化为f_{b}(x) = x+b,此时J(b)的图像也是一个凸函数,我们姑且借用J(w)的图像,不过变量变为了b:

     

     对应的f_{b}(x)模拟情况:

     

    现在将J(w)J(b)合在一起,J(w,b)便是一个三维碗装图像:

    注:图中的wb并不对应上面的例子,只是大致图像!

     

    代价函数值越小,说明模拟值与实际值差距越小,则w,b越合适,回归函数模拟的越好。所以,当代价函数值最小时,w和b最合适。

    于是问题转化为了:求wb使得J(w,b)能取到极小值。

    为什么不是最小而是极小值?

    这与之后要用到的算法(梯度下降法)有关,梯度下降法只能求到极小值。不过梯度下降法常用于求凸函数的极小值,而凸函数只有一个极小值,所以通常求得的是最小值。这里举个非凸函数的例子,此时用梯度下降法不一定能求得最优解。

     梯度下降算法

    梯度下降算法并不只用于求解线性回归问题。

    梯度算法在课程中被描述为:假设你站在一个山坡上,你想最快下降到你四周最低的山谷。

    即选择一个基点,以四周斜率绝对值最大的方向下降,直到下降到极小值点(此时斜率为0)停止。我们认为这个极小值点对应的w和b即为所求,一般我们选择(0,0)作为基点,即w和b开始为(0,0),不过实际上基点怎么选都可以。

     梯度下降算法公式(对于一元线性回归模型)

    重复以下行为直到收敛:

    w = w - a\frac{\partial J(w,b)}{\partial w}

    b = b - a\frac{\partial J(w,b)}{\partial b}

    其中,a被称为学习率。之后会讨论学习率a的选择。

    注意:wb应该同时更新!(会在代码块说明)

    求偏导:

    \frac{\partial J(w,b)}{\partial w} = \frac{1}{m}\sum_{i=0}^{m-1}{(f_{w,b}(x_{i})-y_{i})}x_{i}

    \frac{\partial J(w,b)}{\partial w} = \frac{1}{m}\sum_{i=0}^{m-1}{(f_{w,b}(x_{i})-y_{i})}

    (之前代价函数除个2就是为了这里化简)

    学习率a的选择

    如果a很小,那么每一步都走的很小,收敛过程就会很慢。

     如果a很大,J(w,b)可能不会每次迭代都下降,可能错过最佳点,甚至导致发散。

     关于学习率a的选择有许多种方法,这里不做专门讨论(其实是还没学到),姑且采用网上查到的一种简单的方法:在运行梯度下降法的时候会尝试一系列学习率的取值:...0.001, 0.003,0.01, 0.03,0.1, 0.3,1....尽量以三倍增长,直到找到一个合适的学习率。

      关于梯度下降每一步的变化

     梯度下降每一步并不是相等的,因为每一次迭代时,偏导数都会不断变化。在学习率选择合适的情况下,大概可以得到类似下图的每一步梯度变化图像。x轴为迭代次数,y轴为梯度。

     可以看到最开始梯度很大,到后来慢慢接近于0。

    补充:

    这里解释下为什么非凸函数中找到的不一定是最优解:

     我们选择1和2分别作为起点,可能到达两个极小值点,我们无法判断找到的极小值点是否是全局最小值。当然凸函数只有一个极值点,所以对于凸函数,不存在这个问题。

     代码部分 - 案例实现

    数据

    2104.000000,1600.000000,2400.000000,1416.000000,3000.000000,1985.000000,1534.000000,1427.000000,1380.000000,1494.000000,1940.000000,2000.000000,1890.000000,4478.000000,1268.000000,2300.000000,1320.000000,1236.000000,2609.000000,3031.000000,1767.000000,1888.000000,1604.000000,1962.000000,3890.000000,1100.000000,1458.000000,2526.000000,2200.000000,2637.000000,1839.000000,1000.000000,2040.000000,3137.000000,1811.000000,1437.000000,1239.000000,2132.000000,4215.000000,2162.000000,1664.000000,2238.000000,2567.000000,1200.000000,852.000000,1852.000000,1203.000000
    399.899994,329.899994,369.000000,232.000000,539.900024,299.899994,314.899994,198.998993,212.000000,242.500000,239.998993,347.000000,329.998993,699.900024,259.899994,449.899994,299.899994,199.899994,499.997986,599.000000,252.899994,255.000000,242.899994,259.899994,573.900024,249.899994,464.500000,469.000000,475.000000,299.899994,349.899994,169.899994,314.899994,579.900024,285.899994,249.899994,229.899994,345.000000,549.000000,287.000000,368.500000,329.899994,314.000000,299.000000,179.899994,299.899994,239.500000
    

     导入数据并绘制初始图

    import numpy as np
    import matplotlib.pyplot as plt
    
    data = np.loadtxt('test.txt',dtype=np.float32,delimiter=',')
    x_train = data[0]
    y_train = data[1]
    plt.scatter(x_train,y_train,marker='o',c='r') # marker 将样式设置为o,c将颜色设置为红色
    plt.ylabel('y')
    plt.xlabel('x')
    plt.show()
    

     梯度计算函数

    对应公式:

    sumdw = \frac{\partial J(w,b)}{\partial w} = \frac{1}{m}\sum_{i=0}^{m-1}{(f_{w,b}(x_{i})-y_{i})}x_i

    sumdb = \frac{\partial J(w,b)}{\partial w} = \frac{1}{m}\sum_{i=0}^{m-1}{(f_{w,b}(x_{i})-y_{i})}

    # 梯度计算函数
    def compute_gradient(x,y,w,b):
        '''
        参数:
            x: x训练集
            y: y训练集
            w,b: 模型参数
        返回值:
            sum_dw: 代价函数对w的偏导数
            sum_db: 代价函数对d的偏导数
        '''
    
        m = x.shape[0] # 训练样例个数
        sum_dw = 0
        sum_db = 0
    
        for i in range(m):
            f_wb = w*x[i]+b
            dw_i = (f_wb - y[i])*x[i]
            db_i = f_wb - y[i]
            sum_dw += dw_i
            sum_db += db_i
    
        sum_dw = sum_dw / m
        sum_db = sum_db / m
        return sum_dw,sum_db

      梯度迭代函数

    对应公式:

    重复以下行为直到收敛:

    w = w - a\frac{\partial J(w,b)}{\partial w}

    b = b - a\frac{\partial J(w,b)}{\partial b}

    注:代码中是让他迭代一定次数而并非以收敛为结束判断条件。这是因为当迭代次数足够大,也无限接近收敛了。

    # 梯度迭代函数(计算w和b)
    def gradient_descent(x,y,init_w,init_b,alpha,num_iters):
        '''
        参数说明:
            x: x训练集
            y: y训练集
            init_w: w初始值
            init_b: b初始值
            alpha: 学习率
            num_iters: 迭代次数
        return:
            w,b:最终找到的w和b
        '''
        w = init_w
        b = init_b
    
        for i in range(num_iters):
            # 产生梯度
            sum_dw,sum_db = compute_gradient(x, y, w, b)
            # 同时更新w和b
            w = w - alpha*sum_dw
            b = b - alpha*sum_db
    
        return w,b

     代价函数

    对应公式:

    J(w,b) =\frac{1}{2m}\sum_{i=0}^{m-1}{(\hat{y}*{i}-y*{i})^2} = \frac{1}{2m}\sum_{i=0}^{m-1}{(f_{w,b}(x_{i})-y_{i})^2}

    这里只用于检验结果。

     # 代价函数
    def compute_cost(x, y, w, b):
        m = x.shape[0]
        cost = 0
    
        for i in range(m):
            f_wb = w * x[i] + b
            cost = cost + (f_wb - y[i]) ** 2
        total_cost = 1 / (2 * m) * cost
    
        return total_cost
    

     绘图和预测

    if __name__ == '__main__':
    
        data = np.loadtxt('test.txt', dtype=np.float32, delimiter=',')
        x_train = data[0]
        y_train = data[1]
        plt.scatter(x_train, y_train, marker='o', c='r')  # marker 将样式设置为o,c将颜色设置为红色
        plt.ylabel('y')
        plt.xlabel('x')
        # plt.show()
    
        init_m = 0
        init_b = 0
        # 一些梯度下降的设置
        iterations = 100000
        tmp_alpha = 0.000000095
        w,b = gradient_descent(x_train,y_train,init_m,init_b,tmp_alpha,iterations)
        print(f"线性回归函数为:f(x) = {w}x + {b}")
        print(f"此时代价函数为:{compute_cost(x_train,y_train,w,b)}")
        print(f"预测当x = 5000是,y的值为:{w*5000+b}")
        x = np.linspace(0,5000,100)
        y = w*x+b
        plt.plot(x,y)
        plt.show()

     在设置学习率alpha时,如果大了会报错,过小模拟出来的图像差距过大,这里尝试了许多次选了一个自认为比较合适的值。

    结果

      

    展开全文
  • 一元线性回归

    千次阅读 2021-12-09 19:08:59
    一元线性回归确定变量间的关系模型估计和检验利用回归方程进行预测回归模型的诊断 确定变量间的关系 确定变量间的关系 变量间的关系大体上分为函数关系和相关关系(大致理解:前者是一个变量值的变化完全依赖于另一...

    确定变量间的关系

    确定变量间的关系

    变量间的关系大体上分为函数关系和相关关系(大致理解:前者是一个变量值的变化完全依赖于另一个变量的变化,后者是一个变量的取值不能由另一个变量唯一确定)

    相关关系的描述

    描述相关关系的一种常用工具就是散点图
    对于两个变量x和y,可以根据散点图的分布形状等判断它们之间有没有什么关系
    数据:20家医药生产企业的销售收入和广告支出
    在这里插入图片描述导入数据:example9_1<-read.csv("D:/R/example9_1.csv")
    绘制散点图:

    library(car)
    scatterplot(销售收入~广告支出,data=example9_1,pch=19,xlab="广告支出",ylab="销售收入",cex.lab=0.8)
    

    带有箱线图、拟合直线、拟合曲线的销售收入与广告收入的散点图
    在这里插入图片描述
    广告支出与销售收入的观测点分布在一条直线周围,因而具有正的线性相关关系,从拟合的曲线来看,非线性特征不明显,显示两个变量为线性关系

    关系强度的度量

    • 相关系数

    根据散点图可以判断两个变量之间有无相关关系,并对关系形态做出大致描述,但要准确度量变量间的关系强度,则需要计算相关系数,计为r
    在这里插入图片描述
    按上式计算的相关系数也叫Pearson相关系数
    计算相关系数时,假定两个变量之间是线性关系,而且两个变量都是随机变量,服从一个联合的双变量正态分布(并不是简单地要求两个变量各自服从正态分布),此外样本数据中不应有极端值,否则会对相关系数的值有较大影响
    r的取值范围在-1~1,r=0值表示两个变量之间不存在线性关系,并不表示没有任何关系,|r|->1表示两个变量之间的线性关系强

    • 相关系数的检验
      总体相关系数通常是未知的,需要根据样本相关系数r做近似估计,由于r是根据样本数据计算的,抽取的样本不同,r的取值也不同,因此r是一个随机变量,能否用样本相关系数表示总体的相关程度,需要进行显著性实验,通常采用t检验方法,该检验可用于小样本也可用于大样本。

    计算相关系数

    #相关系数r越大线性关系越显著
    cor(example9_1[,2],example9_1[,3])
    

    检验相关系数

    cor.test(example9_1[,2],example9_1[,3])
    

    在这里插入图片描述

    模型估计和检验

    确定变量间的关系后,就可以依据关系形态建立适当的回归模型

    回归模型与回归方程

    描述因变量y如何依赖于自变量x和误差项的方程称为回归模型
    模型参数的估计通常采用最小二乘估计,或称最小平方估计
    利用最小二乘估计法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小
    在这里插入图片描述回归模型的拟合

    model<-lm(销售收入~广告支出,data=example9_1)#模型拟合
    summary(model)#输出结果
    

    在这里插入图片描述
    根据结果可知,销售收入与广告支出的估计方程为:y^=2343.8916+5.6735*广告支出

    计算回归系数的置信区间

    confint(model,level=0.95)
    

    在这里插入图片描述
    输出方差分析表

    anova(model)
    

    在这里插入图片描述
    模型的拟合优度
    回归直线与个观测点的接近程度称为回归模型的拟合优度
    评价拟合优度的一个重要统计量就是决定系数(Multiple R-squared)
    在这里插入图片描述

    在这里插入图片描述
    残差的标准误是残差平方和的均方根,用se表示(Residual standard error
    se=sqrt(SSE/(n-2))
    即残差平方和除以自由度(n-2)后开方

    模型的显著性检验

    回归分析中的显著性检验主要包括线性关系检验回归系数检验

    线性关系检验简称F检验,它是检验因变量与自变量之间的线性关系是否显著,或者说它们之间能否用一个线性模型来表示(F-statistic)
    假设H0:两个变量之间的线性关系不显著 H1:两个变量间的线性关系显著

    回归系数检验简称t检验,用于检验自变量对因变量的影响是否显著

    在一元线性回归中,由于只有一个自变量,回归系数检验与线性关系检验是等价的

    利用回归方程进行预测

    回归分析的主要目的是根据所建立的回归方程用给定的自变量来预测因变量
    如果对于x的一个给定值x0,求出y的一个预测值y0^,就是点估计
    在点估计的基础上,可以求出y的一个估计区间
    估计区间有两种:均值的置信区间个别值的预测区间
    均值的置信区间:对x的一个给定值x0,求出的y的均值的估计区间
    个别值的预测区间:对x的一个给定值x0,求出y的一个个别值的估计区间

    计算点预测值、置信区间和预测区间

    x0<-example9_1$广告支出
    pre_model<-predict(model)
    cont_int<-predict(model,data.frame(广告支出=x0),interval="confidence",level=0.95)
    pre_int<-predict(model,data.frame(广告支出=x0),interval="prediction",level=0.95)
    data.frame(销售收入=example9_1$销售收入,点预测值=pre_model,置信下限=cont_int[,2],置信上限=cont_int[,3],预测下限=pre_int[,2],预测上限=pre_int[,3])
    

    绘制置信带和预测带

    library(investr)
    plotFit(model,interval="both",level=0.95,shade=TRUE,col.conf="skyblue3",col.pred="lightskyblue2",col.fit="red2")
    legend(x="topleft",legend=c("回归线","置信区间","预测区间"),col=c("red2","skyblue3","lightskyblue2"),cex=0.8)
    

    在这里插入图片描述
    计算x0=500时销售收入的点预测值、置信区间、预测区间

    x0<-data.frame(广告支出=500)
    predict(model,newdata=x0)
    predict(model,newdata=x0,interval = "confidence",level=0.95)
    predict(model,newdata=x0,interval = "prediction",level=0.95)
    

    回归模型的诊断

    残差与残差图
    残差是因变量的观测值与根据回归方程求出的估计值之差,用e表示,它反映了用估计的回归方程预测yi而引起的误差
    残差除以它的标准误后的结果称为标准化残差

    计算回归预测值,残差,标准化残差

    pre<-fitted(model)
    res<-residuals(model)
    zre<-model$residuals/(sqrt(deviance(model)/df.residual(model)))
    data.frame(销售收入=example9_1$销售收入,点预测值=pre,残差=res,标准化残差=zre)
    

    在这里插入图片描述
    检验模型假定

    1. 检验线性关系
      检验因变量与自变量之间为线性关系的假定,除了可以通过F检验外,还可以绘制成分残差图
    library(car)
    crPlots(model)
    

    在这里插入图片描述横坐标是自变量的实际观测值,纵坐标是因变量与残差之和
    销售收入与广告支出之间没有明显的非线性模式,说明二者之间的线性关系假定成立

    1. 检验正态性
      通过绘制残差的Q-Q图完成
    par(mfrow=c(2,2),cex=0.8,cex.main=0.7)
    plot(model)
    

    在这里插入图片描述
    从该图可以看出,各个点基本上在直线周围随机分布,没有固定模式,因此,在销售收入与广告支出的线性模型中,关于正态性的假定基本成立

    1. 检验方差齐性
      通过绘制散布-水平图实现
    ncvTest(model)
    spreadLevelPlot(model)
    

    在这里插入图片描述

    在这里插入图片描述
    由于p=0.2885358,不拒绝原假设,则可以认为满足方差齐性
    从该图可以看出,拟合曲线接近于水平直线,没有非线性特征,而且各个点在改线周围随机分布,显示建立的线性模型满足方差齐性的假定

    1. 检验独立性

    判断残差之间是否存在自相关的方法之一就是使用Durbin-Watson检验,简称D-W检验

    library(car)
    durbinWatsonTest(model)
    

    在这里插入图片描述
    检验的P值等于0.52,不拒绝原假设,显示残差无自相关,独立性假定成立。

    展开全文
  • python实现一元线性回归详细步骤

    千次阅读 2021-10-29 00:20:41
    从-10到10之间的100个等差数列 # 设置一个线性回归公式 y = 0.85*x - 0.72 # 创建一组数量为100,均值为0,标准差为0.5的随机数组 e = np.random.normal(loc = 0,scale = 0.5,size = x.shape) # 将变量y加上这个变量...

    #建模、预测和可视化

    # 导入相关包
    import numpy as np
    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split  # 切分训练集和测试集的函数
    
    import matplotlib
    import matplotlib.pyplot as plt
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    matplotlib.rcParams['axes.unicode_minus']=False  # 用来正常显示负号
    matplotlib.style.use('ggplot')
    
    # 构造数据
    np.random.seed(0)
    x = np.linspace(-10,10,100) # 从-10到10之间的100个等差数列
    # 设置一个线性回归公式
    y = 0.85*x - 0.72
    # 创建一组数量为100,均值为0,标准差为0.5的随机数组
    e = np.random.normal(loc = 0,scale = 0.5,size = x.shape)
    # 将变量y加上这个变量e
    y += e
    plt.plot(y) # 数据折线图如下:

    # 将x转换为二维数组,因为fit方法要求x为二维结构
    x = x.reshape(-1,1)
    
    lr = LinearRegression()
    # 切分训练集和测试集
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25,random_state=0)
    
    # 拟合函数
    lr.fit(x_train,y_train)
    # 拟合后可利用lr.coef_和lr.intercept_来取出(w)权重和(b)截距
    print('权重:',lr.coef_)
    print('截距:',lr.intercept_)
    
    # 通过训练集得到了拟合函数,就可以进行预测
    y_hat = lr.predict(x_test)
    # 可查看对比实际值和预测值
    print('实际值:',y_test)
    print('预测值:',y_hat)
    
    # 将数据可视化
    plt.figure(figsize=(10,5))
    # 训练接和测试集都以散点来表示,拟合线用折线表示
    plt.scatter(x_train,y_train,s=10,label='训练集',c='b')
    plt.scatter(x_test,y_test,s=10,label='测试集',c='g')
    plt.plot(x,lr.predict(x),label='拟合线',c='r')
    plt.legend() 
    # 数据视图如下:

    # 用图表示出实际值和预测值
    plt.figure(figsize=(10,5))
    plt.plot(y_test,label='真实值',c='r',marker='o')
    plt.plot(y_hat,label='预测值',c='g',marker='x')
    plt.legend()
    # 数据视图如下:

    #模型评估

    MSE:Mean Squared Error

    平均方误差是指参数的估计值和参数的实际值之差的平方的期望,可以评价数据的变化程度,MSE越小,说明模型的拟合实验数据能力强。

    RMSE :Root Mean Squared Error

    根均方误差是均方误差的平方根。

    MAE: Mean Absolute Error

    平均绝对误差是样本绝对误差的绝对值,能更好的反应预测值误差的实际情况。

    # 模型评估
    from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
    print("平均方误差(MSE):",mean_squared_error(y_test,y_hat))
    >>> 平均方误差(MSE): 0.2738537199293911
    
    print("根均方误差(RMSE):",mean_absolute_error(y_test,y_hat))
    >>> 根均方误差(RMSE): 0.4374356584882062
    
    print("平均绝对值误差(MAE):",r2_score(y_test,y_hat))
    >>> 平均绝对值误差(MAE): 0.9896372020590347

    参考链接:

    python代码实现回归分析--线性回归 - 知乎

    均方误差(MSE)根均方误差(RMSE)平均绝对误差(MAE)_lighting-CSDN博客

    展开全文
  • 线性回归 最小二乘法
  • 一元线性回归的点估计和区间估计

    千次阅读 2019-10-08 13:51:51
    一元线性回归模型 假设对于的每一个值,有~,其中都是不依赖的未知参数,即: ,~,称为随机误差。 假设样本为 点估计 最小二乘估计 最小二乘法的判断标准是:样本回归线上的点和真实观测点的“总体误差”即二者...
  • 一元线性回归(最小二乘法)

    千次阅读 2022-04-29 12:31:48
    这里写自定义目录标题前言实现原理工具准备1, 线性回归最小二乘参数估计使用python计算最小二乘法的线性回归检验 前言 本次知识来自贾俊平《统计学》第七版,初次学习,如有纰漏,请各位多多包含。诸位之意见笔者会...
  • 一、一元线性回归 一元线性回归其实就是从一堆训练集中去算出一条直线,使数据集到直线之间的距离差最小。举个例子,唯一特征X(工龄),共有m = 50个数据数量,Y(薪水)是实际结果,要从中找到一条直线,使数据集到...
  • 一元线性回归参数估计.ppt
  • 一元线性回归(R语言)

    千次阅读 2022-05-03 15:55:37
    目录一元线性回归一元线性回归建模的大致思路如下:1. 确定因变量与自变量之间的关系1.1 查看变量间有没有相关关系1.2计算相关系数1.3 检验相关系数2.建立模型,并对模型进行估计和检验2.1 回归模型的拟合2.2 计算...
  • 本文以一元线性回归为例,整理线性回归模型参数的估计方法。 样本(x,y)(x,y)(x,y)可由y=β0+β1x+εy=\beta _{0}+\beta _{1}x+\varepsilony=β0​+β1​x+ε 表示,其中,ε\varepsilonε为随机因素引起的噪声, y=...
  • 数据回归-偏正态误差分布下一元线性回归模型的参数估计及比较.pdf
  • 本文通过使用最小二乘法来求解一元线性回归方程来解释一下为啥线性回归可以直接求解。
  • 利用这样的样本数据计算 Y Y Y的分布中的未知参数的估计及假设检验的过程称为一元线性回归,其中 E ( Y ) = a x + b E(Y)=ax+b E(Y)=ax+b称为回归方程, a a a和 b b b称为回归系数。对样本数据 ( x 1 , x 2 , ⋯  ...
  • 统计学理论—一元线性回归

    千次阅读 2020-11-13 00:58:26
    在学习统计学贾书的过程,在第6—14章节出有许多需要理解与记忆的公式和概念,在此通过博客的形式做一次梳理,主要内容为统计学中抽样分布、假设检验、参数估计、分类数据分析、方差分析、一元二元线性分析、时间...
  • 一元线性回归 R语言

    2021-11-08 20:20:59
    一元线性回归 R语言导入数据修改变量名画散点图回归分析是否有显著性的线性关系检验给定一个变量求对应的值以及求预测区间 导入数据 1.直接输入 > x<-c(61.4,48.3,51.8,35.9,17.0,55.0,32.7,17.0,27.3,21.5,...
  • 最小二乘法求解一元线性回归

    千次阅读 2021-06-22 19:33:15
    最小二乘法求解一元线性回归 介绍线性回归模型以及简单一元线性回归模型的解法。 通过代码实现最小二乘法求解一元线性回归实例,并对结果进行预测。 一、线性回归 二、回归问题的解决 三、最小二乘法介绍 四、...
  • 一元线性回归的详细推导过程

    万次阅读 多人点赞 2020-08-30 00:26:17
    目标:找到a和b,使得目标函数(1)尽可能的小。 (1) 下面分别对a和b求导, 首先对b进行求导,
  • 一元线性回归-最小二乘法推导过程

    千次阅读 2021-11-07 18:36:30
    要想使这n个样本点落在一元线性回归方程附近,不妨设误差为,使得没一个样本点落在一元线性回归方程上,因此有恒成立,所以回归直线应满足的条件是:实际值与回归估计值之间的误差平方和最小,即: 此时令,原...
  • """ 使用最小二乘法,拟合出一元线性回归模型:z = wx + b。 一元的意思是样本x通过一个属性描述,原本可能是矢量x_i = (x_i1, x_i2...,x_id)被例如颜色,大小... 属性描述,现在只有一个x_i1描述,则直接把矢量x_i...
  • 一元线性回归参数估计PPT学习教案.pptx
  • 看散点图 看起来有正相关关系 plot(iris$Petal.Length~iris$Petal.Width) Petal 长与宽的一元线性回归 根据一元线性回归拟合结果,截距项(Intercept)和petal.width均通过t检验(估计参数的检验p值小于0.05,统计...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,599
精华内容 2,239
热门标签
关键字:

一元线性回归估计式