首页 > 解决方案 > 梯度下降“直到收敛”问题

问题描述

下面是我的机器学习教授提供的线性回归梯度下降的 Python 实现。我相信我理解它是如何工作的,但是,教授在讲座中建议这不是算法的完整实现,因为它应该重复直到 theta_0(m) 和 theta_1(c) 收敛。他建议我们尝试修改这个实现,让它在收敛之前执行,而不是在 epoch 上执行,以便更熟悉算法,尽管我不太确定从哪里开始。有小费吗?

# Building the model
m = 0
c = 0

L = 0.0001  # The learning Rate
epochs = 1000  # The number of iterations to perform gradient descent

n = float(len(X)) # Number of elements in X

# Performing Gradient Descent 
for i in range(epochs): 
    Y_pred = m*X + c  # The current predicted value of Y
    D_m = (-2/n) * sum(X * (Y - Y_pred))  # Derivative wrt m
    D_c = (-2/n) * sum(Y - Y_pred)  # Derivative wrt c
    m = m - L * D_m  # Update m
    c = c - L * D_c  # Update c
    
print (m, c)```

标签: pythonalgorithmmachine-learninglinear-regressiongradient-descent

解决方案


本质上,收敛是当损失稳定在某个值时,即它变得或多或少是恒定的。因此,要在收敛时停止梯度下降,只需在每次梯度下降迭代中使用 m 和 c 的值计算成本函数(也称为损失函数)。您可以为损失添加一个阈值,或者检查它是否变为常数,即您的模型何时收敛。


推荐阅读