Python梯度下降法入门:单变量线性回归实战示例

Ruby
Ruby
发布时间:2026-10-13| 5人浏览过
原创

本文通过Python代码演示梯度下降法在单变量线性回归中的应用。文章解释了损失函数的定义、对参数求导的过程以及迭代更新公式,并结合具体样本数据展示如何求解最优斜率k。适合希望直观理解梯度下降原理的初学者参考。

此处不展开讲解梯度下降法的数学原理与公式推导,仅提供一个直观且易于理解的简单示例。

首先考虑最简单的情况,样本仅包含一个变量,即简单的(x, y)对。若涉及多变量,例如通过体重或身高判断性别(注:此仅为假设,实际并不严谨),则变量包含两个属性:体重和身高,可表示为(x1, x2, y),即一个目标值对应两个输入属性。

在单变量情况下,最简单的模型是函数hk(x) = k*x所代表的直线(注意:这里的k也是变化的,我们的目标就是求出最优的k)。在深度学习中,我们通常不知道具体的函数形式,也就是不知道上述的k值。以下讨论仅针对单变量情况:

在未知k的情况下,我们通过样本点(x1, y1)、(x2, y2)……(xn, yn)来估计k。评估估计出的k的好坏,需要借助损失函数。

损失函数用于衡量预测值与真实值之间的差异大小。例如,对于样本(1, 1),其真实值为1,若预测值为0.5,则差异较大;若预测值为0.9999,则差异较小。

单变量情况下的损失函数定义如下:

我们的目标是求出使损失函数最小的变量k(需注意与变量x区分)。为此,需对损失函数关于k求导(在多变量情况下为求偏导得到梯度,此处单变量求导,严格来说不称为梯度)。求偏导结果如下:

随后进行迭代更新,迭代过程中涉及一个步长alpha(在深度学习中通常称为学习率)。

3. 具体示例

假设我们获得的样本为(1, 1)、(2, 2)、(3, 3)。由这三个样本可知,真实函数应为y = 1*x,此时损失函数值为0。但机器无法直接得知这一点,因此需要通过训练过程来学习。

以下是一段Python实现代码。

import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-5, 5, 0.001)
y=(((x-1)*(x-1)+(x*2-2)*(x*2-2)+(x*3-3)*(x*3-3))*1/6.0)
plt.plot(x,y) 
#plt.show() #显示图形 
 

def sum(x):
 return ((x*1-1)*1+(x*2-2)*2+(x*3-3)*3)
def fun(x):
 return ((1/3.0)*sum(x))
old = 0
new = 5
step = 0.01
pre = 0.00000001
 
def src_fun(x):
 print(((x-1)*(x-1)+(x*2-2)*(x*2-2)+(x*3-3)*(x*3-3))*1/6.0)
 
while abs(new-old)>pre:
 old = new
 #src_fun(old)  #输出每次迭代的损失值
 new = new - step*fun(old)
 
 
print(new)
print(src_fun(new))

下图展示了损失函数的图像,其中变量为k。横坐标表示k的不同取值,纵坐标表示对应的损失大小。从图中可以大致看出,当k为1时,损失函数值为0。需要注意的是,这里得到的最优值k=1是基于已有样本得出的,如果样本不同,k值也会相应变化。

以下是print(new)和print(src_fun(new))的输出结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。