首页 > 编程知识 正文

线性回归方程怎么求,一元线性回归方程的拟合

时间:2023-05-05 04:25:48 阅读:176282 作者:1982

学习目标: http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /一元线性回归

)1) I. 理解一元线性回归

II. 学会用 “梯度下降法 ” 和 “相关系数法”求解 线性模型III. 学会用代码来实现该过程

如何理解“回归分析”?

回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法

是对具有因果关系的影响因素(自变量)和预测对象(因变量)所进行的数理统计分析处理。只有当变量与因变量确实存在某种关系时,建立的回归方程才有意义。因此,作为自变量的因素与作为因变量的预测对象是否有关,相关程度如何,以及判断这种相关程度的把握性多大,就成为进行回归分析必须要解决的问题。进行相关分析,一般要求出相关关系,以相关系数的大小来判断自变量和因变量的相关的程度。

(2)分类

标准1:据自变量和因变量之间的关系类型

线性回归分析和非线性回归分析

标准2:按照自变量的数量

一元回归分析和多元回归分析

一元线性回归的形式为 y = a + b x

根据样本观察数据估计出a和b的数值之后,样本回归方程可作为预测模型,即一元线性回归预 测模型

(3)求解回归预测模型参数的方法

方法一:根据相关系数与标准差求解

直线可以用公式表示:y=bx+a。

回归线斜率m的公式为:b = r * (SD of y / SD of x)。

转换:x和y值之间的相关系数(r),乘以y值的标准差(SD of y)除以x值的标准偏差(SD of x)。

将 样本的均值点 代入回归线求出 a

相关系数求解公式:

II.梯度下降法

梯度下降原理:

成本:

从一条随机线开始,比如说直线a,我们计算这条线的误差平方和,然后调整斜率和y轴截距,重新计算新行的误差平方和。继续调整,直到达到局部最小值,其中平方误差之和最小。

梯度下降法是一种通过多次迭代最小化误差平方和来逼近最小平方回归线的算法

成本”就是误差(预测值-实际值)的平方和

为了是预测模型更加准确(即成本最低),我们可以通过改变斜率和截距来寻找最佳拟合线

http://www.Sina.com /http://www.Sina.com /

3358www.Sina.com/(也称为学习速度安排,Learning rate schedules ), 如何改变参数呢?

固定设置,这便无法自适应每次学习的数据集特点。 

        

(4)求解步骤

1、散点图判断变量关系(简单线性);2、求相关系数及线性验证;3、求回归系数,建立回归方程;4、回归方程检验;5、参数的区间估计;6、预测;

实例如下:

import numpy as npimport matplotlib.pyplot as plt class SimpleRegress(object): def __init__(self, x_data, y_data): self.x_data = x_data self.y_data = y_data self.b0 = 0 self.b1 = 1 return def calculate_work(self): # 回归方程中b0、b1的求解 x_mean = np.mean(self.x_data) # x_mean= 14.0 y_mean = np.mean(self.y_data) # y_mean= 130.0 x1 = self.x_data - x_mean # x1= [-12. -8. -6. -6. -2. 2. 6. 6. 8. 12.] y1 = self.y_data - y_mean # y1= [tldlh s = x1 * y1 # s= [864. 200. 252. 72. 26. 14. 162. 234. 152. 864.] u = x1 * x1 # u= [144. 64. 36. 36. 4. 4. 36. 36. 64. 144.] self.b1 = np.sum(s) / np.sum(u) # b1= 5.0 self.b0 = y_mean - self.b1 * x_mean # b0= 60.0 return def test_data_work(self, text_data): # 回归方程的建立与数值预测 result = list([]) for one_test in text_data: y = self.b0 + self.b1 * one_test result.append(y) return result def root_data_view(self): # 绘制源数据可视化图 plt.scatter(x_data, y_data, label='simple regress', color='k', s=5) # s 点的大小 plt.xlabel('x') plt.ylabel('y') plt.legend() plt.show() return def test_data_view(self): # 绘制回归线 # 绘制回归线两个点的数据 x_min = np.min(self.x_data) x_max = np.max(self.x_data) y_min = np.min(self.y_data) y_max = np.max(self.y_data) x_plot = list([x_min, x_max]) y_plot = list([y_min, y_max]) # 绘制 plt.scatter(x_data, y_data, label='root data', color='k', s=5) # s 点的大小 plt.plot(x_plot, y_plot, label='regression line') plt.xlabel('x') plt.ylabel('y') plt.legend() plt.title('simple linear regression') plt.show() return x_data = list([2, 6, 8, 8, 12, 16, 20, 20, 22, 26])y_data = list([58, 105, 88, 118, 117, 137, 157, 169, 149, 202])test_data = list([16]) sr = SimpleRegress(x_data, y_data)sr.calculate_work()result = sr.test_data_work(test_data) # result= [140.0]#sr.root_data_view()sr.test_data_view()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。