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

Scikit-Learn线性回归(四)

Scikit-Learn线性回归四:梯度下降

    • 1、梯度下降
      • 1.1、梯度下降概述
      • 1.2、梯度下降及原理
      • 1.3、梯度下降的实现
    • 2、梯度下降法求解线性回归的最优解
      • 2.1、梯度下降法求解的原理
      • 2.2、梯度下降法求解线性回归的最优解
      • 2.3、梯度下降法求解线性回归案例(波士顿房价预测)
    • 3、Scikit-Learn梯度下降法
      • 3.1、随机梯度下降
      • 3.2、Scikit-Learn梯度下降法API
      • 3.3、Scikit-Learn梯度下降法案例(波士顿房价预测)



1、梯度下降

1.1、梯度下降概述


在第一篇文章 Scikit-Learn线性回归(一) 中,我们给出了线性回归的损失函数的定义:
L = ∑ i = 1 m ( y i − f ( x i ) ) 2 L=\sum_{i=1}^m(y_i-f(x_i))^2 L=i=1m(yif(xi))2

回忆一下,损失函数主要用于评估模型拟合的好坏,损失函数衡量了我们构造的模型的预测值与真实值的差异,因此,我们希望我们的预测结果与真实值的差异越小越好。也就是我们希望损失函数取得最小值

损失函数取得最小值是我们构建模型的本质要求,求解模型的特征向量 ω \omega ω是我们构建模型的核心问题

根据损失函数(最小二乘法),我们的求解目标可以转换为求解误差平方和(残差平方和)的最小值:
m i n ω = ∣ ∣ Y − X ω ∣ ∣ 2 2 min_\omega={||Y-X\omega||_2}^2 minω=∣∣YXω22

而根据数学知识,当我们的误差平方和取得最小值时,线性回归模型特征 ω \omega ω就是最优解

最优解的求解方法主要有两种:最小二乘法(数学方式)和梯度下降法。最小二乘法通过数学求导的方式求函数的极值进而推导出线性回归的解;而梯度下降采用近似逼近,是一种迭代方法

在线性回归(详见:传送门)一文中,我们已经通过最小二乘法推导了线性回归的解析解的正规方程:
ω = ( X T X ) − 1 X T Y \omega=(X^TX)^{-1}X^TY ω=(XTX)1XTY

然而,很多模型通过这种数学方式求解是推导不出解析解的,所以就需要使用梯度下降法来搜索最优解。基于梯度下降我们可以推导出线性回归的最优解析解。梯度下降法是使用最广泛的一种优化方法

梯度下降法不是机器学习专属的算法,它是一种基于搜索的优化方法,也就是通过不断的搜索然后找到损失函数的最小值

1.2、梯度下降及原理


观察我们的损失函数转换后的求解目标,根据数学知识,误差平方和(函数)为二次函数形式,且函数开口向上,因此,函数一定有唯一最小值。当函数取得最小值时的 ω \omega ω就是最优解

在这里插入图片描述

上图中,纵坐标表示损失函数L的值,横坐标表示系数 ω \omega ω,每一个 ω \omega ω都会对应一个损失函数L的值,我们希望损失函数收敛,即找到一个 ω \omega ω值,使得损失函数L的值最小

根据数学知识,要判断一个点A是否是损失函数L的最小值,即求该点的导数。点A的导数就是该点切线的斜率,所以导数描述了一个函数在某一点附近的变化率,并且导数大于零时,函数在区间内单调递增,导数小于零时函数在区间内单调递减

所以, ∂ L ∂ ω \frac{\partial L}{\partial\omega} ωL表示损失函数L增大的变化率,- ∂ L ∂ ω \frac{\partial L}{\partial\omega} ωL表示损失函数L减小的变化率

再在曲线上定义一点B,B点的 ω \omega ω就是A点的 ω \omega ω值加上损失函数L递减变化率- η ∂ L ∂ ω \eta\frac{\partial L}{\partial\omega} ηωL
ω B = ω A − η ∂ L ∂ ω = ω A + ∇ J (

http://www.lryc.cn/news/272736.html

相关文章:

  • SCT2330C——3.8V-28V输入,3A,低EMI,超低功耗同步降压DCDC转换器
  • php生成唯一ID的5种方法介绍
  • 向日葵远程工具安装Mysql的安装与配置
  • Unity 欧盟UMP用户隐私协议Android接入指南
  • AutoLisp入门教程
  • matplotlib颜色合集——各种常见简单图形(上)
  • 小H靶场笔记:DC-3
  • Web网页开发-CSS高级技巧2-笔记
  • C++面向对象语法总结(二)
  • 【LeetCode每日一题】2487. 从链表中移除节点(调用栈+递归+翻转链表)
  • 开源协助平台工程灵活应对多云时代的挑战
  • Springboot通过profiles切换不同环境使用的配置
  • SpringBoot入门到精通-Spring Boot Jasypt Encrypt 演示
  • 整数的阶乘(英语:factorial)是所有小于及等于
  • 音视频通信
  • docker 搭建gitlab 恢复和备份
  • 尚硅谷2023版Promise教程从入门到实战(讲师:任安萍)
  • 【SpringBoot】分组校验和自定义校验
  • 19、BLIP-2
  • 【微服务核心】MyBatis Plus
  • 什么是Alibaba Cloud Linux?完全兼容CentOS,详细介绍
  • Spark---RDD算子(单值类型Value)
  • 数据库中的MVCC--多版本并发控制
  • wps将姓名处理格式为:姓**
  • 2023年我的编程之旅:技术演进与自我成长的纪录
  • 好用免费的WAF---如何安装雷池社区版
  • 看似 bug 又非 bug 的一个 bug
  • mysql常见问题
  • QT上位机开发(串口界面设计)
  • k8s之pod