线性回归的梯度下降法——机器学习

news2024/9/24 15:27:50

一、实验内容


  1. 理解单变量线性回归问题;
  2. 理解最小二乘法;
  3. 理解并掌握梯度下降法的数学原理;
  4. 利用python对梯度下降法进行代码实现;

二、实验过程


1、算法思想


        梯度下降法是一阶最优化算法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。

        最小二乘法也叫做最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最小二乘法来表达。

2、算法原理


        梯度下降法是迭代法的一种,可以用于求解最小二乘问题。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降法和最小二乘法是最常采用的方法。

        在求解损失函数的最小值时,可以通过梯度下降法来迭代求解,得到最小化的损失函数和模型参数值。

3、算法分析


(1)确定当前位置的损失函数的梯度,对于,其梯度表达式为:

(2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即。

(3)确定是否所有的梯度下降的距离都小于,如果小于则算法终止,当前所有的

即为最终结果。否则进入第(4)步。

(4)更新所有的,更新表达式如下,更新完成后转入步骤(1):

三、源程序代码


import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
 
 
# 求fx的函数值
def fx(x, y):
    return (x - 10) ** 2 + (y - 10) ** 2
 
 
def gradient_descent():
    times = 100  # 迭代次数
    alpha = 0.05  # 学习率
    x = 20  # x的初始值
    y = 20  # y的初始值
 
    fig = Axes3D(plt.figure())  # 将画布设置为3D
    axis_x = np.linspace(0, 20, 100)  # 设置X轴取值范围
    axis_y = np.linspace(0, 20, 100)  # 设置Y轴取值范围
    axis_x, axis_y = np.meshgrid(axis_x, axis_y)  # 将数据转化为网格数据
    z = fx(axis_x, axis_y)  # 计算Z轴数值
    fig.set_xlabel('X', fontsize=14)
    fig.set_ylabel('Y', fontsize=14)
    fig.set_zlabel('Z', fontsize=14)
    fig.view_init(elev=60, azim=300)  # 设置3D图的俯视角度,方便查看梯度下降曲线
    fig.plot_surface(axis_x, axis_y, z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))  # 作出底图
 
    for i in range(times):
        x1 = x
        y1 = y
        f1 = fx(x, y)
        print("第%d次迭代:x=%f,y=%f,fxy=%f" % (i + 1, x, y, f1))
        x = x - alpha * 2 * (x - 10)
        y = y - alpha * 2 * (y - 10)
        f = fx(x, y)
        fig.plot([x1, x], [y1, y], [f1, f], 'ko', lw=2, ls='-')
    plt.show()
 
 
if __name__ == "__main__":
    gradient_descent()

四、运行结果分析


五、实验总结


 

线性回归求解可以使用最小二乘法梯度下降法,下面我们针对两种方法进行对比:

相同点:本质和目标相同,两种都是经典的学习算法,在给定已知数据的情况下,利用求导算出一个模型(函数),使得损失函数最小,然后对给定的新数据进行估算预测。

不同点:

损失函数的选择:最小二乘法必须使用平方损失函数,而梯度下降可以选取其它函数;

实现方法不同,最小二乘法是实现全局最小,而梯度下降是一种迭代法;

一般最小二乘法一定可以得到全局最小,但对于多元计算繁琐,且复杂情况下未必有解。

而梯度下降的迭代比较简单,但找到的一般是局部最小,即极小值,仅在目标函数是下凸函数是才是全局最小,到最小点的收敛速度会变慢,且对初始点的选择极为敏感,而且步长的选择对损失函数也有影响。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker学习(3)—— 将容器转化为新的镜像,并将新镜像发布到阿里云公共仓库或私有仓库

一. 将容器转化为镜像 使用docker pull命令从远程仓库下载的镜像为base镜像,只具有最小的内核。我们可以在base镜像上安装其他工具,将其生成为一个新的镜像。相当于可以在原始的基础镜像上一层一层添加。 例如:下载一个centos的镜像&#x…

kibana 操作elasticsearch索引

前言 使用kibana可以很方便的对es进行各种操作,比如创建索引,删除索引,查询文档等,本篇先演示如何基于kibana 对es的索引进行常见的操作。 环境准备 请提前安装好es和kibana,可以参考 docker搭建es kibana操作es索引…

进销存商城前几名的运营方法|三招提高微信商城用户黏性

你有没有感到奇怪,明明是差不多装修,为什么有的微信商城只能和用户做成“单次消费行为”,但有的微信商城能让用户在他家复购一次两次三次? 这其实都跟用户忠诚度有关。进入存量时代后,维护好老用户就成为门店经营不可…

如何配置 ESXi 主机管理网络?

配置 ESXi 主机管理网络 VMware ESXi管理网络提供ESXi主机和客户端之间的通信。在服务器上安装 ESXi 虚拟机监控程序后,将通过动态主机配置协议(DHCP)获得ESXi管理IP。你可能需要配置ESXi主机的静态管理IP和主机名。按照以下指南配置ESXi管理网络,以便你可以通过域名而不是…

Apache ShenYu ModifyResponse插件使用

Apache ShenYu网关使用手册1 介绍1.1 概念1.2 特性1.3 架构图2 运行2.1 运行先决条件2.1 本地运行3 插件使用3.1 ModifyResponse插件3.1.1 插件名称3.1.2 适用场景3.1.3 插件功能3.1.4 插件代码3.1.5 如何使用插件3.1.5.1 插件使用流程图3.1.5.2 接入SpringBoot应用改造3.1.5.3…

kali没有wlan0

kali没有wlan0解决方案 第一步ifconfig发现没有wlan0 使用wget下载无线设备 命令如下: wget https://mirror2.openwrt.org/sources/compat-wireless-2010-06-28.tar.bz2 3. 解压刚才下载的压缩包: tar -xjvf compat-wireless-2010-06-28.tar.bz2 进…

【Leetcode】拿捏链表(三)——CM11 链表分割(牛客)、OR36 链表的回文结构(牛客)

作者:一个喜欢猫咪的的程序员 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 CM11 链表分割 OR36 链表的回文结构 CM11 链表分割 链表分割_牛客题霸…

【Linux】线程概念与线程控制

认识线程 线程是一个执行流(运行代码,处理数据) ​ 1.操作系统使用pcb来描述一个程序的运行-------pcb就是进程 ​ 2.linux下通过pcb模拟实现线程,因此linux下的线程是一个轻量级进程 ​ 3.这个轻量级进程因为公用大部分进程资…

Python编程 字典创建map与Zip

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 字典(dict) 字典创建(拓展) 拓展: 前言 本章将会扩展Python…

IP 地址详解(IPv4、IPv6)

文章目录1 概述2 IP 地址结构2.1 IPv4 地址结构2.2 IPv6 地址结构3 IP 地址管理3.1 地址分类策略:A、B、C、D、E 类3.2 无分类策略:CIDR3.3 地址分类策略 和 无分类策略 相结合1 概述 IP地址:Internet Protocol Address(互联网协…

Flutter高仿微信-第25篇-服务条款

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** Author : wangning* Email : maoning20080809163.…

基于JavaWeb的物流管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

电视机@2022:降价、焦虑与机遇

【潮汐商业评论/原创】 双十一期间,以前从不参与这类抢购的Gant也加入了这场“狂欢”。用他自己的话说:“生活压力好大啊,我不上班的时候就喜欢刷剧放松,所以就想趁着购物节挑台性价比高的电视,毕竟囊中羞涩嘛&#x…

端口映射与容器互联

1. 端口映射实现访问容器: 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的。 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定饼口映…

总结了几个做用户体验设计的原则,分享给需要的朋友

近一年来,Figma它可以说是体验设计领域最受欢迎的工具。最近,我开始频繁地工作。Axure9.0和Figma切换使用,深刻感受到设计细节带来的体验差异化。今天,通过一些细节和亮点,总结了工具软件体验设计的几个原则。 ​一、效…

HTTP服务器

HTTP服务器 1. 项目背景和技术特点 实现目的 从移动端到浏览器,HTTP 协议无疑是打开互联网应用窗口的重要协议,其在网络应用层中的地位不可撼动,是能准确区分前后台的重要协议。 完善对HTTP协议的理论学习,从零开始完成WEB服务器…

万字string类总结

目录 一、string类的介绍 二、string类的常用接口 1、构造函数 2. string类对象的容量操作 3. string类对象的访问及遍历操作 4. string类对象的修改操作 (重点) 5. string类非成员函数 6. vs和g下string结构的说明 三、string类的模拟 1. 浅拷…

c++智能指针(raii)

目录 1.智能指针的作用 2.智能指针带来的问题与挑战 3.三种不同的智能指针 4.auto_ptr 5.unique_ptr 6.shared_ptr 7.weak_ptr;相互引用 8.总结 1.智能指针的作用 以c的异常处理为例看看throw catch用法。有时,一个用new开出的空间用完还没delete…

[附源码]java毕业设计壹家吃货店网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【C语言】学数据结构前必学的结构体struct详细

佛祖说,他可以满足程序猿一个愿望。程序猿许愿有生之年写出一个没有bug的程序,然后他得到了永生。 目录 1、结构体的声明与定义 1.1结构体是什么? 1.2为什么要有结构? 1.3结构体的声明 1.4结构体成员类型 1.5结构体变量定义…