上篇是先撸了一把梯度下降的代码, 用来优先 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. AD22 solder层开窗不见了什么原因?PCB阻焊层不显示阻焊。

    做回来的板子焊盘没有开窗! 3D上看也是没有的! 上网查了,在设计->规则->Mask->SolderMaskExpansion 将盖油勾选去掉即可. END

  2. Studio 3T 试用期破解(含破解补丁) - 解决办法

    使用数据可视化工具Studio 3T查看MongoDB数据集数据,但是Studio 3T试用过期了,没了权限打不开软件怎么办? 这里通过建立批处理文件,重置试用时间,即可临时破解权限. 每次开机重启脚 ...

  3. SpringBoot 2.x 接入非标准SSE格式大模型流式响应实践 🚀

    近期DeepSeek等国产大模型热度持续攀升,其关注度甚至超过了OpenAI(被戏称为CloseAI).在SpringBoot3.x环境中,可以使用官方的Spring AI轻松接入,但对于仍在使用JD ...

  4. Sqoop1的导入导出

    Sqoop1 和 Sqoop2 的区别 # 版本上 Sqoop1: 1.4.x Sqoop2: 1.99.x # 架构上 Sqoop1 使用 Sqoop客户端直接提交的方式(命令.将命令封装在脚本中) ...

  5. swoole(5)信号监听、热重启

    一:信号监听 信号:由用户.系统或者进程发给目标进程的信息,以通知目标进程某个状态的改变或系统异常 信号查看:kill -l SIGHUP     终止进程     终端线路挂断 SIGINT     ...

  6. layui 点击链接复制内容到剪切板

    var tableObj = table.render({ id: 'list_table', elem: '#list_table', url: '', align: "center&qu ...

  7. AI 实践|零成本生成SEO友好的TDK落地方案

    之前写过一篇文章「Google搜索成最大入口,简单谈下个人博客的SEO」,文章里介绍了网页的描述信息TDK(Title.Description和Keywords)对SEO的重要作用,尽管已经意识到了T ...

  8. Netty基础—4.NIO的使用简介

    大纲 1.Buffer缓冲区 2.Channel通道 3.BIO编程 4.伪异步IO编程 5.改造程序以支持长连接 6.NIO三大核心组件 7.NIO服务端的创建流程 8.NIO客户端的创建流程 9. ...

  9. nginx 部署vue http、https

    nignx配置文件 server { listen 80; server_name your_domain.com; return 301 https://$server_name$request_u ...

  10. 服务器Go程序意外停止自动重启

    判断进程是否挂掉 ps -ef | grep ./blog |wc -l 如果输出为1,说明进程挂掉了 如果输出为2,说明进程正常运行 编辑脚本来检测和完成重启 vim restart.sh 逻辑代码 ...