一、简介
线性回归简单来说,就是找到一条直线(超平面),这条直线(超平面)尽可能好地拟合给定的数据点。二维空间如图所示。
线性回归(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越来越小,说明直线越来越拟合这些散点。
线性回归图像表示 ,两条线越来越重合。完成!