最小二乘法构建线性回归方程

一、线性回归的意义

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。由于市场现象一般是受多种因素的影响,而并不是仅仅受一个因素的影响。所以应用一元线性回归分析预测法,必须对影响市场现象的多种因素做全面分析。只有当诸多的影响因素中,确实存在一个对因变量影响作用明显高于其他因素的变量,才能将它作为自变量,应用一元相关回归分析市场预测法进行预测。
一元线性回归分析法的预测模型如下:
在这里插入图片描述
式中,xt代表t期自变量的值;
Yt代表t期因变量的值;
a、b代表一元线性回归方程的参数。
a、b参数由下列公式求得:
在这里插入图片描述
相关系数R2是用以反映变量之间相关关系密切程度的统计指标。我们可以用 在这里插入图片描述
来刻画回归的效果。对于已经获取的样本数据,R2表达式中的总体平方和
在这里插入图片描述

为确定的数。因此R2越大,意味着残差平方和
在这里插入图片描述
越小,即模型的拟合效果越好;R2越小,残差平方和越大,即模型的拟合效果越差。在线性回归模型中,R2表示解释变量对于预报变量变化的贡献率。R2越接近于1,表示回归的效果越好。

二、线性回归的使用

使用工具:Excel,jupyter,身高体重数据集 提取码:f9bz

1.在Excel中练习线性回归

用excel打开下载的身高体重数据集,在weights_heights中选择前二十组数据,在选中的二十组数据右下角弹出的快速分析中选择散点图:
在这里插入图片描述
excel会自动根据选择的数据生成对应的散点图,再根据如下方法打开趋势线中的更多选项,勾选显示公式和显示R平方值:
在这里插入图片描述
可以看到,excel自动生成了二十组数据的散点图并求出了线性回归公式和对应的相关系数。如法炮制,我们选择200组,2000组,20000组数据分别构造线性回归:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
以上结果显示,并不是使用越多数据构建的线性回归方程就越准确,选择的数量与线性回归方程的拟合程度没有太大关系。那么同样数量的数据组,选择的数据不同对结果有不有影响呢,答案是有的,任意选择除前二十组外的二十组数据,构造线性回归方程,结果与前二十组的结果不同
在这里插入图片描述
所以,在构造线性回归方程时,适当的选取数据能得到更好的结果。

2.使用jupyter来做一元线性回归分析

  • 不调包实现一元线性回归
import pandas as pd
def read_file(raw):#根据行数来读取文件
    df = pd.read_excel('.\\weights_heights(身高-体重数据集).xls',sheet_name ='weights_heights')
    height=df.iloc[0:raw,1:2].values
    weight=df.iloc[0:raw,2:3].values
    return height,weight

def array_to_list(array):#将数组转化为列表
    array=array.tolist()
    for i in range(0,len(array)):
        array[i]=array[i][0]
    return array

def unary_linear_regression(x,y):#一元线性回归,x,y都是列表类型
    xi_multiply_yi=0
    xi_square=0;
    x_average=0;
    y_average=0;
    f=x
    for i in range(0,len(x)):
        xi_multiply_yi+=x[i]*y[i]
        x_average+=x[i]
        y_average+=y[i]
        xi_square+=x[i]*x[i]
    x_average=x_average/len(x)
    y_average=y_average/len(x)
    b=(xi_multiply_yi-len(x)*x_average*y_average)/(xi_square-len(x)*x_average*x_average)
    a=y_average-b*x_average
    for i in range(0,len(x)):
        f[i]=b*x[i]+a
    R_square=get_coefficient_of_determination(f,y,y_average)
    print('R_square='+str(R_square)+'\n'+'a='+str(a)+'  b='+str(b))
    
def get_coefficient_of_determination(f,y,y_average):#传输计算出的值f和x,y的真实值还有平均值y_average,获取决定系数,也就是R²
    res=0
    tot=0
    for i in range(0,len(y)):
        res+=(y[i]-f[i])*(y[i]-f[i])
        tot+=(y[i]-y_average)*(y[i]-y_average)
    R_square=1-res/tot 
    return R_square

raw=[20,200,2000,20000]
for i in raw:
    print('数据组数为'+str(i)+":")
    height,weight=read_file(i)
    height=array_to_list(height)
    weight=array_to_list(weight)
    unary_linear_regression(height,weight)

文件路径根据自己下载《身高体重数据集》的路径修改,点击运行:
在这里插入图片描述

  • 调包实现一元线性回归
from sklearn import linear_model
from sklearn.metrics import r2_score
import numpy as np
import pandas as pd
def read_file(raw):#根据行数来读取文件
    df = pd.read_excel('.\\weights_heights(身高-体重数据集).xls',sheet_name ='weights_heights')
    height=df.iloc[0:raw,1:2].values
    weight=df.iloc[0:raw,2:3].values
    return height,weight

raw=[20,200,2000,20000]#要读取的行数
for i in raw:
    print('数据组数为'+str(i)+":")
    height,weight=read_file(i)
    weight_predict=weight
    lm = linear_model.LinearRegression()
    lm.fit(height,weight)
    b=lm.coef_
    a=lm.intercept_
    weight_predict=lm.predict(height)#计算有方程推测出来的值
    R_square=r2_score(weight,weight_predict)#计算方差
    print('b='+str(b[0][0])+' a='+str(a[0]))
    print('R_square='+str(R_square))

运行:
在这里插入图片描述

参考博客:最小二乘法构建线性回归方程

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是使用最小二乘法实现线性回归,画出这条直线的代码: ```python import numpy as np import matplotlib.pyplot as plt # 构造数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([1.5, 3.2, 4.5, 6.1, 7.8]) # 计算斜率和截距 n = len(x) slope = (n * np.sum(x * y) - np.sum(x) * np.sum(y)) / (n * np.sum(x**2) - np.sum(x)**2) intercept = (np.sum(y) - slope * np.sum(x)) / n # 画出数据散点图和拟合直线 plt.scatter(x, y) plt.plot(x, slope * x + intercept, color='red') plt.show() ``` 请注意,这里的数据是随意构造的,实际应用中需要根据具体情况获取数据并进行处理。 ### 回答2: 最小二乘法是一种常用的线性回归方法,用于解线性关系模型的参数。为了实现线性回归,需要定义一个线性模型,即 y = ax + b,其中 a 和 b 是模型的参数,x 和 y 是样本数据的自变量和因变量。 首先,收集一组 x 和 y 的实际数据。接下来,计算样本数据的平均值 x̄ 和 ȳ,以及各个数据点相对于平均值的偏差。 然后,通过计算协方差和方差,可以出最小二乘估计值的参数 a 和 b。其中,a 的估计值为: a = ∑((x - x̄)(y - ȳ)) / ∑((x - x̄)²) b 的估计值为: b = ȳ - a*x̄ 最后,将得的 a 和 b 带入线性模型,可以得到最佳拟合直线。绘制这条直线时,需要将 x 的取值范围确定,然后根据得的 a 和 b,计算对应的 y 值。 画出这条直线可以借助图表工具,如使用 Python 中的 matplotlib 库,绘制散点图,并添加拟合直线。需注意,直线的斜率 a 以及截距 b 是通过最小二乘法计算出的。 绘制完成后,可以通过观察直线与数据点的拟合度来评估回归模型的准确性,直线与数据点的拟合度越好,说明回归模型的拟合效果越好。 综上所述,通过最小二乘法实现线性回归,可以得到一条拟合度较好的直线。这种方法在统计学和机器学习中广泛应用,用于分析和预测各种线性关系。 ### 回答3: 最小二乘法是一种常用的线性回归方法,它通过最小化实际观测值与线性模型预测值之间的残差平方和来寻找最佳拟合直线。 假设我们有一组数据 {(x1, y1), (x2, y2), …, (xn, yn)},其中xi是自变量的值,yi是对应的因变量的值。 首先,我们需要构建一个线性模型,假设是一条直线 y = ax + b。我们的目标是找到a和b的值,使得所有数据点到该直线的距离之和最小。 通过最小二乘法,我们可以得到一组方程: ∑xiyi = a∑xi² + b∑xi ∑yi = a∑xi + nb 通过解这组方程,可以得到a和b的值。计算方程的两边即可解得: a = (n∑xiyi - ∑xi∑yi) / (n∑xi² - (∑xi)²) b = (∑yi - a∑xi) / n 其中,n是数据点的个数。 然后,我们可以将解得到的a和b带入线性模型方程,得到最佳拟合直线的方程式。根据这个方程,我们可以在坐标系上画出拟合直线。 画图时,首先设置坐标系的范围,并绘制坐标轴。然后根据最佳拟合直线的方程,计算对应的y值,并将所有数据点和拟合直线一起绘制在坐标系上。 这样,我们就用最小二乘法实现了线性回归,并画出了拟合的直线。绘制后,可以通过直线的斜率和截距来判断数据的趋势和相关性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值