IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 深入浅出梯度下降算法 -> 正文阅读

[数据结构与算法]深入浅出梯度下降算法

一、损失函数

损失函数是用来评价预测值和真实值的不一致程度,,损失函数越好,通常模型的性能越好。
常用的损失函数:最小均方差
在这里插入图片描述

最好的均方差MSE是无限接近于0(图像的导数等于0)。

二、梯度下降

1、到底什么是梯度下降?

简单理解: 假如你在山顶,你想以以最快的方式下山,最好的办法就是顺着坡度最陡峭的地方走下去。由于不熟悉路,下山的过程每走过一段路程就需要停下来观望,从而选择最陡峭的下山路。这样就可以在最短的时间内下山。
梯度下降原理:在下降一个梯度的阶层后,寻找一个当前获得的最大坡度继续下降。

2、学习速率

简单来讲,还是前面的那个例子,学习速率就是在你下山时候的步长
在下山的时候,初期你下山的步长会很大,快到山底的时候你的步长就会减少。
即:最理想的学习率不是固定值, 而是一个随着训练次数衰减的变化的值, 也就是在训练初期, 学习率比较大, 随着训练的进行, 学习率不断减小, 直到模型收敛(趋近于一个数 即倒导数等于0).

三、梯度下降使用数学解决

假设回归函数为一次函数:y=mx+b
y=mx+b即为猜测值
1、首先找到MSE变化最缓慢的地方,即导数接近于0的地方
对MSE求偏导,分别对m、b求一次导。
在这里插入图片描述
假设初始时 m=1 b=1,
每次变化m b的值 即迭代
在这里插入图片描述

学习速率为0.00001时:
在这里插入图片描述
在这里插入图片描述

可以看到m接近0时 b还是-6多 要继续迭代,直到 m b都接近于0(大约要100多万次)。
我们的EXCEL表格的列数远远达不到。

四、使用代码实现梯度下降

函数设计:

grandientdecent():运行一次梯度下降算法
train():多次运行梯度下降算法
predict():使用train()对m和b进行预测
test():测试预测的准确性,模型评估
import numpy as np
import datetime

data = np.array([
    [80, 200],
    [95, 230],
    [104, 245],
    [112, 274],
    [125, 259],
    [135, 262]
])
m = 1
b = 1

xarray = data[:, 0]
yarray = data[:, -1]
lr = 0.00001


def grandientdecent():
    # b的斜率
    bslop = 0
    for index, x in enumerate(xarray):
        bslop += m * x + b - yarray[index]
    bslop = bslop * 2 / len(xarray)
   # print("mse对b求导={}".format(bslop))
    # m的斜率
    mslop = 0
    for index, x in enumerate(xarray):
        mslop += (m * x + b - yarray[index]) * x
    mslop = mslop * 2 / len(xarray)
   # print("mse对m求导={}".format(mslop))
    return (bslop, mslop)


def train():
    for i in range(1, 1000000):
        bslop, mslop = grandientdecent()
        global m
        m = m - mslop * lr
        global b
        b = b - bslop * lr
        if (abs(mslop) < 0.5 and abs(bslop) < 0.5):
            break
    end_time = datetime.datetime.now()
    print("运行时间:{}".format(end_time - start_time))
    print("训练完成 m={},b={}".format(m, b))


if __name__ == "__main__":
    start_time = datetime.datetime.now()
    train()

结果:运行了10s出了结果
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:25:52  更:2022-03-17 22:26:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:54:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码