首页 > 解决方案 > 我的 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)

标签: pythonnumpymachine-learninggradient-descent

解决方案


看起来您的参数被定义为整数。再试一次

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,因此参数不会更新。


推荐阅读