第二章.线性回归以及非线性回归—梯度下降法

news2024/11/26 5:01:32

第二章.线性回归以及非线性回归

2.5 梯度下降法

1.流程:

  • 初始化θ0,θ1

  • 不断改变θ0,θ1,直到J(θ0,θ1)到达一个全局最小值或局部极小值

2.图像分析:

在这里插入图片描述

1).图像层面分析代价函数:

①.红色区域表示代价函数的值比较大,蓝色区域表示代价函数的值比较小

②.先给(θ0,θ1)赋一个初始值,然后进行迭代(就是求导,得到一个梯度方向)得到下一个点,不断迭代优化,直到J(θ0,θ1)到达一个全局最小值,最小值所对应的(θ0,θ1)就是我们所求的值

2).梯度下降法内部循环执行的函数:(当前步到下一步的计算函数)

①.公式
在这里插入图片描述
参数说明:
:= :相当于赋值
α:学习率,控制梯度下降法的运动步长 [学习率不能太大(有可能一直循环,找不到最小值),也不能太小(耗时长),可以多尝试一些值]
在这里插入图片描述

②.更新(θ0,θ1)的方法
在这里插入图片描述

3.梯度下降法的缺点:

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

缺点: 初始值(θ0,θ1)的选取位置不同,可能会导致J(θ0,θ1)找不到全局最小值,会找到局部极小值。

4.梯度下降法求解线性回归

1).公式:在这里插入图片描述

①.求导之后的公式:
在这里插入图片描述

2).非凸函数和凸函数:

在这里插入图片描述
非凸函数:使用梯度下降法可能会存在多个局部极小值,不太适合使用梯度下降法

凸函数:只存在一个全局最小值,比较适合使用梯度下降法

3).线性回归的代价函数是凸函数:

在这里插入图片描述

初始值(θ0和θ1)无论怎么选择,使用梯度下降法进行优化都会找到全局最小值,没有局部极小值,线性回归比较适合梯度下降法

5.梯度下降法的优化过程:在这里插入图片描述

6.实战1: 梯度下降法—一元线性回归:

1).CSV中的数据:

  • data.xlsx
  • 上传文件为excel文件,需转换成csv文件使用

2).代码

import numpy as np
import matplotlib.pyplot as plt

# 载入数据
data = np.loadtxt('D:\\Data\\data.csv', delimiter=',')
x_data = data[:, 0]
y_data = data[:, 1]
plt.scatter(x_data, y_data)
plt.show()

# 学习率learning rate
lr = 0.0001
# 截距
b = 0
# 斜率
k = 0
# 最大迭代次数
epochs = 50


# 代价函数:最小二乘法
def comuter_error(b, k, x_data, y_data):
    totalError = 0
    for i in range(0, len(x_data)):
        totalError += (y_data[i] - (k * x_data[i] + b)) ** 2
    return totalError / float(len(x_data)) / 2.0  # 2除不除都可以,之前的文档有说明


# 梯度下降法
def gradient_descent(x_data, y_data, k, b, lr, epochs):
    # 总的数据量
    m = float(len(x_data))

    for i in range(epochs):
        grad_b = 0
        grad_k = 0
        for j in range(0, len(x_data)):
            grad_b += (1 / m) * ((k * x_data[j] + b) - y_data[j])
            grad_k += (1 / m) * x_data[j] * ((k * x_data[j] + b) - y_data[j])
            # 更新b,k
        b = b - lr * grad_b
        k = k - lr * grad_k

    #         #每循环10次输入一次图像
    #         if i%10==0:
    #             plt.plot(x_data,y_data,'b.')
    #             plt.plot(x_data,k * x_data + b,'r')
    #             plt.show()

    return k, b


print('初始参数 b={0},k={1},error={2}'.format(b, k, comuter_error(b, k, x_data, y_data)))
k, b = gradient_descent(x_data, y_data, k, b, lr, epochs)
print('结果参数 b={0},k={1},error={2}'.format(b, k, comuter_error(b, k, x_data, y_data)))
plt.plot(x_data, y_data, 'b.')
plt.plot(x_data, k * x_data + b, 'r')
plt.show()

示:
①.数据

在这里插入图片描述

②.图像
请添加图片描述

7.实战2: sklearn—一元线性回归:

1).CSV中的数据:

  • data.xlsx
  • 上传文件为excel文件,需转换成csv文件使用

2).代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 载入数据
data = np.loadtxt('D:\\Data\\data.csv', delimiter=',')
x_data = data[:, 0]
y_data = data[:, 1]
plt.scatter(x_data, y_data)
plt.show()

# 维度的变化
x_data = data[:, 0, np.newaxis]
y_data = data[:, 1, np.newaxis]

# 创建并拟合模型
model = LinearRegression(copy_X=True, fit_intercept=True)
model.fit(x_data, y_data)

# 截距
b = model.intercept_
print('截距:', b)

# 回归系数
k = model.coef_
print('回归系数(斜率):', k)

# 画图
plt.scatter(x_data, y_data, s=10)
plt.plot(x_data, model.predict(x_data), 'r')
plt.show()

3).结果展示:

①.数据

在这里插入图片描述

②.图像
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode 1443.Minimum Time to Collect All Apples in a Tree(收集苹果所需最短时间)

给出节点个数n, edges是连接的边,[a,b]是连接的两个顶点。 hasApple表示第 i 个顶点上是否有苹果。 走一条边需要耗时1s, 从顶点0出发,最后回到顶点0, 问收集所有苹果所需最短的时间。 思路: (1)DFS 可以把问题简化…

pdf文档控件Aspose.PDF for .NET 授权须知

Aspose.PDF是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能&…

[ 解决报错篇 ] tomcat 执行 startup.bat 文件报错 -- tomcat 启动失败(安装 java 环境并配置环境变量)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

Linux——팔 gdb部分基础知识以及操作系统的初级理解

文章目录一、gdb部分基础知识1、打断点2、逐语句过程3、监视&#xff0c;内存4、部分功能指令二、进程概念的初级理解1、冯-诺依曼体系结构2、操作系统的初级理解一、gdb部分基础知识 承接上一篇。 1、打断点 放一下全部代码 1 #include <stdio.h>2 3 int ADD(int n)4…

vs2017调试ffprobe源码

鄙人之前写过vs2017调试ffmpeg源码 现在由于需要分析视频文件里面的具体帧情况&#xff0c;需要用到ffprobe工具&#xff0c;为此本篇博客搭建vs2017工程&#xff0c;可以调试ffprobe&#xff0c;ffprobe比ffmpeg简单很多。 首先找到ffmpeg的编译目录&#xff0c;将下列三个文…

结构体内存对齐与位段详解

文章目录前言一、内存对齐1.内存对齐的规则2. 内存对齐的具体实例与运用3.为什么会有内存对齐&#xff1f;4.修改默认对齐数二、位段1.什么是位段2.位段的例子3.位段的优缺点结语前言 学习了结构体&#xff0c;你会算结构体的占用字节数吗&#xff0c;许多人恐怕摇头&#xff0…

ArcGIS分式、假分式标注

解说一下 ArcGIS中不同标注 直接标注语句分享见文后 分式标注 假分式标注 二、标注语句与视频教学 ArcGIS分数、假分数标注获取语句地址&#xff1a; ArcGIS分式、假分式标注&#xff01;标注语句直接分享 推荐学习 ArcGIS之模型构建器&#xff08;ModelBuilder&#xff0…

初级通讯录的实现详细攻略

我们设计的要求存储多少个人的信息我们使用宏&#xff0c;这样方便修改建立三个文件先从主函数入手为了持续多次&#xff0c;实现操作&#xff0c;我们利用循环&#xff0c;循环次数未知&#xff0c;我们只能选择while循环&#xff0c;do-while循环&#xff0c;我们始终要进行一…

ORB-SLAM2 --- LoopClosing::Run 回环检测线程解析

目录 1.函数作用 2.code 3.函数解析 3.1 查看是否有待处理的回环关键帧LoopClosing::CheckNewKeyFrames 3.2 检测闭环LoopClosing::DetectLoop 3.3 计算当前关键帧和上一步闭环候选帧的Sim3变换 3.4 闭环矫正 1.函数作用 回环检测&#xff0c;又称闭环检测&#xff0c…

文件操作和IO

一.文件的概念&#xff1a;狭义的文件指&#xff1a;硬盘上的文件和目录广义上的文件指&#xff1a;计算机中的很多软硬件资源路径&#xff1a;绝对路径&#xff1a;以c&#xff1a;d盘符开头的路径&#xff0c;比如c:/Intel/Logs/text.txt相对路径&#xff1a;以当前所在的目录…

Vue - 完美解决小数的四则运算(加减乘除)导致精度丢失问题,提供详细计算示例代码vue数据计算丢失精度

前言 由于 JavaScript 语言的问题,两个小数进行四则运算时,会出现各种问题,一些财务系统是必须要解决的。 本文实现了 完美修复小数计算时,计算错误、精度丢失等问题, 您可以进行任意小数的四则运算,都能保证结果是正确的。 如下图所示,使用了本文提供的方法后,可以形…

ArcGIS修改图斑时替换几何的妙用!不要只会整型要素

我们时常通过整型要素来修改要素的形状&#xff0c;但是有时候我们改变整个要素的形状、位置&#xff0c;还要保留属性不变&#xff0c;那我们就要考虑&#xff0c;高级编辑中的“替换几何”工具了。 01 替换几何原理 1 、“替换几何”工具可以为要素创建全新形状。“替换几何…

【Java】Properties类

文章目录01 初识Properties02 Properties常用方法03 Properties使用案例01 初识Properties 创建这样一个配置文件&#xff1a; 传统方法&#xff1a; public static void main(String[] args) throws IOException {//读取mysql.properties文件&#xff0c;并得到ip、user、pw…

Dubbo集群容错

Dubbo集群容错 1. 集群容错 集群调用失败时&#xff0c;Dubbo 提供的容错方案。 在集群调用失败时&#xff0c;Dubbo 提供了多种容错方案&#xff0c;缺省为 failover 重试。 各节点关系&#xff1a; 这里的 Invoker 是 Provider 的一个可调用 Service 的抽象&#xff0c;I…

n皇后(回溯)

著名的n皇后问题 即在棋盘上任意两个皇后不能在同一行&#xff0c;同一列&#xff0c;或者斜对角线&#xff0c;反斜对角线的位置 以判断&#xff08;5&#xff0c;1&#xff09;位置为例 往右下方&#xff08;斜对角线&#xff09;一连串的位置 &#xff08;5&#xff0c;1&…

Naive-UI自定义TabPane样式

前言前端开发通常使用 第三方 UI 组件库&#xff0c;像大家熟悉的 Element-UI、AntD Vue 等最近发现一个 还比较好用的 组件库 Naive-UI 传送门 &#xff0c;Vue 3 组件库&#xff0c;使用 TypeScript &#xff0c;用起来感觉还不错&#xff0c;它的主题也可以切换 &#xff08…

首款自研成像雷达发布!国产玩家赋能智能驾驶“第四类”感知

4D成像雷达赛道的“战火”正在不断升级。 高工智能汽车研究院预计&#xff0c;4D成像雷达将从2023年初开始小规模前装导入&#xff0c;预计到2024年&#xff0c;定点/搭载量有望突破百万颗&#xff0c;到2025年占全部前向毫米波雷达的比重或超过40%。 伴随着中国自动驾驶的渗…

Java多线程:多线程 Thread 类 中常用的方法的使用

Java多线程&#xff1a;多线程 Thread 类 中常用的方法的使用 每博一文案 日本有一位方丈曾在其寺庙的公告栏上写下一句标语&#xff1a; ”没有失败的人生才最失败。“ 深以为然&#xff0c;不上高山&#xff0c;不知平地&#xff0c;不经大海&#xff0c;不懂宽阔的涵义&…

很少人知道的7个极酷HTML元素

搜索很酷的HTML元素&#xff0c;尤其是当您不知道要查找什么时&#xff0c;通常就像被扔进一堆垃圾中一样动图别担心&#xff0c;我为你做了肮脏的工作&#xff01;在浏览了看似无穷无尽的HTML元素之后&#xff0c;我挖出了一些很少使用的宝石&#xff01;1. meter&progres…

多线程Monitor工作原理

&#x1f34e;1. 什么是Monitor?我们都知道synchronized的作用是用来保证修饰的代码或者方法执行有且只有一个线程执行&#xff0c;也就是锁。那么在执行被锁住的方式时&#xff0c;synchronized就需要通过monitor来记录和保证锁的状态。所以monitor这里的作用其实就是起到了控…