当前位置: 首页 > news >正文

机器学习——多元梯度下降法

一、多维特征模型

目前为止,我们探讨了单变量/特征的回归模型(参考机器学习专栏中前面的文章),现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为 ( x 1 , x 2 , . . . , x n ) \left( {x_{1}},{x_{2}},...,{x_{n}} \right) (x1,x2,...,xn)
在这里插入图片描述
增添更多特征后,我们引入一系列新的注释:

  1. n n n 代表特征的数量
  2. x ( i ) {x^{\left( i \right)}} x(i)代表第 i i i 个训练实例,是特征矩阵中的第 i i i行,是一个向量vector)。
    比方说,上图的
    x ( 2 ) = [ 1416   3   2   40 ] {x}^{(2)}\text{=}\begin{bmatrix} 1416\\\ 3\\\ 2\\\ 40 \end{bmatrix} x(2)= 1416 3 2 40
  3. x j ( i ) {x}_{j}^{\left( i \right)} xj(i)代表特征矩阵中第 i i i 行的第 j j j 个特征,也就是第 i i i 个训练实例的第 j j j 个特征。
    如上图的 x 2 ( 2 ) = 3 , x 3 ( 2 ) = 2 x_{2}^{\left( 2 \right)}=3,x_{3}^{\left( 2 \right)}=2 x2(2)=3,x3(2)=2
  4. 支持多变量的假设 h h h 表示为: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θ0+θ1x1+θ2x2+...+θnxn
    这个公式中有 n + 1 n+1 n+1个参数和 n n n个变量,为了使得公式能够简化一些,引入 x 0 = 1 x_{0}=1 x0=1,则公式转化为: h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn

此时模型中的参数是一个 n + 1 n+1 n+1维的向量,任何一个训练实例也都是 n + 1 n+1 n+1维的向量,特征矩阵 X X X的维度是 m ∗ ( n + 1 ) m*(n+1) m(n+1)。 因此公式可以简化为: h θ ( x ) = θ T X h_{\theta} \left( x \right)={\theta^{T}}X hθ(x)=θTX,其中上标 T T T代表矩阵转置。

二、多元梯度下降

与单变量线性回归类似,参考单变量梯度下降 。在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:
在这里插入图片描述
我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法为:
在这里插入图片描述
即:
在这里插入图片描述
求导数后得到:
在这里插入图片描述
当n>=1时,
在这里插入图片描述
我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。

三、特征放缩

在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。

以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
在这里插入图片描述
解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。如图:
在这里插入图片描述
最简单的方法是令: x n = x n − μ n s n {{x}_{n}}=\frac{{{x}_{n}}-{{\mu}_{n}}}{{{s}_{n}}} xn=snxnμn,其中 μ n {\mu_{n}} μn是平均值, s n {s_{n}} sn是标准差。
s n {s_{n}} sn简单表达就是特征的取值范围的大小,即最大值-最小值。

四、学习率

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
在这里插入图片描述
在上图中,纵轴表示J 代价函数,横轴是执行梯度算法的迭代次数。通过这种曲线图可以来判断梯度下降算法是否已经收敛。
也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如0.001)进行比较,但通常看上面这样的图表更好。

上面这种图还可以告诉你算法有没有正常工作。
在这里插入图片描述
如果我们得到的曲线图中,代价函数J 随迭代步数的变化曲线是不断上升的,这就表明梯度算法没有正常工作,这通常意味着应该使用较小的学习率 α 。
在这里插入图片描述
如果代价函数J 随迭代步数的变化曲线是上升和下降不断交错的,这也意味着我们应该使用较小的学习率 α 。
综上,梯度下降算法的每次迭代受到学习率的影响,如果学习率 a a a过小,则达到收敛所需的迭代次数会非常高;如果学习率 a a a过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试些学习率:
α = 0.01 , 0.03 , 0.1 , 0.3 , 1 , 3 , 10 \alpha=0.01,0.03,0.1,0.3,1,3,10 α=0.010.030.10.31310

相关文章:

  • Win10自带超级截屏利器
  • 【如何拍出一条好的vlog】素材篇
  • axios--》axios初步操作
  • javaScript 防抖/节流,探索学习,对新手友好的内容
  • 【docker】dockerfile优化镜像大小
  • m基于RFID和DBSCAN聚类的InSAR室内三维定位算法的matlab仿真
  • 【面试题】 对象、原型、原型链与继承?这次我懂了!
  • python-sklearn模型通用方法的介绍
  • 入坑 Hack The Box
  • Pr 视频效果:模糊与锐化
  • 智慧城市建设及发展资料合集
  • JMeter笔记16 | 性能参数配置及测试监听
  • 三个“清洁代码”技巧将使您的开发团队效率提高 50%
  • create® 3入门教程-使用多个机器人
  • Redis实战篇一 (短信登录)
  • Date型的使用
  • iOS小技巧之UIImagePickerController实现头像选择
  • text-decoration与color属性
  • TypeScript实现数据结构(一)栈,队列,链表
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 读懂package.json -- 依赖管理
  • 对象引论
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 回顾 Swift 多平台移植进度 #2
  • 理解在java “”i=i++;”所发生的事情
  • 前端相关框架总和
  • 微服务框架lagom
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 阿里云移动端播放器高级功能介绍
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #QT(TCP网络编程-服务端)
  • #vue3 实现前端下载excel文件模板功能
  • #在 README.md 中生成项目目录结构
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • ( 10 )MySQL中的外键
  • (3)nginx 配置(nginx.conf)
  • (八)Flask之app.route装饰器函数的参数
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)软件测试分工
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十)c52学习之旅-定时器实验
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (图)IntelliTrace Tools 跟踪云端程序
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (新)网络工程师考点串讲与真题详解
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转载)OpenStack Hacker养成指南
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .bat批处理(五):遍历指定目录下资源文件并更新