《人工神经网络及应用》学习日记(一):代码实现线性回归和多项式回归

本文介绍了如何通过Python进行线性回归和多项式回归的实践,包括构建模型、数据预处理、loss计算与优化,以及可视化训练过程。作者使用了PyTorch库,并提供了相应的代码示例和绘图函数.
摘要由CSDN通过智能技术生成

一、上课笔记如下,边听遍记,记的乱乱的;;

二、课后作业

python代码实现线性回归和多项式回归

1.线性回归

(1)思路:设置一个模型,y=wx+r,控制输入x和y的二维数组(有几行就代表有几组数据,有几列就代表有几个特征),w、r一开始随机赋一个初值,然后带入x和y计算loss,根据计算出的loss和设置好的学习率来改变w和r,然后再带入x、y计算loss,循环往复,直到训练满了设置好的次数或者loss为0了为止,跳出循环输出w、r,然后随便输入一个测试值x,拿到验证值y。

(2)程序:可以自己编也可以直接用别人封装好的函数,我是懒狗我选第二种;)

直接编代码实现可以看这个:机器学习5-线性回归算法的代码实现_线性回归代码-CSDN博客

我使用的是pythorch的torch.nn.linear类:PyTorch 深度学习实践 第5讲_model call 深度学习-CSDN博客

(3)额外:

        我想能随意更改x和y的维数,所以加了一个数据预处理的函数,作用是写入一个存在误差(大于零小于一)的数组,可以自己规定维数。如果想要改变数据可以把写文件这里注释掉,直接自己往txt文件里写。

import numpy as np

def loadtxt(filename, shape):
    # 写文件
    size = shape[0] * shape[1]
    c = np.array(range(size))
    r = np.random.rand(size)
    a = c+r
    np.savetxt(filename, a, fmt='%f', delimiter=',')
    # 读文件
    b = np.loadtxt(filename, dtype=np.float32, delimiter=',').reshape(shape)
    return b

        我还想把loss的降低过程画出来,把训练用的数据点和模型拟合的直线也画出来,所以编写了一个绘图函数,作用就是画图

import numpy as np
import matplotlib.pyplot as plt

# 读取存储为txt文件的数据
def data_read(dir_path):
    with open(dir_path, "r") as f:
        raw_data = f.read()
        data = raw_data[1:-1].split(", ")   # [-1:1]是为了去除文件中的前后中括号"[]"

    return np.asfarray(data, float)

def draw(dir_path, x_arr, y_arr, w, b, x_t, y_t):
    train_loss_path = dir_path  # 存储文件路径

    y_train_loss = data_read(train_loss_path)  # loss值,即y轴
    x_train_loss = range(len(y_train_loss))  # loss的数量,即x轴

    fig, axs = plt.subplots(1, 2, figsize=(12, 5))

    # 左边画loss曲线
    axs[0].plot(x_train_loss, y_train_loss, linewidth=1, linestyle="solid", label="train loss")
    axs[0].set_xlabel('iters')
    axs[0].set_ylabel('loss')
    axs[0].legend()
    axs[0].set_title('Loss curve')

    # 右边画训练集数据点以及模型拟合的直线
    axs[1].scatter(x_arr, y_arr, marker='+', label="Data Points")
    axs[1].scatter(x_t, y_t, color='g', marker='*', label="Test Points")
    size = np.size(x_arr)
    x_line = np.array(range(size+1))  # 直线的x坐标范围
    y_line = w * x_line + b  # 计算直线对应的y坐标
    axs[1].plot(x_line, y_line, color='red', label='Fitted Line')  # 绘制拟合的直线
    axs[1].set_xlabel('x')
    axs[1].set_ylabel('y')
    axs[1].legend()
    axs[1].set_title('linear regression result')

    plt.tight_layout()
    plt.show()

用这个函数之前要先把训练中所有的loss都存起来,所以要在前文的参考链接代码里面加几句话:

        啊对了,以及规定一下存放数据的路径path_loss。

(4)结果:

2.多项式回归

(1)思路:多项式回归感觉跟线性回归的区别就在于直线是单次项相加、曲线是不同次幂的多次项相加,类似于把很多一次项相乘升幂(?)

        所以具体流程应该和线性回归流程一致(读数据、建模型、定优化器和loss函数、训练模型、测试模型),只不过在模型构造方面,要多嵌套几层线性模型

(2)程序:

代码参考:Python神经网络学习之5层网络学习多项式回归_5层神经网络代码-CSDN博客

(3)结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值