python - 我的 SGD 实现有问题
问题描述
我对机器学习非常陌生,我试图实现 SGD 以优化 numpy 中的单变量线性回归,但它找不到最佳参数。
def sgd(alpha,x,y,params,epochs):
m = len(x)
cost_history = []
for i in range(0,epochs):
for xi,yi in zip(x,y):
error = (params @ xi) -yi
grad0 = error * xi[0]
grad1 = error * xi[1]
params[0] = params[0] - alpha *grad0
params[1] = params[1] - alpha * grad1
cost_history.append(cost_func(params,x,y))
return params,cost_history
sgd_params,sgd_cost_hist = sgd(0.001,designX,y,np.array([3,2]),5)
解决方案
看起来您的参数被定义为整数。再试一次
sgd_params,sgd_cost_hist = sgd(0.001,designX,y,np.array([3.0,2.0]),5)
这是该问题的快速演示。
b = np.array([3, 2])
print(b, b.dtype)
b[0] = b[0] + 0.1
print(b, b.dtype)
b[0] = b[0] + 1.2
print(b, b.dtype)
获取:
[3 2] int64
[3 2] int64
[4 2] int64
该值保持整数。由于学习率的原因,增量的绝对值往往低于 1,因此参数不会更新。
推荐阅读
- jquery - rails - jQuery 在加载时未定义,之后按预期工作
- arrays - 如何将语言别名添加到 highlightjs?
- algorithm - 如何对我的 Web 应用程序的帖子进行排名?
- graphql - 具有多对多关系的类型元素的 GraphQL 解析器
- html - 移除 Foundation 6 下拉箭头
- python-3.x - 在另一个函数中使用函数时如何解决此语法错误?
- java - 比较行不起作用,为什么?我该如何解决?
- ios - 使用 Xib 创建 UICollectionView/UICollectionViewController 组件并在 UIViewController 中实现
- c# - C# - 通过串行端口从设备获取所有数据并检测控制字符(ACK、SOH、...)
- c# - 如何修复 Windows 窗体以仅加载完全禁用