机器学习算法基础--批量随机梯度下降法回归法

news2024/11/25 11:46:04

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示

1.算法流程简介

"""
本节算法是梯度下降方法的小批量随机梯度下降法,算法的思路是从数中随机取出n个数据进行数梯度下降,再进行相应的迭代,
最后能够获得一个效果不错的回归方程/最优解.
算法的公式就不多说了,其实和普通的递归下降方法没有什么区别,公式也差不多,只有一点点改变和需要注意的地方.
"""
"""
1.读取数据集并且化为对应的xy数组
2.设置梯度下降的一些常见的参数,唯一需要额外设置的就是取多少个小批量样本
3.设置随机函数,进行随机梯度下降,不断地更新修正theta值
4.迭代到设定格式后,得到最终结果
5.绘制每个迭代值的回归效果图
"""
"""
PS:说实话,小批量随机递归下降还是比较不稳定的,如果真正想要获得比较精确的解,
我们还是需要将迭代次数尽可能多一些同时随机取出的数据点也要多一点,这样才能获得比较精确一些的解
"""

2.算法核心代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 样本数据
path="C:\\Users\\Zeng Zhong Yan\\Desktop\\py.vs\\.vscode\\数学建模\\梯度下降法材料包\\LinearRegression.xlsx"
# 读取excel文件
dataframe = pd.read_excel(path,  header=0)
data=np.array(dataframe)
X=data[:,0].reshape(-1,1)
y=data[:,1]
X_bias = np.insert(X, 0, 1, axis=1)
learning_rate = 0.01
batch_size = 128  # 小批量大小
theta = np.ones(X_bias.shape[1])  # 包括截距和特征系数
#小批量递归下降
num1 =[0,2,10,50,100,500,1000]
global num_iterations
 # 包括截距和特征系数
plt.figure(figsize=(24,8))
plt.subplot(2,4,1)
plt.scatter(X,y,color='blue',s=1)
fig1=plt.plot(X,y,'.',color='blue',label='Iris Data')
plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0.01, 0.85))
for i in range(len(num1)):
    num_iterations=num1[i]
    theta = np.zeros(X_bias.shape[1]) 
    X_bias = np.insert(X, 0, 1, axis=1)
    for _ in range(num_iterations):
    # 随机选择一个小批量样本
      batch_indices = np.random.choice(len(X_bias), batch_size, replace=False)
      X_batch = X_bias[batch_indices]
      y_batch = y[batch_indices]    
      gradient = X_batch.T.dot(X_batch.dot(theta) - y_batch) / len(X_batch)
      theta -= learning_rate * gradient
    plt.subplot(2,4,i+2)
    plt.scatter(X,y,color='blue',s=1)
    Y=theta[1]*X+theta[0]
    plt.plot(X,Y,color='r')
    plt.xlabel("X")
    plt.ylabel("Y")
    fig3=plt.plot(X,Y,'white',label="iterations={}".format(num_iterations))
    fig1=plt.plot(X,y,'.',color='blue',label='Iris Data')
    fig2=plt.plot(X,Y,'r',label='Regression Curve')
    plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0.01, 0.75))
plt.savefig('C:\\Users\\Zeng Zhong Yan\\Desktop\\py.vs\\.vscode\\数学建模\\梯度下降法材料包\\梯度下降法效果图.png', dpi=500, bbox_inches='tight')
plt.show()

3.算法效果展示

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

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

相关文章

lv3 嵌入式开发-9 linux TFTP服务器搭建及使用

目录 1 TFTP服务器的介绍 2 TFTP文件传输的特点 3 TFTP服务器的适用场景 4 配置介绍 4.1 配置步骤 4.2 使用 5 常见错误 1 TFTP服务器的介绍 TFTP(Trivial File Transfer Protocol)即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器…

9.3.3网络原理(网络层IP)

一.报文: 1.4位版本号:IPv4和IPv6(其它可能是实验室版本). 2.4位首部长度:和TCP一样,可变长,带选项,单位是4字节. 3.8位服务类型 4.16位总长度:IP报头 IP载荷 传输层是不知道载荷长度的,需要网络层来计算. IP报文 - IP报头 IP载荷 TCP报文 TCP载荷 IP载荷(TCP报文) …

解决方案|电子签加速证券业“数字革命”

电子签在各行各业中的快速普及已成为近年来的新趋势。与此同时,电子签也在证券行业中掀起一场数字化转型的新“革命”。 2020年10月, 中基协《私募投资基金电子合同业务管理办法(试行)(征求意见稿)》明确了…

《代码随想录》刷题笔记——链表篇【java实现】

链表节点定义 public class ListNode {// 结点的值int val;// 下一个结点ListNode next;// 节点的构造函数(无参)public ListNode() {}// 节点的构造函数(有一个参数)public ListNode(int val) {this.val val;}// 节点的构造函数(有两个参数)public ListNode(int val, ListNo…

【80天学习完《深入理解计算机系统》】第十四天 复习第三章

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

层次分析法(matlab实现)

1.层次分析法(AHP) 在决策理论中,层次分析法是一种以数学和心理学为基础,组织和分析复杂决策的结构化技术,它代表了一种量化决策标准权重的准确方法,通过成对比较,利用个别专家的经验来估计因素…

MySQL5.7慢查询实践

总结 获取慢查询SQL 已经执行完的SQL,检查慢查询日志,日志中有执行慢的SQL正在执行中的SQL,show proccesslist;,结果中有执行慢的SQL 慢查询日志关键参数 名称解释Query_time查询消耗时间Time慢查询发生时间 分析慢查询SQL e…

【LeetCode算法系列题解】第56~60题

CONTENTS LeetCode 56. 合并区间(中等)LeetCode 57. 插入区间(中等)LeetCode 58. 最后一个单词的长度(简单)LeetCode 59. 螺旋矩阵 II(中等)LeetCode 60. 第k个排列(困难…

ARM DIY(八)USB 调试

前言 V3s 带有一个 USB 接口,将其设置为 HOST 或 OTG 模式,这样可以用来接入键盘、鼠标等 USB 外设。 USB 简介 USB 有两种设备:HOST 和 USB 功能设备。 在 USB2.0 中又引入了一个新的概念 OTG,即设备角色可以动态切换。 切换方…

ZYNQ上的简单 FSK 基带发射器

绪论 由于某种需求需要生成正弦波,因此使用 C 应用程序中的sin()函数来计算单位圆的幅度值,然后将该幅度值转换为 AD9717 的适当 DAC 代码(当然将每个角度值转换为弧度)。 能够使用DAC生成简单的正弦波,下一个想法就是…

MSYS2 介绍、下载与安装、Pacman常用命令

一、MSYS2 介绍 MSYS2 官网:MSYS2 MSYS2(Minimal SYStem 2)是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于Linux的shell环境,可以在Windows系统中编译和运行许多Linux应用程序和工具。 MSYS2基于…

GPT转换工具:轻松将MBR转换为GPT磁盘

为什么需要将MBR转换为GPT? 众所周知,Windows 11已经发布很长时间了。在此期间,许多老用户已经从Windows 10升级到Windows 11。但有些用户仍在运行Windows 10。对于那些想要升级到Win 11的用户来说,他们可能不确定Win 11应该使…

【初阶C语言】操作符1--对二进制的操作

前言:本节内容介绍的操作符,操作的对象是二进制位。所以前面先介绍整数的二进制位 一、二进制位介绍 1.二进制介绍 (1)整数的二进制表示形式有三种:原码、反码和补码。 (2)原码、反码和补码的…

TPS-MIS-DSS

TPS-MIS-DSS 业务处理系统TPS管理信息系统MIS决策支持系统DSS 业务处理系统TPS 最初级的信息系统,管理具体的事务 TPS是其他类型信息系统的信息产生器 处于企业系统的边界 管理信息系统MIS 对企业整体的信息进行处理 使用信息进行预测,控制,计…

一些重要的硬件概念总结

电路噪声 区分噪声和干扰 对于电子线路中所称的噪声,可以概括地认为,它是对目的信号以外所有信号的一个总称。 最初人们把造成收音机这类音响设备所发出的那些电子信号称为噪声。但是,一些非目的的电子信号对电子线路造成的后果并非都和声音有…

【LeetCode每日一题合集】2023.8.28-2023.9.3(到家的最少跳跃次数)

文章目录 57. 插入区间823. 带因子的二叉树解法——递推 1654. 到家的最少跳跃次数(BFS,🚹最远距离上界的证明)1761. 一个图中连通三元组的最小度数2240. 买钢笔和铅笔的方案数解法1——完全背包解法2——枚举买了几支钢笔(推荐解法&#xff…

华为云云服务器评测|使用云耀云服务器L实例部署Portainer工具

华为云云服务器评测|使用云耀云服务器L实例部署Portainer工具 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点1.3 云耀云服务器L实例使用场景 二、本次实践介绍2.1 本次实践简介2.2 Portainer简介 三、购买云耀云服务器L实例3.1 登录…

java八股文面试[数据库]——主键的类型自增还是UUID

auto_increment的优点: 字段长度较uuid小很多,可以是bigint甚至是int类型,这对检索的性能会有所影响。 在写的方面,因为是自增的,所以主键是趋势自增的,也就是说新增的数据永远在后面,这点对于…

QT—基于http协议的网络文件下载

1.常用到的类 QNetworkAccessManager类用于协调网络操作,负责发送网络请求,创建网络响应 QNetworkReply类表示网络请求的响应。在QNetworkAccessManager发送一个网络请求后创建一个网络响应。它提供了以下信号: finished():完成…

Rider 中C#单元测试

使用NUnit.Framework这个包,没有的话可以用nuget去搜索下载。简单的进行单元测试,想要单元测试好像还给需要static函数,慢慢学学C# using System; using NUnit.Framework;namespace client {public class test{[Test]public static void test…