上篇是先撸了一把梯度下降的代码, 用来优先 LR 中的 MSE. 核心代码是在求解梯度这一步.

# y = wx + b
def step_gradient(b_current, w_current, points, lr):
# 计算误差函数在所有点的导数, 并更新 w, b
b_gradient = 0
w_gradinet = 0
n = len(points) # 样本数
for i in range(n):
# x, y 都是一个数值
x = points[i, 0]
y = points[i, 1] b_gradient += (n/2) * ((w_current * x + b) - y)
w_gradinet += (n/2) * x * ((w_current * x + b) - y) # 根据梯度下降法, 更新 w, b
new_w = w_current - (lr * b_gradient)
new_b = b_current - (lr * b_gradient) return [new_w, new_b]

比较困惑可能是在这两行.

b_gradient += (n/2) * ((w_current * x + b) - y)
w_gradinet += (n/2) * x * ((w_current * x + b) - y)

本来想着, 算了, 这是最基本的, 但还是给做推导了一下GD, 想着即便是写 hello, world, 也是很有意义的.

推过过程

我是用Pad来写的, 贴的图, 凑合着用吧, 能表达清楚大致意思就行, 原理其实就是, 求导数, 求梯度而已, 也没啥新的东西, 都是老古董了, 几百年都没有变过的.

这样再来看这两行代码, 不就立刻秒懂了吗.

b_gradient += (n/2) * ((w_current * x + b) - y)
w_gradinet += (n/2) * x * ((w_current * x + b) - y)

ML 有意思的一点在于, 它跟普通的写代码不一样, 更多的时候, 像是把数学公式, 翻译为代码的过程, 这跟代码逻辑没有太大关系, 跟数学的基本功有关系. 数学这块涉及的其实不难, 大部分都在求解多元函数的偏导数, 导数, 条件极值涉及拉格朗日, 函数优化用泰勒展开等, 都是一些高数的基本概念而已, 几百年来, 都没有变过, 是死的, 相对于, 写代码的业务逻辑, 还是会相对有趣一点, 所以,我也是作为爱好,偶尔写写.

最为享受的一点是, 基于数学模型的完整推导下, 用编程语言, 来将这个过程或者, 推导出来的结论, 进行代码化, 然后进行封装为一个 api, 这样就完成了闭环, 还是很有趣的一件事情.

其实是关于导包, 当然我现在是在开始学习用框架, 导包, 不同在于, 我是自信的, 都是基于, 对数学原理的理解来导包, 很自信, 万一, 导包不好使, 就基于数学公式, 自己慢慢撸代码, 也是能实现的. 反之, 如果不懂数学原理来调包, 那ML则会是变成多么无聊的事情呢.

小结

  • ML 就3部分: 数学模型 + 损失函数(目标) + 优化求解参数 (code)
  • 梯度是偏导数组成的向量, 向量有大小, 有方向, 衡量大小用模; 导数的本质是衡量 "变化率"
  • 梯度是多元函数, 最大方向导数 的方向, 加个 "-" 反方向, 则是函数增长最小的方向, 即极值点的位置
  • 梯度下降法, 即沿着梯度反方向求极值点时的模型参数, 类似的还有梯度上升法, 在求解SVM会用到.

LR_GD_MSE (公式补充)的更多相关文章

  1. openjudge-膨胀的木棍

    http://noi.openjudge.cn/ch0111/09/ 总时间限制: 1000ms  内存限制: 65536kB 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1 ...

  2. 算法<初级> - 第一章 排序相关问题

    算法 - 第一章 时间复杂度: Big O 时间/空间复杂度计算一样,都是跟输入数据源的大小有关 n->∞ O(logn) 每次只使用数据源的一半,logn同理 最优解 先满足时间复杂度的情况最 ...

  3. 关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。

    前言: oop非常非常非常重要.搞不懂oop,就玩不了python,就算能写也一定是写代码时候喜欢靠猜瞎猫碰死老鼠写得心很虚.为什么这么说呢,我也是从面向过程编程到死走过来的,一路def到死,一看到有 ...

  4. 像画笔一样慢慢画出Path的三种方法(补充第四种)

    今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现. 北京-LGL 博客号@ligl007发起了这个话题.然后各路高手踊跃发表意见.最后雷叔 上海-雷蒙 博客号@雷蒙之星 ...

  5. 期权定价公式:BS公式推导——从高数和概率论角度

    嗯,自己看了下书.做了点笔记,做了一些相关的基础知识的补充,尽力做到了详细,这样子,应该上过本科的孩子,只要有高数和概率论基础.都能看懂整个BS公式的推导和避开BS随机微分方程求解的方式的证明了.

  6. ubuntu 安装apache2并配置cgi,搭建mimetex转化公式图片的服务

    一.Apache的安装 在终端输入: sudo apt-get install apache2 二.启动.停止Apache服务 Apache的启动和停止文件是:/etc/init.d/apache2 ...

  7. Excel处理数据用到的一些公式和VBA脚本

    最近工作中用到EXCEL统计处理一些数据,正好之前有自学了一段时间的EXCEL,这次正好用上.为了加深印象,以后方便翻阅,就记录下来.这篇会不断补充. IF 多条件判断返回值 IF(logical_t ...

  8. as3 公式

    AS3缓动公式:sprite.x += (targetX - sprite.x) * easing;//easing为缓动系数变量sprite.y += (targetY - sprite.y) * ...

  9. 偏最小二乘回归分析建模步骤的R实现(康复俱乐部20名成员测试数据)+补充pls回归系数矩阵的算法实现

    kf=read.csv('d:/kf.csv') # 读取康复数据kfsl=as.matrix(kf[,1:3]) #生成生理指标矩阵xl=as.matrix(kf[,4:6]) #生成训练指标矩阵x ...

  10. Andrew Ng机器学习课程笔记--week2(多元线性回归&正规公式)

    1. 内容概要 Multivariate Linear Regression(多元线性回归) 多元特征 多元变量的梯度下降 特征缩放 Computing Parameters Analytically ...

随机推荐

  1. 傻妞PLUS机器人教程——安装

    特性 简单易用的消息搬运功能. 简单强大的自定义回复功能. 完整支持 ECMAScript 5.1 的插件系统,基于 otto. 支持通过内置的阉割版 Express / fetch ,接入互联网. ...

  2. Scala高阶函数 1

    package com.wyh.day01 /** * * 高阶函数 */ object ScalaFun3 { def main(args: Array[String]): Unit = { //定 ...

  3. 常见的各类LLM基座模型(GPT、DeepSeek、Qwen等)模型解析以及对比

    From: https://www.big-yellow-j.top/posts/2025/02/15/LLM.html 各类LLM模型技术汇总 只去对比整体框架,对所采用的激活函数,归一化处理,位置 ...

  4. Linux系列:如何调试 malloc 的底层源码

    一:背景 1. 讲故事 上一篇我们聊过 C# 调用 C 的 malloc 代码来演示heap的内存泄露问题,但要想深入研究得必须把 malloc 的实现库 libc.so 给调试起来,大家都知道在Li ...

  5. layui 自动触发radio和select

    layui对radio和select做了包装,正常用jquery选中后使用trigger不起作用. 那么,怎么让其自动触发呢? 对radio来说,必须在$选中后.next('.layui-form-r ...

  6. 地球OL攻略 —— 某应届生求职总结

    某应届生的苦逼求职总结 1.自我介绍,阐述一下自己过去的情况 2.目前的就业情况以及从事的就业方向 3.你在面试的时候遇到什么困难?是怎么帮忙解决的 4.当初为什么会选择选择这一行? 5.分享一下学习 ...

  7. Java的volatile和sychronized底层实现

    1. 概览 从Java代码级别到硬件级别各层都是如何实现的 2. Synchronized 2.1 字节码层面 使用javap -verbose <class文件>可以查看到字节码信息,其 ...

  8. 【Bug记录】[@vue/compiler-sfc] `defineProps` is a compiler macro and no longer needs to be imported.

    [Bug记录][@vue/compiler-sfc] defineProps is a compiler macro and no longer needs to be imported. Vue3项 ...

  9. Linux netstat 命令查看80端口状态

    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Membershi ...

  10. 查看Linux防火墙状态

    环境:VMware.CentOS8从centos7开始使用systemctl.firewalld来管理服务和程序,包括了service和chkconfig.防火墙状态:systemctl status ...