python - 梯度下降“直到收敛”问题
问题描述
下面是我的机器学习教授提供的线性回归梯度下降的 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)```
解决方案
本质上,收敛是当损失稳定在某个值时,即它变得或多或少是恒定的。因此,要在收敛时停止梯度下降,只需在每次梯度下降迭代中使用 m 和 c 的值计算成本函数(也称为损失函数)。您可以为损失添加一个阈值,或者检查它是否变为常数,即您的模型何时收敛。
推荐阅读
- sql - 在 Postgres 中查询 JSONB 中的复杂数组
- google-apps-script - 如何在 Google 表单页面和 Google 表格之间记录和传递响应?
- apache-spark - pyspark agg 告诉我列名中有错误的字符,但名称似乎正确
- android - 如何从可移动 sd 卡(第二个外部存储)中删除文件?
- github-actions - 我可以有多个 GitHub Actions 工作流文件吗?
- javascript - 获取 HTML 并插入 DOM,但相对于特定路径进行解析
- shell - 使用 conda 将虚拟环境克隆到另一个目录
- react-native - 在应用程序打开时反应本机崩溃,找不到模块
- c - 我正在使用 Visual Studio 2019,我目前正在用 C 语言制作一些关于身高和体重的方程式,这是否非常相似?
- javascript - React Virtualized Grid + Infinite Loader + Cell Measurer