人工智能实验报告1

news/2025/1/18 3:28:17/文章来源:https://www.cnblogs.com/positive-boy/p/18516594

1730273092397 1730273099590

姓名:熊俊松________________________ 班级:2220422__________________________________ 学号:20222024234_______________________

实验题目:___________________________ **回归 **___________________________________

实验目的:

	掌握回归算法的编程实现细节,要求不能使用任何库,纯手动编程实现多元线性回归。加深 对梯度计算、梯度下降算法、目标函数的求极值的理解,领会初值选取、学习率选择、公差 选择等对回归的影响。 

问题描述与步骤:

1.1 搭建开发环境:
  1. 实验是想要用linux来实现这个程序,实验是要求用Xubuntu Linux系统来实现,但是由于我用的别的linux虚拟机来实现(VMware Workstation Pro)和下了一个终端软件来连接创建的虚拟机(FinalShell)。下面我会详细来怎么配置这个两个系统的开发环境配置:

    Xubuntu Linux系统:​

    1. 下载python解释器
    sudo apt install python3-pip  # Debian/Ubuntu 系统
    
    1. 分别下载numpy,scipy,matploblib,sklearn,pytorch模块
    pip3 install numpy
    pip3 install matplotlib
    pip3 install scipy
    pip3 install scikit-learnpip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
    1. 下载linux版的Vscode软件(可下可不下,只是一个编辑软件)

    2. 安装必要的依赖(以 Debian/Ubuntu 为例):

      sudo apt install software-properties-common apt-transport-https curl
      
    3. 添加 Microsoft GPG 密钥

      curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
      
    4. 添加 VS Code 软件源

      sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
      
    5. 更新软件包列表并安装 VS Code

      sudo apt update
      sudo apt install code
      

    VMware Workstation Pro系统

    1. 下载python解释器
    sudo yum install python3-pip  # CentOS/Fedora 系统
    
    1. 分别下载numpy,scipy,matploblib,sklearn,pytorch模块(和上面一样)
    pip3 install numpy
    pip3 install matplotlib
    pip3 install scipy
    pip3 install scikit-learnpip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
    
    1. 下载linux版的Vscode软件(可下可不下,只是一个编辑软件)

      1. 安装必要的依赖

        sudo yum install -y gcc-c++ make
        
      2. 添加 Microsoft GPG 密钥

        sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
        
      3. 添加 VS Code 软件源

        sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
        
      4. 更新软件包列表并安装 VS Code

        sudo yum check-update
        sudo yum install code
        
1.2 下载数据

​ 由于这个回归实验的程序需要一个表格数据(这里用csv文件),老师在客群里面发了,大家把这个文件最好放在程序的相同目录下面,当然也可以不放在相同的目录下,但是程序里面的文件路径需要修改一下。

例下:

1730288205291

提示:当然这个Windows系统的

  • 下面我写一下Linux系统的怎么弄呢?
  1. 首先打开虚拟机

1730288818758

  1. 打开FinalShell来连接这个创建的虚拟机

1730288906661

  1. 进入Desktop(桌面)创建一个文件夹:人工智能实验1

1730289062119

1730289165776

  1. 进入人工智能文件夹里面,并且创建:人工智能实验1.py文件

    1730289369205

  2. 将老师的文件移到人工智能实验1这个文件夹里面

1730289604540

​ 提示:移动进去了,可以看出来

  1. 进入到人工智能实验1.py里面将下面的程序代码写进去

1730289933700

  1. 执行代码

1730290984630

  1. 打开这个png图像文件,由于linux没有可视化工具,我们将其移到windows里面观看

1730291580684

1730291651104

1730291691241

实验方法(程序):

windows(用这个):

import math
import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 导入数据
data = genfromtxt("Delivery.csv", delimiter=",")
x_data = data[1:, :2]  # 选择前两列作为特征
y_data = data[1:, 2]    # 选择第三列作为目标变量# 检查特征数量
num_features = x_data.shape[1]# 初始化参数
weights = np.zeros(num_features + 1)  # +1 for w0
alpha = 0.005
epsilon = 1e-4
error = float('inf')  # 初始化为无穷大m = len(x_data)while error > epsilon:prediction = np.dot(x_data, weights[1:]) + weights[0]  # 计算预测error_i = prediction - y_datagrad_w = np.dot(x_data.T, error_i) / m  # 计算梯度weights[1:] -= alpha * grad_wweights[0] -= alpha * np.mean(error_i)  # 更新 w0# 计算误差error = np.linalg.norm(grad_w)  # 计算误差print(weights, error)# 绘制三维图
ax = plt.figure().add_subplot(111, projection='3d')
ax.scatter(x_data[:, 0], x_data[:, 1], y_data, c='r', marker='o', s=100)x0 = np.unique(x_data[:, 0])
x1 = np.unique(x_data[:, 1])
X0, X1 = np.meshgrid(x0, x1)  # 使用唯一值生成网格
Z = weights[0] + weights[1] * X0 + weights[2] * X1ax.plot_surface(X0, X1, Z, alpha=0.5)
ax.set_xlabel('Miles')  # 根据需要修改标签
ax.set_ylabel('Number of Deliveries')  # 根据需要修改标签
ax.set_zlabel('Time')  # 根据需要修改标签
plt.show()

Linux用这个:

import numpy as np
from numpy import genfromtxt
import matplotlib
matplotlib.use('Agg')  # 使用 Agg 后端
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 导入数据
data = genfromtxt("Delivery.csv", delimiter=",")
x_data = data[1:, :2]  # 特征
y_data = data[1:, 2]    # 目标# 初始化参数
num_features = x_data.shape[1]
weights = np.random.randn(num_features + 1) * 0.01  # 小随机值初始化
alpha = 0.001  # 学习率
epsilon = 1e-4
error = float('inf')m = len(x_data)while error > epsilon:prediction = np.dot(x_data, weights[1:]) + weights[0]error_i = prediction - y_datagrad_w = np.dot(x_data.T, error_i) / m# 检查梯度if np.any(np.isnan(grad_w)) or np.any(np.isinf(grad_w)):print("Gradient contains NaN or Inf, stopping updates.")breakweights[1:] -= alpha * grad_wweights[0] -= alpha * np.mean(error_i)error = np.linalg.norm(grad_w)print(weights, error)# 可视化并保存图像
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x_data[:, 0], x_data[:, 1], y_data, c='r', marker='o', s=100)x0 = np.unique(x_data[:, 0])
x1 = np.unique(x_data[:, 1])
X0, X1 = np.meshgrid(x0, x1)
Z = weights[0] + weights[1] * X0 + weights[2] * X1ax.plot_surface(X0, X1, Z, alpha=0.5)
ax.set_xlabel('Miles')
ax.set_ylabel('Number of Deliveries')
ax.set_zlabel('Time')# 保存图像
plt.savefig('output.png')

实验(编程调试)过程与结果分析

Linux产生的图像:

output

Windows产生的图像:

1730291932151

实验结论与心得:

从实验可知,这个实验是基于python编程语言去完成**多元线性回归 **的实现,所以这个实验让我们可以对python的编程语法以及思想和他的第三方模块的使用有了一定的了解,例如实验用到的numpy,matblotlib模块。

​ 不仅如此,他还不只是可以用Windows系统的完成,还可以用Linux操作系统完成,这个实验呢对很多的人来说应该是比较难的,因为实验要求是用Linux(VMWARE系统或者XUbuntu系统)完成。

​ 但是我觉的这个实验程序对于那些没有Linux系统基础的同学来说,Windows应该更加友好,所以我觉得大家还是用Windows操作系统的Vscode来实现这个程序实验吧,因为这个程序在那个操作系统上都可以实现(Windows或Linux),对于那些想要用Linux系统来实现的同学来说,它们应该会得到更多的知识,例如对Linux系统的认识,以及对Linux的指令的使用的了解。

​ 但是我觉得那些不想学习深入或者学习Linux而是为了完成实验的同学来说呢,我觉得还是没必要去下那个乌班图(Xubuntu)虚拟机,不管咋样,我看了一下安装包,大概有个4~5个G,这个实验我也是收获满满,教同学完成实验,我也是更加深刻的记住了一些配置知识。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据采集与融合技术第三次作业

作业内容 作业①: 要求:指定一个网站,爬取这个网站中的所有的所有图片,例如:中国气象网(http://www.weather.com.cn)。使用scrapy框架分别实现单线程和多线程的方式爬取。 –务必控制总页数(学号尾数2位)、总下载的图片数量(尾数后3位)等限制爬取的措施。 主要代码:…

2024年网鼎杯青龙组 pwn

pwn2 开局泄露栈地址,又是栈溢出,直接栈转移拿下 from pwn import * from LibcSearcher import LibcSearcher #from Crypto.Util.number import bytes_to_long,bytes_to_long #--------------------setting context--------------------- context.clear(arch=amd64, os=linux…

新东方在线视频课程资料下载工具,如何在电脑端下载新东方在线视频课程讲义到本地?

一. 安装新东方在线课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/koolearn_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学…

强连通分量学习笔记+杂题

图论系列: 前言: 僕は 明快さ故にアイロニー 優柔不断なフォローミー 後悔後悔夜の果て 相关题单:戳我 一.强连通分量相关定义 基本摘自oi wiki ,相关定义还是需要了解。(实际就是搬了个oi wiki) 强连通分量主要在研究有向图可达性,针对的图类型为有向弱联通图。 1.强连通…

CMake 生成器表达式---条件表达式和逻辑运算符

CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中。这些表达式允许你根据不同的平台、配置或编译器来定制构建过程。【写在前面】 CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在…

ESP32-LVGL驱动框架

ESP32另一种LVGL驱动架构问题背景 最近在调试一个新屏幕的过程中,使用LVGL官方的lvgl_esp32_driver驱动,在我这个分辨率比较大(454 x 454)的屏幕下会出现,在分配完成buff后,若buff过大会出现,在刷屏的时候会这种警告。 txdata transfer > hardware max supported len研…

goland 把多个项目窗口合并到一个窗口

有时我们可能想把goland 每个项目窗口合并到一个窗口,每个项目以一个tab的形式展示,下面是合并的方法 点击「Window->Merge All Project Windows」即可

Word_共享编辑

打开链接 ? 点击右上角的"登录"点"编辑"→点"在桌面版中打开"共享编辑 ok

手把手教你如何下载中国大学mooc慕课上已关闭的视频课程和课件资料

随着线上教育的普及,越来越多的大学开始提供线上教育,以方便学生的在线学习。然而,有些课程在结束后就会被关闭,导致学生无法再次观看。如果你想下载这些已经关闭的视频课程,该怎么办呢?其实我们可以通过一些工具来下载这些已关闭的课程。这里以中国大学Mooc网站为例,教…

汉文博士新增《通用规范汉字表》等多个字表

汉文博士的字表可以用于在部首、构型、粤拼和拼音检索中突出显示或筛选汉字。 今天将之前上传的字表全部重新生成了一遍,在词典管理界面双击字表可查看字表内含的汉字数量。 另外,还新增了如下字表:现代汉语通用字表 现代汉语常用字表 通用规范汉字表 台湾“常用国字”标准字…

Normalized Mutual Information(NMI, 归一化互信息)

Normalized Mutual Information(NMI, 归一化互信息)值域是 $[0,1]$,值越高表示两个聚类结果越相似。归一化是指将两个聚类结果的相似性值定量到 $0\sim 1$ 之间。$$ \text{NMI}=\frac{2\sum_i\sum_jn_{ij}ln\frac{n_{ij}N}{n_in_j}}{-\sum_in_iln\frac{n_i}{N}-\sum_jn_jln\fr…

模拟赛总结(四)(终章?)

2024.10.30 T1 追逐游戏 (chase) 被自己的分讨绕死了,以后要学会简化code T2 统计code T3 软件工程 选前\(k - 1\)长的 + 剩下求交集可得\(96\) ~~为什么我贪的不对qwq ~~ 把这个贪心改成大炮就是整洁的一部分 定义\(dp_{i,j}\)表示前\(i\)条线段放到\(j\)个集合里,那么上述方…