多元线性回归&梯度下降法——多元线性回归

2023-11-19

多特征
在这里插入图片描述
当Y值的影响因素不是唯一时,采用多元线性回归模型
在这里插入图片描述
在这里插入图片描述
例子
在这里插入图片描述
梯度下降法——多元线性回归

import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt  
from mpl_toolkits.mplot3d import Axes3D  

数据
在这里插入图片描述

# 读入数据 
data = genfromtxt(r"Delivery.csv",delimiter=',')
print(data)

在这里插入图片描述

# 切分数据
x_data = data[:,:-1]#取所有的行,从第一个列开始取到最后一个列,但不包括最后一个列
y_data = data[:,-1]#取所有的行,取最后一列
print(x_data)
print(y_data)

在这里插入图片描述

# 学习率learning rate
lr = 0.0001
# 参数
theta0 = 0
theta1 = 0
theta2 = 0
# 最大迭代次数
epochs = 1000

# 最小二乘法
def compute_error(theta0, theta1, theta2, x_data, y_data):
    totalError = 0
    for i in range(0, len(x_data)):
        totalError += (y_data[i] - (theta1 * x_data[i,0] + theta2*x_data[i,1] + theta0)) ** 2
    return totalError / float(len(x_data))

def gradient_descent_runner(x_data, y_data, theta0, theta1, theta2, lr, epochs):
    # 计算总数据量
    m = float(len(x_data))
    # 循环epochs次
    for i in range(epochs):
        theta0_grad = 0
        theta1_grad = 0
        theta2_grad = 0
        # 计算梯度的总和再求平均
        for j in range(0, len(x_data)):
            theta0_grad += (1/m) * ((theta1 * x_data[j,0] + theta2*x_data[j,1] + theta0) - y_data[j])
            theta1_grad += (1/m) * x_data[j,0] * ((theta1 * x_data[j,0] + theta2*x_data[j,1] + theta0) - y_data[j])
            theta2_grad += (1/m) * x_data[j,1] * ((theta1 * x_data[j,0] + theta2*x_data[j,1] + theta0) - y_data[j])
        # 更新b和k
        theta0 = theta0 - (lr*theta0_grad)
        theta1 = theta1 - (lr*theta1_grad)
        theta2 = theta2 - (lr*theta2_grad)
    return theta0, theta1, theta2
print("Starting theta0 = {0}, theta1 = {1}, theta2 = {2}, error = {3}".
      format(theta0, theta1, theta2, compute_error(theta0, theta1, theta2, x_data, y_data)))
print("Running...")
theta0, theta1, theta2 = gradient_descent_runner(x_data, y_data, theta0, theta1, theta2, lr, epochs)
print("After {0} iterations theta0 = {1}, theta1 = {2}, theta2 = {3}, error = {4}".
      format(epochs, theta0, theta1, theta2, compute_error(theta0, theta1, theta2, x_data, y_data)))

在这里插入图片描述

ax = plt.figure().add_subplot(111, projection = '3d') #画3D图
ax.scatter(x_data[:,0], x_data[:,1], y_data, c = 'r', marker = 'o', s = 100) 
#点为红色圆形 , marker = 'o'指的是画的点的格式,s是指点的大小
x0 = x_data[:,0]
x1 = x_data[:,1]
# 生成网格矩阵
x0, x1 = np.meshgrid(x0, x1)
z = theta0 + x0*theta1 + x1*theta2
# 画3D图
ax.plot_surface(x0, x1, z)
#设置坐标轴  
ax.set_xlabel('Miles')  
ax.set_ylabel('Num of Deliveries')  
ax.set_zlabel('Time')  
  
#显示图像  
plt.show()  

在这里插入图片描述

其中x0, x1 = np.meshgrid(x0, x1)的作用便是将x0,x1每个坐标对应形成网格
在这里插入图片描述
在这里插入图片描述
如果想看到比较完整可以转动的图,将代码文件存成.py文件,然后在cmd相应文件内运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多元线性回归&梯度下降法——多元线性回归 的相关文章

随机推荐

  • Redis系列二

    1 4 Redis基础知识 1 4 1 默认数据库 Redis默认数据库数量有16个 redis conf配置文件可查看 默认使用的数据库为0 1 4 2 切换数据库 使用select 命令进行切换 root yunmx bin redis
  • C++ 信号处理

    信号是由操作系统传给进程的中断 会提早终止一个程序 在 UNIX LINUX Mac OS X 或 Windows 系统上 可以通过按 Ctrl C 产生中断 有些信号不能被程序捕获 但是下表所列信号可以在程序中捕获 并可以基于信号采取适当
  • ytb网站报错 “您没有联网,请检查网络连接”

    问题原因 解决办法 计算机时间有问题 在设置中 同步 时间 并且关闭路由器的Ipv6以绝后患 xxxxxxx com core proxy vmess encoding failed to read response header gt w
  • Matlab与VC混合编程之一

    Matlab与VC混合编程之一 1 问题的提出 为什么需要用Matlab与VC混合编程 做工程项目时用的是VC 经常会用到科学计算的相关算法 比如矩阵求逆 求行列式 求微分方程组初值问题的数值解等问题 如果自己去编写相关的函数 首先需要去找
  • windows线程调度、线程优先级和亲缘性

    windows线程调度 线程优先级和亲缘性 每一个线程在它的线程内核对象中有一个上下文结构 反映了线程最后一次执行的 CPU 寄存器状态 每隔大约 20ms 可以使用 GetSystemTimeAdjustment 获得 我测得这个间隔大约
  • android调节系统音量之修改默认音量、最大音量和最小音量

    Android系统拥有多种声音属性 包括有多媒体 通话 通知等声音属性 这些声音属性分别含有自己默认音量 最大音量和最小音量属性 下面我将介绍一下这些声音属性的音量定义和它们的修改方式 默认音量 系统声音的默认音量定义在 framework
  • ZCMU--2219: Toy Army(C语言)

    The hero of our story Valera and his best friend Arcady are still in school and therefore they spend all the free time p
  • SpringBoot 接受文件和对象

    SpringBoot 接受文件和对象 使用场景 某个接口 需要同时接受文件和实体 也就是参数 一 这个时候 前端就不能 json 格式传送数据了 要用到 multipart form data 这种格式传送数据 二 那么 这个时候 后端应该
  • Java抛出自定义异常,报java.lang.reflect.UndeclaredThrowableException: null的错误

    最近项目中使用了自定义异常 并做了全局异常处理 抛出异常的代码如下 throw new FebsException 系统管理员不能修改颜色 结果运行后 报java lang reflect UndeclaredThrowableExcept
  • 前端开发时常用的第三方工具库

    前端开发时常用的第三方工具库 JavaScript 实用工具库 一 lodash 1 官方文档 中文文档 https www lodashjs com 2 简介及使用场景 Lodash 是一个一致性 模块化 高性能的 JavaScript
  • windows sqlite可视化工具sqlitestudio下载、安装、使用

    1 下载地址 https sqlitestudio pl index rvt 2 使用 选择数据库 gt 添加数据库 gt 选择你的本地数据库 并点击 增加就可以查看数据库了
  • 浅谈Buffer

    什么是Buffer 在 Node js 中 Buffer 类是随 Node 内核一起发布的核心库 Buffer 库为 Node js 带来了一种存储原始数据的方法 可以让 Node js 处理二进制数据 global Buffer gt f
  • 爬虫小白也能玩转!Python爬虫中的异常处理与网络请求优化

    大家好 我是来自爬虫世界的小编 今天 我要和大家分享一些关于Python爬虫中的异常处理和网络请求优化的经验 不论你是初学者还是有一定经验的爬虫程序员 我相信这些实用的技巧和代码示例都能为你在爬取数据的过程中带来方便和效率 1 异常处理 保
  • MySQL查看、创建和删除索引的方法分享

    这篇文章主要介绍了MySQL查看 创建和删除索引的方法 结合实例形式较为详细的分析了MySQL中索引的作用 以及查看 创建及删除索引的相关实现技巧 具有一定参考借鉴价值 需要的朋友可以参考下 本文实例讲述了MySQL查看 创建和删除索引的方
  • STM32系统时钟超详解

    作者简介 嵌入式入坑者 与大家一起加油 希望文章能够帮助各位 个人主页 rivencode的个人主页 系列专栏 玩转STM32 保持学习 保持热爱 认真分享 一起进步 目录 一 什么是时钟 二 时钟树 1 HSE时钟 2 HSI时钟 3 L
  • Shell变量的设置规则

    1 变量设置规则 变量与变量内容以一个等号 myname LSX 等号两边不能直接接空格 myname LSX 或 myname L SX 都是错误 变量名称只能是英文字母与数字 但是开头字符不能是数字 2myname LSX 错误 2 双
  • 华为od机考真题-数据分类

    while 1 try c b nums list map int input split dp
  • C++11 新特性:模板别名

    C 11 新特性 模板别名 豆子 2012年5月22日 C 没有评论 参考文章 https blogs oracle com pcarlini entry template aliases 2002 年 ISO C 标准化组织就已经提出了模
  • Jmeter Springboot Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)

    Jmeter Springboot Redisson分布式锁并发订单操作 下单 取消单 完成单 加库存 涉及知识点 java springboot mybatis开发 redis分布式锁 Redisson客户端 Jmeter各种骚操作 用户
  • 多元线性回归&梯度下降法——多元线性回归

    多特征 当Y值的影响因素不是唯一时 采用多元线性回归模型 例子 梯度下降法 多元线性回归 import numpy as np from numpy import genfromtxt import matplotlib pyplot as