python - Python的批量梯度下降不收敛
问题描述
这是我用于此练习的 Jupyter Notebook:https ://drive.google.com/file/d/18-OXyvXSit5x0ftiW9bhcqJrO_SE22_S/view?usp=sharing
我正在用这个数据集练习简单的线性回归,这是我的参数:
sat = np.array(data['SAT'])
gpa = np.array(data['GPA'])
theta_0 = 0.01
theta_1 = 0.01
alpha = 0.003
cost = 0
m = len(gpa)
我试图通过将其转换为矩阵并执行元素操作来优化成本函数计算。这是我想出的结果公式:
成本函数优化:
成本函数
def calculateCost(matrix_x,matrix_y,m):
global theta_0,theta_1
cost = (1 / (2 * m)) * ((theta_0 + (theta_1 * matrix_x) - matrix_y) ** 2).sum()
return cost
我也尝试对梯度下降做同样的事情。
梯度下降
def gradDescent(alpha,matrix_x,matrix_y):
global theta_0,theta_1,m,cost
cost = calculateCost(sat,gpa,m)
while cost > 1
temp_0 = theta_0 - alpha * (1 / m) * (theta_0 + theta_1 * matrix_x - matrix_y).sum()
temp_1 = theta_1 - alpha * (1 / m) * (matrix_x.transpose() * (theta_0 + theta_1 * matrix_x - matrix_y)).sum()
theta_0 = temp_0
theta_1 = temp_1
我不完全确定这两种实现是否正确。该实现返回了114.89379821428574的成本,这就是我绘制成本图表时“下降”的样子:
梯度下降图:
如果我正确实现了成本函数和梯度下降,请纠正我,并尽可能提供解释,因为我仍然是多元微积分的初学者。谢谢你。
解决方案
您错误地实现了成本函数:
1 / 2 * m
被解释为m/2
,你应该写1/2/m
。
推荐阅读
- java - ViewModel Observer 显示空 RecyclerView
- amazon-web-services - boto3 对象是否有通用的“描述”方法?
- javascript - 在nodejs中处理大文件和节点以及内存限制
- amazon-web-services - 转储和评估 S3 存储桶策略的最佳方法
- python - 无法通过 python 请求从我的本地计算机连接到 Lambda 或 EC2
- rxjs - 内部可观察对象未更新
- react-navigation - 如何从 React Navigation v5 的组件中获取屏幕选项?
- javascript - 使用 Javascript/Regex 从文本文档中提取值
- python-3.x - Pandas:在聚合函数中获取 abs() mean()
- twitter - Twitter 提要自动滚动