首页 > 编程语言 >Python 机器学习 线性回归 梯度下降法优化损失函数

Python 机器学习 线性回归 梯度下降法优化损失函数

时间:2024-02-11 21:44:48浏览次数:35  
标签:函数 Python 梯度 损失 线性 np theta

 

Python 机器学习中,梯度下降法是一种用于优化线性回归模型(以及其他机器学习算法)的损失函数的通用算法。目的是通过迭代地调整模型的参数(权重和截距),以最小化损失函数,例如均方误差(MSE)。梯度下降的基本思想是计算损失函数相对于每个参数的梯度(即偏导数),然后朝着减少损失的方向调整参数。这个过程重复进行,直到损失函数收敛到最小值或达到预定的迭代次数。

 参考文档:Python 机器学习 线性回归 梯度下降法优化损失函数-CJavaPy

1、线性回归

线性回归是一种监督学习算法,用于模型化特征和目标变量之间的线性关系。它试图找到一条直线(在二维空间中)或一个超平面(在多维空间中),以便最好地拟合给定数据点。线性回归的目标是最小化预测值和实际值之间的差异,通常使用均方误差(MSE)作为损失函数来衡量这种差异。

参考文档Python 机器学习 线性回归算法

2、损失函数

为了训练机器学习模型,需要一个评价标准来衡量模型的性能。损失函数提供了这样一个标准,通过最小化损失函数来优化模型参数。损失函数(有时称为成本函数)衡量模型预测值与实际值之间的差异。对于线性回归,常用的损失函数是均方误差(MSE)。公式代码如下,

import numpy as np

# 假设 X 是输入特征矩阵,y 是目标值向量
X = np.array([[1, 2], [1, 3], [1, 4], [1, 5]]) # 添加了一列1作为x0,以便处理截距项
y = np.array([5, 7, 9, 11])

# 初始化模型参数,theta0为截距,theta1, theta2为斜率
theta = np.array([0.1, 0.2])

# 线性回归模型的预测函数
def predict(X, theta):
    return X.dot(theta)

# 计算损失函数(MSE)
def compute_loss(X, y, theta):
    m = len(y)
    y_pred = predict(X, theta)
    loss = (1 / (2 * m)) * np.sum(np.square(y_pred - y))
    return loss

# 计算损失值
loss = compute_loss(X, y, theta)
print(f"Loss: {loss}")

参考文档:Python 机器学习 线性回归算法

3、梯度下降

梯度下降法是一种用来优化线性回归模型中损失函数的算法。它通过不断迭代模型的参数(权重和截距),以减少损失函数的值,从而找到损失函数的最小值。这一过程是通过计算损失函数对每个参数的梯度(偏导数)并根据这些梯度更新参数来实现的。对于线性回归,通常使用均方误差(MSE)作为损失函数。公式代码如下,

import numpy as np

# 模拟数据
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 添加截距项到X
X_b = np.c_[np.ones((100, 1)), X]  # 添加x0 = 1到每个实例

# 梯度下降参数
learning_rate = 0.01
n_iterations = 1000
m = len(X_b)

# 随机初始化参数
theta = np.random.randn(2, 1)

# 梯度下降
for iteration in range(n_iterations):
    gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
    theta -= learning_rate * gradients

print("模型参数:", theta)

predictions = X_b.dot(theta)
mse = (1/m) * np.sum((predictions - y) ** 2)
print("MSE:", mse)

SGDRegressor是scikit-learn库中用于解决回归问题的一个类,使用随机梯度下降(SGD)算法。这种方法特别适合大规模数据集,因为它每次更新模型参数时只使用数据集中的一个样本,从而减少了计算资源的需求。常用参数如下,

参数

描述

loss

损失函数,默认是'squared_loss'。

其他可选项包括'huber'、'epsilon_insensitive'

或者'quantile'等。

penalty

正则化项,默认是'l2'。

也可以设置为'l1'或'elasticnet'。

alpha

正则化项的系数,默认是0.0001。

learning_rate

学习率的调整方式,默认是'invscaling'。

其他选项包括'constant'、'optimal'和'adaptive'。

max_iter

最大迭代次数,默认是1000。

tol

停止标准。当一次迭代中损失的改善小于这个值时,

算法会停止,默认值为1e-3。

eta0

当学习率设置为'constant'

或'adaptive'时的初始学习率。

使用示例:Python 机器学习 线性回归 梯度下降法优化损失函数-CJavaPy

标签:函数,Python,梯度,损失,线性,np,theta
From: https://www.cnblogs.com/tinyblog/p/18013547

相关文章

  • 匀加速运动模拟python,(matplotlib)
    importnumpyasnpimportmatplotlibmatplotlib.use("TKAgg")importmatplotlib.pyplotaspltg=9.8s=100ds=0.00001#单位米v0=0.001#m/sv=[v0]t=[ds/v0]t_sum=0ds_num=int(s/ds)x=[]y=[]foriinrange(ds_num+1):ifi==0:continue......
  • Python通过Lxml库解析网络爬虫抓取到的html
    ​Lxml是基于libxml2解析库的Python封装。libxml2是使用C语言编写的,解析速度很好,不过安装起来稍微有点复杂。安装说明可以参考(http://Lxml.de/installation.html),在CentOS7上中文安装说明(http://www.cjavapy.com/article/64/),使用lxml库来解析网络爬虫抓取到的HTML是一种非常......
  • python基础学习4
    异常处理try-excepttry-except-excepttry-except-except-elsetry-except-except-else-finally:raise关键字raiseException('自定义异常')异常类型ZeroDivisionError除数为零IndexError索引超出范围KeyError字典取值时key不存在NameError使用未声明变量Sy......
  • 八、Python开发环境管理
    AnacondaAnaconda介绍、安装及使用教程-知乎(zhihu.com)如果你已经安装了Anaconda,那么就不再需要再安装Python了。Anaconda是一个集成了Python和大量常用Python库的发行版,它内置了Python环境和多种常用的Python库,可以直接使用。安装Anaconda后,你就可以在命令......
  • 第一章 矩阵与线性方程组
    §1.1域§1.2矩阵的基本运算§1.3\(\text{Gauß}\)消元与矩阵的相抵标准型第一节域定义:一个群是指一个集合\(G(|G|\ge2)\)与二元运算\(*\),满足:封闭性:\(\foralla,b\inG,a*b\inG;\)结合律:\(\foralla,b,c\inG,(a*b)*c=a*(b*c);\)存在恒元:\(\existse\inG.......
  • 第一章 矩阵与线性方程组
    §1.1域§1.2矩阵的基本运算§1.3\(\text{Gauß}\)消元与矩阵的相抵标准型第一节域定义:一个群是指一个集合\(G(|G|\ge2)\)与二元运算\(*\),满足:封闭性:\(\foralla,b\inG,a*b\inG;\)结合律:\(\foralla,b,c\inG,(a*b)*c=a*(b*c);\)存在恒元:\(\existse\inG.\fo......
  • Python--变量和简单数据类型
    Python--变量和简单数据类型变量的命名和使用1.变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。1_message="helloworld"#错误写法message_1="helloworld"#正确写法2.变量名不能......
  • 第 7章 Python 爬虫框架 Scrapy(上)
    第7章Python爬虫框架Scrapy(上)编写爬虫可以看成行军打仗,基本的角色有两个:士兵和将军,士兵冲锋陷阵,而将军更多地是调兵遣将。框架就像一个将军,里面包含了爬虫的全部流程、异常处理和任务调度等。除了可以让我们少写一些烦琐的代码,学习框架还可以学到编程思想和提升编程能力。Pyt......
  • python3创建虚拟环境
    在Python3中创建虚拟环境,你可以使用venv模块。venv模块是Python3.3及更高版本中自带的,用于创建独立的Python环境。以下是创建虚拟环境的步骤:打开终端或命令提示符。导航到你想要创建虚拟环境的目录。运行以下命令创建虚拟环境:python3-mvenvmyenv这将创建一个名为myen......
  • 用 python 比较 椭球体、单叶双曲面、双叶双曲面
    2024年2月10日 昨天晚上年夜饭,也算是道出这几年的麻烦——就是内心戏多,加上身边又没有太多的案例(或者更多人)让我的认知有个比较客观的校准。现在就学习吧。尝试用Python画出椭球体、单叶双曲面、双叶双曲面。 1.椭球面 代码#----Test-----#椭球,单叶双曲......