可视化-numpy实现线性回归和梯度下降法

news2025/1/22 19:56:59

 代码如下:

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

# 生成二维输入数据
np.random.seed(0)
X1 = 2 * np.random.rand(100, 1)  # 第一个特征
X2 = 3 * np.random.rand(100, 1)  # 第二个特征
X = np.hstack((X1, X2))  # 将两个特征合并为二维输入

# 生成目标值 y(线性关系 + 噪声)
y = 4 + 3 * X1 + 5 * X2 + np.random.randn(100, 1)

# 添加偏置项(全为1的列)
X_b = np.c_[np.ones((100, 1)), X]

# 初始化参数 theta (theta0, theta1, theta2)
theta = np.random.randn(3, 1)

# 学习率
eta = 0.1

# 迭代次数
n_iterations = 100

# 用于存储每次迭代的损失值
loss_history = []

# 用于存储每次迭代的 theta 值
theta_history = [theta]

# 梯度下降
for iteration in range(n_iterations):
    gradients = 2 / 100 * X_b.T.dot(X_b.dot(theta) - y)  # 计算梯度
    theta = theta - eta * gradients  # 更新参数
    theta_history.append(theta)

    # 计算损失(均方误差)
    loss = np.mean((X_b.dot(theta) - y) ** 2)
    loss_history.append(loss)

# 可视化每次拟合的平面
def plot_fitted_plane(X1, X2, y, theta, iteration):
    fig = plt.figure(figsize=(10, 6))
    ax = fig.add_subplot(111, projection='3d')
    scatter = ax.scatter(X1, X2, y, color='blue', label='Data points')  # 绘制数据点

    # 生成网格点用于绘制平面
    X1_grid, X2_grid = np.meshgrid(np.linspace(X1.min(), X1.max(), 10), np.linspace(X2.min(), X2.max(), 10))
    y_grid = theta[0] + theta[1] * X1_grid + theta[2] * X2_grid  # 计算平面

    surface = ax.plot_surface(X1_grid, X2_grid, y_grid, alpha=0.5, facecolor='red')  # 绘制平面

    # 手动创建图例
    legend_elements = [
        Patch(facecolor='blue', label='Data points'),
        Patch(facecolor='red', label=f'Fitted plane (Iteration {iteration})')
    ]
    ax.legend(handles=legend_elements)

    ax.set_xlabel('X1')
    ax.set_ylabel('X2')
    ax.set_zlabel('y')
    ax.set_title(f'Linear Regression with Gradient Descent (Iteration {iteration})')
    plt.show()

# 每隔 20 次迭代绘制一次拟合平面
for i in range(0, n_iterations, 20):
    plot_fitted_plane(X1, X2, y, theta_history[i].flatten(), i)

# 绘制损失函数的变化
plt.figure(figsize=(10, 6))
plt.plot(range(n_iterations), loss_history, color='red')
plt.xlabel('Iterations')
plt.ylabel('Loss')
plt.title('Loss Function over Iterations')
plt.show()

输入  X 为2维度 , XY 一共三维, 所以可以可视化在一个 3d 图形中。

X1 = 2 * np.random.rand(100, 1)  # 第一个特征
X2 = 3 * np.random.rand(100, 1)  # 第二个特征
X = np.hstack((X1, X2))  # 将两个特征合并为二维输入

# 生成目标值 y(线性关系 + 噪声)
y = 4 + 3 * X1 + 5 * X2 + np.random.randn(100, 1)

这是随机生成 x1 和x2 , 然后  根据    y = 4 + 3*x1 + 5*x2 +  随机噪音来生成  y

最后会拟合为一个平面。 为啥会这样? 

可以理解为 起点 和 两个垂直方向的向量 可以 张开一个 平面。

也可以理解为 , 

  • 如果方程中只有一个自变量(例如 y = 4 + 3 * X1),那么它是一条 直线

  • 如果有两个自变量(例如 y = 4 + 3 * X1 + 5 * X2),那么它是一个 平面

  • 如果有更多自变量(例如 y = 4 + 3 * X1 + 5 * X2 + 2 * X3),那么它是一个 超平面(在更高维空间中)。

梯度下降:

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

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

相关文章

计算机网络 (53)互联网使用的安全协议

一、SSL/TLS协议 概述: SSL(Secure Sockets Layer)安全套接层和TLS(Transport Layer Security)传输层安全协议是工作在OSI模型应用层的安全协议。SSL由Netscape于1994年开发,广泛应用于基于万维网的各种网络…

在视频汇聚平台EasyNVR平台中使用RTSP拉流的具体步骤

之前有用户反馈,在EasyNVR平台中添加Pull时使用海康设备的RTSP流地址无法播放。经过研发的优化及一系列严谨的验证流程,我们已确认优化后的EasyNVR平台,通过Pull方式添加海康设备的RTSP流已经能够正常播放。以下是具体的操作步骤:…

在Linux环境中使用Qt访问USB摄像头的解决方法

一、Cheese方法 1、将虚拟机关机,点击左上角的虚拟机设置,将显示所有USB输入设备选上,点击确定。 2、 打开虚拟机,在终端输入以下命令安装所需的软件包: sudo apt update sudo apt install cheese v4l-utils 确保摄…

Qt——网络编程

和多线程类似, Qt 为了支持跨平台, 对网络编程的 API 也进行了重新封装。 在进行网络编程之前, 需要在项目中的 .pro 文件中添加 network 模块,添加之后运行一下,使其包含的头文件能够被加载进Qt Creator。 Qt本身是一个非常庞大,包罗万象的…

docker 安装 mysql 详解

在平常的开发工作中,我们经常需要用到 mysql 数据库。那么在docker容器中,应该怎么安装mysql数据库呢。简单来说,第一步:拉取镜像;第二步:创建挂载目录并设置 my.conf;第三步:启动容…

no persistent volumes available for this claim and no storage class is set

目录标题 问题1问题描述**问题原因****解决步骤****1. 检查 PVC 的配置****2. 设置 StorageClass****创建默认 StorageClass****修改 PVC 的 StorageClass** **3. 创建匹配的 PV****4. 验证 PVC 是否绑定成功** **最佳实践** 问题2问题描述**问题原因****解决方案****1. 删除现…

2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p39072 本报告合集洞察从多个维度全面解读微短剧行业。在行业发展层面,市场规模与用户规模双增长,创造大量高收入就业岗位并带动产业链升级。内容创作上,精品化、品牌化趋势凸显,题材走…

【22】Word:小李-高新技术企业政策❗

目录 题目​ NO1.2 NO3 NO4 NO5.6 NO7.8 NO9.10 若文章中存在删除空白行等要求,可以到最后来完成。注意最后一定要检查此部分!注意:大多是和事例一样即可,不用一摸一样,但也不要差太多。 题目 NO1.2 F12Fn&a…

SQLmap 自动注入 -02

1: 如果想获得SQL 数据库的信息,可以加入参数: -dbs sqlmap -u "http://192.168.56.133/mutillidae/index.php?pageuser-info.php&usernamexiaosheng&passwordabc&user-info-php-submit-buttonViewAccountDetails" --batch -p username -dbs…

视频m3u8形式播放 -- python and html

hls hls官网地址 创建项目 ts为视频片段 m3u8文件内容 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" …

C#中的语句

C#提供了各式各样的语句&#xff0c;大多数是由C和C发展而来&#xff0c;当然&#xff0c;在C#中做了相应修改。语句和表达式一样&#xff0c;都是C#程序的基本组成部分&#xff0c;在本文我们来一起学习C#语句。 1.语句 语句是构造所有C#程序的过程构造块。在语句中可以声明…

【2024年CSDN平台总结:新生与成长之路】

&#x1f4ab;引言 2024年已经过去&#xff0c;回顾这一年&#xff0c;所有的经历依然历历在目。以“经验”为动力&#xff0c;我正迈向2025年。回顾自己在CSDN平台上的创作之路&#xff0c;收获满满、成长颇多&#xff0c;也有许多宝贵的感悟。接下来&#xff0c;我将分享这一…

架构思考与实践:从通用到场景的转变

在当今复杂多变的商业环境中&#xff0c;企业架构的设计与优化成为了一个关键议题。本文通过一系列随笔&#xff0c;探讨了业务架构的价值、从通用架构到场景架构的转变、恰如其分的架构设计以及如何避免盲目低效等问题。通过对多个实际案例的分析&#xff0c;笔者揭示了架构设…

AG32 FPGA 的 Block RAM 资源:M9K 使用

1. 概述 AG32 FPGA 包含了 4 个 M9K 块&#xff0c;每个 M9K 块的容量为 8192 bits&#xff0c;总计为 4 个 M9K&#xff08;4K bytes&#xff09;。这使得 AG32 的内部存储非常适合嵌入式应用&#xff0c;能够有效地利用片上资源。 M9K 参数 参考自《AGRV2K_Rev2.0.pdf》。…

Java中如何安全地停止线程?

大家好&#xff0c;我是锋哥。今天分享关于【Java中如何安全地停止线程?】面试题。希望对大家有帮助&#xff1b; Java中如何安全地停止线程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Java中&#xff0c;安全地停止线程是一项重要的任务&#xff0c;尤其…

2025寒假备战蓝桥杯01---朴素二分查找的学习

文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合&#xff0c;我们的暴力解法就是挨个进行遍历操作&#xff0c;一直找到和我们的这…

【HF设计模式】06-命令模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第6章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍命令模式&#xff0c;包括遇到的问题、采用的解决方案、遵循的 OO 原则、…

Ubuntu16.04 安装OpenCV4.5.4 避坑

Ubuntu16.04 安装C版OpenCV4.5.4 Ubuntu16.04 VSCode下cmakeclanglldb调试c 文章目录 Ubuntu16.04 安装C版OpenCV4.5.41. 下载Opencv压缩包2. 安装Opencv-4.5.43. 配置OpenCV的编译环境4.测试是否安装成功 1. 下载Opencv压缩包 下载Opencv压缩包&#xff0c;选择source版本。…

Flutter 改完安卓 applicationId 后App 闪退问题。

一、问题 当我们项目创建完&#xff0c;想 build.gradle 改 applicationId 的时候&#xff0c;再次执行的时候可能会出现 app 闪退问题&#xff0c; 控制台不显示任何错误提示 也不出现 Exit 停止运行的情况。&#xff08;像下方这样&#xff0c; 而 app 只是在模拟器中一闪而…

专利申请流程详解

专利申请流程详解 文章目录 专利申请流程详解前言一、什么是专利二、如何申请专利1. 注册国家知识产权局账号2. 账号登录和认证3. 专利费用减免4. 专利申请 三、注意事项&#xff08;一&#xff09;、外观设计专利&#xff08;二&#xff09;、实用新型专利&#xff08;三&…