欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 机器学习模型——线性回归

机器学习模型——线性回归

2026/5/22 18:29:43 来源:https://blog.csdn.net/2401_85464956/article/details/144065780  浏览:    关键词:机器学习模型——线性回归

文章目录

  • 前言
  • 1.基础概念
  • 2.代价函数
  • 3.单变量线性回归
    • 3.1加载数据
    • 3.2初始化超参数
    • 3.3梯度下降算法
      • 3.3.1初次梯度下降
      • 3.3.2 多次梯度下降
      • 3.3.3结果可视化

前言

随着互联网数据不断累积,硬件不断升级迭代,在这个信息爆炸的时代,机器学习已被应用在各行各业中,可谓无处不在。在入门机器学习时,所学习的第一个模型大概率是线性回归模型,本篇博客从底层原理到代码实现一步一步带你了解如何是线性回归。

1.基础概念

线性回归旨在建立一个线性模型,通过若干带有标注的样本数据构造出一个预测模型f(x),用于描述自变量(特征)与因变量(目标)之间的关系。
最典型的线性回归模型,同时也是举例最多的例子便是预测房价,网上也有很多相关的数据集。其数学模型可以表示为:
在这里插入图片描述
拆开形式为:
在这里插入图片描述
当然也可以将参数b融入w向量中,只需在所有样本x后面加上新的属性值为1即可

2.代价函数

对于线性回归问题,一般使用平方误差作为代价函数,所以代价函数可以表示为:
在这里插入图片描述
所以训练的目标为让代价函数最小,此时我们可以直接求偏导令其等于零,来确定参数w,b,也可以使用梯度下降算法,此处本篇博客使用梯度下降算法,在运用梯度下降算法之前我们需要确定梯度,推导过程如图所示:
在这里插入图片描述后续算法设计时需要用到。
这里对 梯度下降简要解释一下 :对一个函数,根据某点的梯度(斜率),以一定的步长即学习率来逼近极值点。

3.单变量线性回归

现在大多数都会用sklearn来实现线性回归模型,而忽略了底层如何实现的,所以本篇博客介绍如何一步一步实现梯度下降,而不使用现有以封装好的库

3.1加载数据

此处我们使用pandas库提供的函数来读取csv格式的文件

import pandas as pd
df=pd.read_csv('./data/regress_data1.csv')
x=df.iloc[:,:1].values
y=df.iloc[:,1:2].values

运行结果:
在这里插入图片描述

3.2初始化超参数

w=0
b=0
predict=w*x+b

在这里插入图片描述
此时该模型预测结果为predict,显然不是一个好的模型,因此需要梯度下降来调整超参数w,b,此时我们计算一下当前模型的代价:

import numpy as np
m=len(x)
loss=np.sum(np.power(y-predict,2))/(2*m)

在这里插入图片描述

3.3梯度下降算法

3.3.1初次梯度下降

在这里插入图片描述
在计算梯度下降时,你可能出现这个问题,反正我出现了,但慢慢调过后就没了,原因是它把它当作矩阵处理的所以出现这个问题,所以可以之间将其转化为向量就会避免这个问题出现了
x为矩阵,而不是向量
向量
因此正确代码应该为:

w=0
b=0
learning_rate=0.0
temp_w=w-np.dot((predict-y)[:,0],x[:,0])/m*learning_rate
temp_b=b-np.sum(predict-y)/m*learning_rate
w=temp_w
b=temp_b
w,b

在这里插入图片描述
此时的代价函数为:

predict=w*x+b
np.sum(np.power(y-predict,2))/(2*m)

在这里插入图片描述
此时发现该模型的代价比之前模型的代价更低

3.3.2 多次梯度下降

此处我们迭代了1000次,并输出了损失

learning_rate=0.01
w=0
b=0
for epoch in range(1000):temp_w=w-np.dot((predict-y)[:,0],x[:,0])/m*learning_ratetemp_b=b-np.sum(predict-y)/m*learning_ratew=temp_wb=temp_bpredict=w*x+bloss=np.sum(np.power(y-predict,2))/(2*m)if((epoch+1)%100==0):print("第{}轮梯度下降后的损失为:{}".format(epoch+1,loss))

输出结果:
在这里插入图片描述

3.3.3结果可视化

import matplotlib.pyplot as plt
learning_rate=0.01
w=0
b=0
plt.scatter(x,y)for epoch in range(1000):temp_w=w-np.dot((predict-y)[:,0],x[:,0])/m*learning_ratetemp_b=b-np.sum(predict-y)/m*learning_ratew=temp_wb=temp_bpredict=w*x+bloss=np.sum(np.power(y-predict,2))/(2*m)if((epoch)%100==0):print("第{}轮梯度下降后的损失为:{}".format(epoch,loss))plt.plot(x, predict)
plt.show()

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词