学习目标:

I.   理解一元线性回归

                 II.   学会用   “梯度下降法 ”  和 “相关系数法”求解 线性模型  

III.    学会用代码来实现该过程

一.一元线性回归

(1)如何理解“回归分析”?

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

  (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轴截距,重新计算新行的误差平方和。继续调整,直到达到局部最小值,其中平方误差之和最小。

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

        

成本:

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

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

        如何改变参数呢?

对其求偏导   ,  可以得到下降最快的方向

我们便引入了梯度下降公式来改变参数值

关键是选择一个合适的学习速率(α),如果学习速率过小,则会导致收敛速度很慢;如果学习速率过大,那么就会阻碍收敛,即在极值点附近会震荡。

学习速率调整(又称学习速率调度,Learning rate schedules),在每次更新过程中,改变学习速率,如退火。一般使用某种事先设定的策略或者在每次迭代中衰减一个较小的阈值。无论哪种调整方法,都需要事先进行固定设置,这便无法自适应每次学习的数据集特点。 

        

(4)求解步骤

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

实例如下:

import numpy as np
import matplotlib.pyplot as pltclass SimpleRegress(object):def __init__(self, x_data, y_data):self.x_data = x_dataself.y_data = y_dataself.b0 = 0self.b1 = 1returndef calculate_work(self):       # 回归方程中b0、b1的求解x_mean = np.mean(self.x_data)   # x_mean= 14.0y_mean = np.mean(self.y_data)   # y_mean= 130.0x1 = self.x_data - x_mean   # x1= [-12.  -8.  -6.  -6.  -2.   2.   6.   6.   8.  12.]y1 = self.y_data - y_mean   # y1= [-72. -25. -42. -12. -13.   7.  27.  39.  19.  72.]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.0self.b0 = y_mean - self.b1 * x_mean       # b0= 60.0returndef test_data_work(self, text_data):    # 回归方程的建立与数值预测result = list([])for one_test in text_data:y = self.b0 + self.b1 * one_testresult.append(y)return resultdef 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()returndef 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()returnx_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. 梯度下降的线性回归用python_一元线性回归和梯度下降的python代码实现

    一元线性回归和梯度下降的python代码实现 2020-08-05 23:49 阅读数 9 import numpy as np import matplotlib.pyplot as plt imp ...

  2. Python基于最小二乘法的一元线性回归方程

    基于最小二乘法的一元线性回归方程 要求 关于房价的,只需要一个自变量一个因变量 用到最小二乘,但不是封装好的函数,有算法的具体实现 原理 最小二乘法 我们以最简单的一元线性模型来解释最小二乘法.什么是 ...

  3. 一元线性回归方程最小二乘法矩阵处理

    用矩阵来解最小二乘法,借助MATLAB求解方程. 材料的抗剪强度与材料承受的正应力有关.对某种材料试验的数据如下: 假设正应力的数值是精确的. 设一元线性回归方程为y=kx+b. 建立矩阵: y = ...

  4. Python实现多元线性回归方程梯度下降法与求函数极值

    梯度下降法 梯度下降法的基本思想可以类比为一个下山的过程. 假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷).但此时山上的浓雾很大,导致可视度很低:因此,下山的路径就无 ...

  5. matlab怎么建立一元线性回归方程,请问用MATLAB做一元非线性回归拟合,怎么做显著性检验呢?...

    例子; x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; X=[ones(16,1) x]; 增加一个常数项 ...

  6. 在oracle 通过sql实现一元线性回归方程

    一元线性回归是指通过线来拟合空间中的点来表示自变量和因变量之间的关系. 如何在知道这些点的情况下通过计算得出这条直线,进而在知道自变量情况下算出因变量,是本篇文档的目的. 首先来看下一元线性回归方程式 ...

  7. 一元线性回归方程C语言实现

    之前没写对,尴尬,于是重新研究了一遍,啊,确实没写对·····大佬帮改了一下····· 首先来看看如何求线性回归方程公式http://www.gaosan.com/gaokao/263926.html ...

  8. c语言一元线性回归方程程序,C语言编程对实验数据进行一元线性回归处理

    1997年第3期 云南化工 55 计算机应用 C语言编程对实验数据进行一元线性回归处理 杨继红 尹家元 沈 勇 (云南大学化学系 昆明650091) 摘 要 用目前最有发展前景的C语言编程处理分析实验 ...

  9. matlab怎么建立一元线性回归方程,MATLAB实现一元线性回归的多种方式

    1.引言回归分析,是对现有数据进行处理.从中发现有用信息的一种重要手段.而线性回归,特别是一元线性回归分析更是人们优先考虑采用的方式.基于此,本文就一元线性回归的MATLAB实现作了一番探讨,给出了多 ...

最新文章

  1. 过半网友支持马斯克卖掉特斯拉10%股票,马斯克:会遵守投票结果
  2. Spring Boot (四)模板引擎Thymeleaf集成
  3. vsftp的被动模式
  4. 买的情侣裤衩寄前男友家了,怎么办?
  5. 明年1月发布!三星Galaxy S21系列爆料:首发骁龙875旗舰芯片
  6. linux中的sed指令
  7. 关于中职计算机专业,关于中职学校计算机专业改革探讨
  8. minist数据集下载,numpy可直接读取的npy格式
  9. DxO PhotoLab 3 for Mac(照片后期处理软件)
  10. QTTabBar我装好啦!
  11. 三极管原理-导通条件
  12. 【微分方程数值解】常微分方程(一)欧拉方法和改进欧拉方法(附python算例,封装类)
  13. 车管所服务器维护还能考科目四吗,车管所可以预约科目四吗
  14. linux 脚本判断进程,Shell实现判断进程是否存在并重新启动脚本
  15. 张铁柱-前端实现《低代码可视化编辑器》(一)思路整理 React-dnd+Ts
  16. ui九宫格切图_【九宫切图】什么是九宫绘图,九宫格绘法
  17. jsp页面如何调用本机的应用程序?例如c:/netterm.exe?(转载)
  18. Linux下vscode无法查看定义?
  19. 震惊!英伟达 4 月的发布会全部是合成的
  20. 一次JVM调优的笔记

热门文章

  1. 记一次Process finished with exit code 1 项目异常
  2. matlab中的帮助命令
  3. DFROBOT Mind+ 掌控板 人工智能测温实验
  4. 如何利用在线帮助中心解决客户问题?
  5. Ubuntu和windows双系统并存条件下,在Windows系统内插耳机没有声音的问题
  6. 上一步,下一步(撤销和恢复)
  7. 百度地图批量精度和维度Java,关于百度地图API批量转换成坐标的方法
  8. tornado 自定义WEB框架 、与Tyrion组件做表单验证
  9. (原创)直观了解通道混和器的校色作用
  10. 想进大厂必须要知道的Web安全问题