机器学习十大算法(1)线性回归详解(附代码实现)

一、简介

线性回归简单来说,就是找到一条直线(超平面),这条直线(超平面)尽可能好地拟合给定的数据点。二维空间如图所示。

在这里插入图片描述

线性回归(Linear Regression)是机器学习十大算法中的一种,用于预测连续数值型的输出。它试图找到特征变量(输入)和目标变量(输出)之间的线性关系。线性回归主要有两种形式:简单线性回归和多元线性回归。

简单线性回归(Simple Linear Regression)
简单线性回归涉及一个自变量(解释变量)和一个因变量(响应变量),试图找到它们之间的线性关系。
多元线性回归(Multiple Linear Regression)
多元线性回归涉及两个或更多自变量,试图找到它们与因变量之间的线性关系。

线性回归优点是简单易懂,计算效率高。可以提供连续的输出值,适合预测问题。也可以容易地解释模型参数。缺点是对非线性关系拟合能力有限。对异常值敏感,可能会影响模型性能,需要特征和目标变量之间存在线性关系。
线性回归模型是许多领域中常用的预测工具,如金融、经济、生物统计等。尽管它是一个基础模型,但理解线性回归对于深入学习更复杂的机器学习算法非常重要。

二、代码实现

在平面有一些散落的点,尝试用一条直线去拟合他们。

首先导入需要使用的包

import torch
import matplotlib.pyplot as plt#导入画图工具
learning_rate=0.01             #学习率

准备数据,使用torch.rand画出500个随机的点
要训练的函数为 : y=3x+0.8

x=torch.rand(500,1)            #500个随机的x
y_true=x*3+0.8                 #真实值

定义要训练的权重w和偏置项b

w=torch.rand([1,1],requires_grad=True)#
b=torch.tensor(0,requires_grad=True,dtype=torch.float32)

定义要训练的权重w和偏置项b

w=torch.rand([1,1],requires_grad=True)#
b=torch.tensor(0,requires_grad=True,dtype=torch.float32)

通过循环,反向传播来更新参数

for i in range(2800):
    y_predict = torch.matmul(x, w) + b         #计算预测值,matmul表示矩阵相乘
    loss = (y_true - y_predict).pow(2).mean()  #计算loss,损失函数
 
    if w.grad is not None:                     #如果w和b的·1梯度不为零,将其置为0
        w.grad.data.zero_()                    #zero_()函数用来置0
    if b.grad is not None:
        b.grad.data.zero_()
 
    loss.backward()                            #反向传播
    w.data = w.data - learning_rate * w.grad.data
    b.data = b.data - learning_rate * b.grad.data
    if i%50==0:
        print("w=",w.item(),"b=",b.item(),"loss=",loss.item())#item()就是取里面的数值

#画图

plt.figure(figsize=(20,8))#画布尺寸
plt.scatter(x.numpy().reshape(-1),y_true.numpy().reshape(-1))               #真实值绘制散点图
y_predict = torch.matmul(x, w) + b                                          #计算预测值
plt.plot(x.numpy().reshape(-1),y_predict.detach().numpy().reshape(-1),c="r")#预测值绘制折线图,用红色来画
plt.show()

运行结果如图所示:

我们看到w,b的值越来越接近真实值,损失Loss越来越小,说明直线越来越拟合这些散点。

在这里插入图片描述
线性回归图像表示 ,两条线越来越重合。完成!
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哥兜兜有糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值