精华内容
下载资源
问答
  • 一元线性回归模型的应用
    2022-09-06 22:06:42

    线性学习

    回归分析是研究自变量x与因变量y的关系的方法。
    生活中经常会有类似的关系,例如工龄与工资的关系、房屋面积与价格的关系等等。

    一元线性回归模型

    只是涉及一个自变量的关系,可以用一元线性方程来表示:

    y = a x + b y=ax+b y=ax+b

    从统计的角度来观察,生活实际案例中的样本点存在随机扰动 ϵ \epsilon ϵ,所以会有一定的偏差。因此一元线性回归模型可以表示为:

    y = β 1 x + β 0 + ϵ y=\beta1x+\beta0 +\epsilon y=β1x+β0+ϵ

    此时, β 1 、 β 2 \beta1、\beta2 β1β2都是未知的,随机扰动项 ϵ \epsilon ϵ也是未知的。

    我们想要用统计学方法估计出真实的、不可观测的一元线性回归模型,利用样本数据估计出 β 1 , β 0 \beta1,\beta0 β1,β0 ,将它们的估计值记为 β ^ 1 , β ^ 0 \hat{\beta}1,\hat{\beta}0 β^1,β^0,由此得出的相应的y的估计值为$ \hat{y}$,用经验回归方程表示:

    $ \hat{y}=\hat{\beta}1 x+\hat{\beta}0 $

    以下列散点图为例,我们先找到一个线性回归方程,尽可能更好的去拟合这些样本点,即:尽可能找到误差最小的方程去表示这个一元线性回归模型。这个过程我们可以使用最小二乘估计,也可以使用极大似然估计等。
    在这里插入图片描述

    一元线性回归模型python的实现过程

    我们以方程y=0.1x+0.5为依据,加入噪声,生成了100个随机样本,经过估计得到一元线性回归模型参数如下

    • 归方程的斜率为: [[0.09154158]]
    • 回归方程的截距为: [0.5006561]
    • 回归方程为:y = [[0.09154158]] *x + ( [0.5006561] )
    import numpy as np
    import pandas as pd
    import  matplotlib.pyplot as plt #类似 MATLAB 中绘图函数的相关函数
    
    #设置随机数种子,便于二次实验复现
    np.random.seed(1)
    count=100
    data=[]
    for i in range(count):
        x1=np.random.normal(0.00,0.55)
        y1=x1*0.1+0.5+np.random.normal(0.00,0.03)
        data.append([x1,y1])
    
    data =pd.DataFrame(data)
    
    x_data=np.array(data[0])
    y_data=np.array(data[1])
    
    #绘制散点图
    plt.scatter(x_data,y_data,c='r')
    plt.show()
    
    from sklearn.linear_model import LinearRegression
    regr = LinearRegression()
    
    x_data=x_data.reshape(-1,1)
    y_data=y_data.reshape(-1,1)
    #拟合方程
    regr.fit(x_data,y_data)
    
    #可视化
    plt.scatter(x_data,y_data,c='r')
    plt.plot(x_data,regr.predict(x_data),color='black')
    plt.show()
    

    更多相关内容
  • 线性回归模型建模步骤 (一元线性回归、多元线性回归)
  • 一元线性回归模型应用.ppt
  • 信息分析与预测的实验,Python写的代码,萌新代码,勿喷,仅仅只是方便没时间写实验的朋友,直接用python打开就能运行
  • 主要用于数学建模(matlab)的学习,下载下来换上你的数据就可以用了。
  • 一元线性回归与线性神经网络模型关联性分析,杨达,王会进,一元线性回归和线性神经网络模型在实际应用中都能进行预测,两者都是线性模型。为了探讨两者之间的关联,从两模型的具体学习出发
  • #资源达人分享计划#
  • 用Matlab实现的一元线性回归,注释很详细
  • 一元线性回归分析模型在家庭消费支出预测中的应用,高玉,周树民,介绍一元线性回归分析的基本概念和方法原理,并以2001年到2010年国民的城镇居民家庭人均支配收入(简称
  • Jupyter nodebook工具做的简单的一元线性回归。将文件导入nodebook运行即可 数据摘自深入浅出数据分析这本书。这里用python3实现书中的R代码。有需要的学习python3进行数据分析的同学自行倒腾
  • 一元线性回归、代价函数、梯度下降算法、样例(含数据)及代码

    目录

    什么是线性回归模型?

     一元线性回归模型

    问题引入:

     问题解析:

     代价函数(损失函数):

     代价函数的图像

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

     梯度下降算法

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

    学习率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时,如果大了会报错,过小模拟出来的图像差距过大,这里尝试了许多次选了一个自认为比较合适的值。

    结果

      

    展开全文
  • 一元线性回归

    2018-10-19 09:24:50
    一元线性回归spss处理方法,可以了解SPSS对线性回归的处理内容
  • 基于spss的一元线性回归与多元线性回归案例,个人整理出的,包含了部分案例、实验报告、题目,及部分题目答案,适合作为spss、MATLAB等软件数据分析题目联系
  • 文件为房价预测例子的一元线性回归模型代码及数据,由sklearn库实现,将数据文件与程序文件放在同一目录下运行即可。 博客地址:https://me.csdn.net/albert201605
  • python一元线性回归

    2022-05-02 21:35:51
    python一元线性回归
  • 1、一元线性回归模型 线性模型 2、最小二乘法

    1、一元线性回归模型

    线性模型
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    2、最小二乘法

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3、假设检验

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4、预测

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5、评估

    在这里插入图片描述

    6、误差

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    7、决定系数

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    8、一元线性回归方程

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 一元线性回归及案例(Python)

    千次阅读 热门讨论 2022-04-11 13:42:53
    1 一元线性回归简介 2 一元线性回归数学形式 3案例:不同行业工龄与薪水的线性回归模型 3.1案例背景 3.2具体代码 3.3模型优化 4总体展示 5线性回归模型评估 6模型评估的数学原理 6.1 R-squared 6.2Adj.R-...

    目录

    1 一元线性回归简介

    2 一元线性回归数学形式

    3 案例:不同行业工龄与薪水的线性回归模型

    3.1 案例背景

    3.2 具体代码

    3.3 模型优化

    4 总体展示

    5 线性回归模型评估

    6 模型评估的数学原理

    6.1 R-squared

    6.2 Adj.R-squared

    6.3 P值

    参考书籍


    1 一元线性回归简介

    线性回归模型是利用线性拟合的方式探寻数据背后的规律。如下图所示,先通过搭建线性回归模型寻找这些散点(也称样本点)背后的趋势线(也称回归曲线),再利用回归曲线进行一些简单的预测分析或因果关系分析

    在线性回归中,根据特征变量(也称自变量)来预测反应变量(也称因变量)

    根据特征变量的个数可将线性回归模型分为一元线性回归和多元线性回归。

    例如,通过“工龄”这一个特征变量来预测“薪水”,就属于一元线性回归;

    而通过“工龄”“行业”“所在城市”等多个特征变量来预测“薪水”,就属于多元线性回归。

    2 一元线性回归数学形式

    一元线性回归模型又称为简单线性回归模型,其形式可以表示为如下所示的公式。

    y=ax+b (y为因变量,x为自变量,a为回归系数,b为截距。)

    如下图所示,其中为实际值,为预测值,一元线性回归的目的就是拟合出一条线来使得预测值和实际值尽可能接近,如果大部分点都落在拟合出来的线上,则该线性回归模型拟合得较好。

    使用残差平方和衡量实际值与预测值之间的接近程度。

    使用最小二乘法求系数与截距。假设线性回归模型的拟合方程为y=ax+b,那么残差平方和(损失函数)可以定义成如下所示的公式。

    拟合的目的是使残差平方和尽可能地小,即实际值和预测值尽可能地接近。根据高等数学中求极值的相关知识,通过对残差平方和进行求导(对a和b进行求导),导数为0时,该残差平方和将取极值,此时便能获得拟合需要的系数a和截距b了。

    3 案例:不同行业工龄与薪水的线性回归模型

    3.1 案例背景

    通常来说,薪水会随着工龄的增长而增长,不同行业的薪水增长速度有所不同。本案例要应用一元线性回归模型探寻工龄对薪水的影响,即搭建薪水预测模型,并通过比较多个行业的薪水预测模型来分析各个行业的特点。

    3.2 具体代码

    # 导入设置
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    from sklearn.linear_model import LinearRegression
    
    # 设置显示中文
    plt.rcParams['font.sans-serif'] = ['KaiTi']
    plt.rcParams['axes.unicode_minus'] = False
    
    #读取数据
    df = pd.read_excel('IT行业收入表.xlsx')
    df.head(10)
    X = df[['工龄']]  #这里的自变量必须写成二维形式,一个因变量可能对应多个自变量
    Y = df['薪水']
    
    # 模型搭建
    model = LinearRegression()
    model.fit(X,Y)
    
    # 模型可视化
    plt.scatter(X,Y)
    plt.plot(X,model.predict(X),color='red')
    plt.xlabel('工龄')
    plt.ylabel('薪水')
    plt.show()
    
    #查看系数,截距:线性回归方程构造
    model.coef_,model.intercept_

    3.3 模型优化

    一元多次线性回归模型。

    之所以还需要研究一元多次线性回归模型,是因为有时真正契合的趋势线可能不是一条直线,而是一条曲线。根据一元二次线性回归模型绘制的曲线更契合散点图呈现的数据变化趋势。

    具体代码如下:

    # 用于增加一个多次项内容的模块PolynomialFeatures
    from sklearn.preprocessing import PolynomialFeatures
    
    # 设置最高次项为二次项,为生成二次项数据(x^2)做准备
    poly_reg = PolynomialFeatures(degree=2)
    
    # 将原有的X转换为一个新的二维数组X_,该二维数组包含新生成的二次项数据(x^2)和原有的一次项数据(x)。
    X_ = poly_reg.fit_transform(X)
    
    model = LinearRegression()
    model.fit(X_,Y)
    
    plt.scatter(X,Y)
    plt.plot(X,model.predict(X_),color='r')
    plt.show()
    
    model.coef_,model.intercept_

    说明:

    X_此时的结构:

    查看系数和截距:

    系数,有3个数:第1个数0对应X_中常数项的系数;第2个数对应X_中一次项(x)的系数,即系数b;第3个数对应X_中二次项(x^2)的系数,即系数a。

    截距,常数项c。因此,拟合得到的一元二次线性回归方程为y=400.8x2-743.68x+13988

    4 总体展示

    5 线性回归模型评估

    模型搭建完成后,还需要对模型进行评估,这里主要以3个值作为评判标准:

    R-squared(即统计学中的R2)、Adj.R-squared(即Adjusted R2)、P值。

    其中R-squared和Adj.R-squared用来衡量线性拟合的优劣,P值用来衡量特征变量的显著性。

    R-squared和Adj.R-squared的取值范围为0~1,它们的值越接近1,则模型的拟合程度越高;P值在本质上是个概率值,其取值范围也为0~1,P值越接近0,则特征变量的显著性越高,即该特征变量真的和目标变量具有相关性。

    import statsmodels.api as sm
    
    # add_constant()函数给原来的特征变量X添加常数项,并赋给X2,这样才有y=ax+b中的常数项,即截距b
    X2 = sm.add_constant(X)
    # 用OLS()和fit()函数对Y和X2进行线性回归方程搭建
    est = sm.OLS(Y,X).fit()
    est.summary()

    左下角的coef就是常数项(const)和特征变量(工龄)前的系数,即截距b和斜率系数a。

    对于模型评估而言,通常需要关心上图中的R-squared、Adj.R-squared和P值信息。这里的R-squared为0.855,Adj.R-squared为0.854,说明模型的线性拟合程度较高;这里的P值有两个,常数项(const)和特征变量(工龄)的P值都约等于0,所以这两个变量都和目标变量(薪水)显著相关,即真的具有相关性,而不是由偶然因素导致的。

    获取R-squared值的另一种方法:

    from sklearn.metrics import r2_score
    r2 = r2_score(Y,model.predict(X))

    Y为实际值,regr.predict(X)为预测值,打印输出r2的结果为0.855,与利用statsmodels库获得的评估结果是一致的。

    6 模型评估的数学原理

    6.1 R-squared

    要想理解R-squared,得先了解3组新的概念:整体平方和TSS、残差平方和RSS、解释平方和ESS,它们的关系如下图所示。

    其中Yi为实际值,Yfitted为预测值,Ymean为所有散点的平均值,R2为R-squared值。

    对于一个拟合程度较高的线性回归模型,我们希望其实际值要尽可能落在拟合曲线上,即残差平方和RSS尽可能小,根据R-squared的计算公式R2=1-(RSS/TSS),也就是希望R-squared尽可能大。当RSS趋向于0时,说明实际值基本都落在了拟合曲线上,模型的拟合程度非常高,那么此时R-squared趋向于1,所以在实战当中,R-squared越接近1,模型的拟合程度越高。不过拟合程度也不是越高越好,拟合程度过高可能会导致过拟合现象。

    插曲:过拟合与欠拟合

    如下图所示,过拟合即过度拟合,是指模型在训练样本中拟合程度过高,虽然它很好地贴合了训练集数据,但是丧失了泛化能力,不具有推广性,也就是说,如果换了训练集以外的数据就达不到较好的预测效果。与过拟合相对应的概念是欠拟合,欠拟合是指模型拟合程度不高,数据距离拟合曲线较远,或指模型没有很好地捕捉到数据特征,不能很好地拟合数据。

    6.2 Adj.R-squared

    Adj.R-squared是R-squared的改进版,其目的是为了防止选取的特征变量过多而导致虚高的R-squared。每新增一个特征变量,线性回归背后的数学原理都会导致R-squared增加,但是这个新增的特征变量可能对模型并没有什么帮助。为了限制过多的特征变量,引入了Adj.R-squared的概念,它在R-squared的基础上额外考虑了特征变量的数量这一因素,其公式如下。

    其中n为样本数量,k为特征变量数量。从上述公式可以看出,特征变量数量k越大,其实会对Adj.R-squared产生负影响,从而告诫数据建模者不要为了追求高R-squared值而添加过多的特征变量。当考虑了特征变量数量后,Adj.R-squared就能够更准确地反映线性模型的拟合程度。

    6.3 P值

    P值涉及统计学里假设检验中的概念,其原假设为特征变量与目标变量无显著相关性,P值是当原假设为真时所得到的样本观察结果或更极端结果出现的概率。如果该概率越大,即P值越大,原假设为真的可能性就越大,即无显著相关性的可能性越大;如果该概率越小,即P值越小,原假设为真的可能性就越小,即有显著相关性的可能性越大。所以P值越小,显著相关性越大。通常以0.05为阈值,当P值小于0.05时,就认为特征变量与目标变量有显著相关性。

    参考书籍

    《Python大数据分析与机器学习商业案例实战》

    展开全文
  • """ 使用最小二乘法,拟合出一元线性回归模型:z = wx + b。 一元的意思是样本x通过一个属性描述,原本可能是矢量x_i = (x_i1, x_i2...,x_id)被例如颜色,大小... 属性描述,现在只有一个x_i1描述,则直接把矢量x_i...
  • 应用回归分析R语言初学者
  • 一元线性回归(Python)

    千次阅读 2022-07-02 22:37:48
    一元线性回归原理以及Python实现例子
  • 一元线性回归模型习题及答案.doc
  • 普通最小二乘估计对数据进行一元线性回归分析原理,附详细推导
  • python-一元线性回归模型.ipynb
  • 一元线性回归模型在电力系统负荷预测中的应用与MATLAB实现.pdf
  • 一元线性回归模型

    千次阅读 2019-12-08 19:42:27
    一元线性回归模型 线性回归模型是数据科学领域最简单的模型,很多复杂的模型 (如多项式回归、逻辑回归、SVM) 都是建立在线性回归模型的基础上的,或者是从其中能找到线性回归模型的影子。最简单的线性回归模型就是...
  • 一元线性回归模型的原理及实现

    千次阅读 2021-10-26 22:01:42
    一元线性回归 ​由于笔者的数学不太好,而且网上关于一元线性回归的文章有很多,所以相关内容大家可以查找一下,这里我就简单的搬运一下...上图为广告费与销售额的关系图,虚线为我们的一元线性回归方程,通过回归分析
  • 一共两段代码,一段是一元线性回归分析的代码,输入自变量X与因变量Y后直接运行就可以直接得到方程,而省去了繁琐的计算过程;另一段是单因素方差分析表,只需输入表格中的数据,就可以直接得出方差分析表,十分节约...
  • 机器学习入门-一元线性回归模型的骚操作

    多人点赞 热门讨论 2022-05-20 20:41:18
    文章目录前言一元线性回归模型讲解☁️我们可能会遭遇的问题☁️线性回归模型数学公式推导☁️公式推导☁️代码介绍及实现jupyter notebookpython实现 前言 先说一下爬虫的相关内容,因为最近也正在做相关后续的爬虫...
  • 800, 6450, 20000]) plt.grid(True) return plt plt = runplt() X=X #赋值 y=Y plt.plot(X, y,"k.")#"k."表示散点图,否则为折线 plt.show() 图像为: #调用sklearn中的linear_model模块进行线性回归。 from ...

空空如也

空空如也

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

一元线性回归模型的应用