目录

什么是线性回归模型?

一元线性回归模型

问题引入:

问题解析:

代价函数(损失函数):

代价函数的图像

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

梯度下降算法

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

学习率a的选择

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

补充:

代码部分 - 案例实现

数据

导入数据并绘制初始图

梯度计算函数

梯度迭代函数

代价函数

绘图和预测

结果


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

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

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

什么是线性回归模型?

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

一元线性回归模型

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

问题引入:

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

问题解析:

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

代价函数(损失函数):

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

这里先随便画一条线。

令模拟出来的自变量对应应变量的值为,即,则代价函数为:

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

代价函数的图像

我们先将简化为,那么

此时的图像为一个凸函数:

对应的模拟情况:

当我们将简化为,此时的图像也是一个凸函数,我们姑且借用的图像,不过变量变为了:

对应的模拟情况:

现在将合在一起,便是一个三维碗装图像:

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

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

于是问题转化为了:求使得能取到极小值。

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

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

梯度下降算法

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

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

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

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

重复以下行为直到收敛:

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

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

求偏导:

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

学习率a的选择

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

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

关于学习率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 pltdata = 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()

梯度计算函数

对应公式:

# 梯度计算函数
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 = 0sum_db = 0for i in range(m):f_wb = w*x[i]+bdw_i = (f_wb - y[i])*x[i]db_i = f_wb - y[i]sum_dw += dw_isum_db += db_isum_dw = sum_dw / msum_db = sum_db / mreturn sum_dw,sum_db

梯度迭代函数

对应公式:

重复以下行为直到收敛:

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

# 梯度迭代函数(计算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_wb = init_bfor i in range(num_iters):# 产生梯度sum_dw,sum_db = compute_gradient(x, y, w, b)# 同时更新w和bw = w - alpha*sum_dwb = b - alpha*sum_dbreturn w,b

代价函数

对应公式:

这里只用于检验结果。

 # 代价函数
def compute_cost(x, y, w, b):m = x.shape[0]cost = 0for i in range(m):f_wb = w * x[i] + bcost = cost + (f_wb - y[i]) ** 2total_cost = 1 / (2 * m) * costreturn 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 = 0init_b = 0# 一些梯度下降的设置iterations = 100000tmp_alpha = 0.000000095w,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+bplt.plot(x,y)plt.show()

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

结果

【机器学习笔记1】一元线性回归模型及预测相关推荐

  1. 《计量经济学》学习笔记之一元线性回归模型

    注意:本笔记以文字概括为主,公式为辅,问为啥,因为贴图片和打公式对于我来说,太烦啦~所以,就只把每个章节里觉得重要的一些概念记下来. 书籍:<计量经济学(第三版)>–李子奈 导航 下一章: ...

  2. 【统计学笔记】如何判断变量间相关关系,并建立一元线性回归模型?

    本章内容: 判断两个变量间是否有相关关系,且关系强度如何? 如何建立一元线性回归模型,且模型效果如何? 如何利用回归方程进行预测? 为什么要进行残差分析,及如何进行分析? 索引

  3. 机器学习(一元线性回归模型)

    模型:一元线性回归模型 回归分析:建立方程模拟两个或者多个变量之间是如何相互关联,被预测的变量称为因变量(结果),用来进行预测的变量称为 自变量(输入参数),当输入参数只有一个(输出1个)时,称为一元 ...

  4. 一元线性回归模型预测双十一销售额

    又是一年一度"剁手节"有人说感到今年的双十一冷清了许多,很多人都很好奇今年双十一会产生多少交易额?SPSAU这里打算科学预测一下今年的天猫"双十一"的销售额. ...

  5. 计算机线性回归实验报告,实验二 一元线性回归模型的估计、检验、预测和应用-学生实验报告...

    实验二 一元线性回归模型的估计.检验.预测和应用-学生实验报告 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 17.90 积分 飞矢告牌葬秸笆麦蜘 ...

  6. 传统机器学习模型解说01:一元线性回归模型

    引入 年薪和工作年限有关吗? 可见两个变量之间存在明显的线性关系,而根据常识,工作年限是因,年薪是果. 那么,是否存在某个模型,如图中的一次函数直线,来描述两个变量之间的关系呢? 原理简述与背景介绍 ...

  7. 一元线性回归模型及其Python案例

    回归的概念:(其实就是用曲线拟合的方式探索数据规律) 回归问题的分类: 一元线性回归: 线性回归模型是利用线性拟合的方式探寻数据背后的规律.如下图所示,先通过搭建线性回归模型寻找这些散点(也称样本点) ...

  8. 《计量经济学》学习笔记之多元线性回归模型

    导航 上一章:一元线性回归模型 下一章:放宽基本假定的模型 文章目录 导航 3.1多元线性回归模型 一.多元线性回归模型 二.多元线性回归的基本假设 3.2多元线性回归模型的参数估计 四.参数统计量的 ...

  9. 机器学习笔记(5)——模型评价指标

    机器学习笔记(5)--模型评价指标 本文部分图片来源网络或学术论文,文字部分来源网络与学术论文,仅供学习使用. 目录 机器学习笔记(5)--模型评价指标 1.精确率.召回率.准确率.错误率 混淆矩阵 ...

  10. 32 回归分析——一元线性回归模型

    1.一元线性回归模型 线性模型 2.最小二乘法 3.假设检验 4.预测 5.评估 6.误差 7.决定系数 8.一元线性回归方程

最新文章

  1. matlab stract结构_MATLAB 的基础知识
  2. 盒子模型+浮动布局+定位布局
  3. 启动Jupyter Notebook时出现Kernel error错误的解决方法
  4. 关于JFace带复选框的树
  5. 【实际经验】一台无系统PC机连接局域网产生的问题
  6. windows下的nc下载地址
  7. 路由器安装教程和使用方法
  8. 通过Python获取拉钩招聘网站的公司详细地址
  9. 如何批量给pdf文件命名?
  10. Week_five_summary
  11. mysql连接access失败_我用工具怎么连接不上mysql数据库的? MySql access denied for user错误...
  12. 逝去的2009(四)
  13. 华联股份:范本式改造,BHG Mall全新升级开辟商业新契机
  14. MySQL的MMM高可用测试(转自老金)
  15. 如何在mac下拆分PDF
  16. 致远SPM解决方案之工会管理
  17. 欧洲语言测试A1到C2,德语欧标:学到A1水平是什么样的程度?
  18. 关于计算机物理层的论文,计算机网络论文
  19. arduino uno电压_Arduino UNO的简介
  20. Python网络编程:使用requests.post发送POST请求

热门文章

  1. uipath 验证码_UiPath邮件自动化Save Attachments的介绍和使用
  2. 22考研清华电子系957,390+高分上岸初复试经验分享
  3. 联想集团“2022年及未来10大科技趋势”预测
  4. 无线安全破解软件汇总和破解技术资源汇总
  5. 液压泵优化设计matlab,基于MATLAB/Simulink的挖掘机动力匹配技术的转速传感变量系统设计...
  6. HPE server 如何利用SPP包升级BIOS方法合集
  7. 分享100个好看且实用的JavaScript特效
  8. windows 10上fastboot无法识别设备问题
  9. 微信和QQ,终于可以互通了!
  10. python单元测试用例_Python单元测试与测试用例简析