当前位置: 首页 > 知识库问答 >
问题:

如何并行简单的线性回归与梯度下降-使用Numpy?

公孙茂学
2023-03-14

我有麻烦使用Numpy来并行化下面的循环(get_new_weights)。我update_weights第一次尝试df_dm,重量完全错了。第二次尝试df_dm时,我的体重超过了最佳体重。

注-偏差为单个数字,权重为单个数字(单变量线性回归),X为形状(442,1),y为形状(442,1)。还要注意的是,更新我的偏差项在更新权重中非常有效——它只是更新我遇到麻烦的权重。

# This is the for loop that I am trying to parallelize with numpy:
def get_new_weights(X, y, weight, bias, learning_rate=0.01):
    weight_deriv = 0
    bias_deriv = 0
    total = len(X)
    for i in range(total):
        # -2x(y - (mx + b))
        weight_deriv += -2*X[i] * (y[i] - (weight*X[i] + bias))
        # -2(y - (mx + b))
        bias_deriv += -2*(y[i] - (weight*X[i] + bias))

    weight -= (weight_deriv / total) * learning_rate
    bias -= (bias_deriv / total) * learning_rate
    return weight, bias

# This is my attempt at parallelization
def update_weights(X, y, weight, bias, lr=0.01):
    df_dm = np.average(-2*X * (y-(weight*X+bias))) # this was my first guess
    # df_dm = np.average(np.dot((-X).T, ((weight*X+bias)-y))) # this was my second guess
    df_db = np.average(-2*(y-(weight*X+bias)))
    weight = weight - (lr*df_dm)
    bias = bias - (lr*df_db)
    return weight,bias

共有1个答案

冷宏茂
2023-03-14

谢谢大家看了我的问题。我松散地使用术语并行化来指代我正在寻找的运行时优化,它消除了对for循环的需要。这个问题的答案是:

df_dm = (1/len(X)) * np.dot((-2*X).T, (y-(weight*X+bias)))

这里的问题是确保中间步骤产生的所有数组具有正确的形状。对于那些对这两个函数之间的运行时差异感兴趣的人来说:for循环花费的时间要长10倍。

 类似资料:
  • 我试图在java中实现线性回归。我的假设是θ0θ1*x[i]。我试图计算θ0和θ1的值,使成本函数最小。我正在用梯度下降来找出值- 在 在收敛之前,这种重复是什么?我知道这是局部最小值,但我应该在while循环中输入的确切代码是什么? 我对机器学习非常陌生,刚开始编写基本的算法以获得更好的理解。任何帮助都将不胜感激。

  • 我试图实现梯度下降的线性回归,如本文(https://towardsdatascience.com/linear-regression-using-gradient-descent-97a6c8700931)所述。我已经严格遵循了实现,但是经过几次迭代后,我的结果会溢出。我试图得到这个结果大约: y=-0.02x 8499.6。 代码: 在这里,它可以在围棋场上工作:https://play.go

  • 我试图在MatLab中实现一个函数,该函数使用牛顿法计算最佳线性回归。然而,我陷入了一个问题。我不知道如何求二阶导数。所以我不能实施它。这是我的密码。 谢谢你的帮助。 编辑:: 我用一些纸和笔解决了这个问题。你所需要的只是一些微积分和矩阵运算。我找到了二阶导数,它现在正在工作。我正在为感兴趣的人分享我的工作代码。

  • 我用JavaScript实现了一个非常简单的线性回归和梯度下降算法,但是在查阅了多个源代码并尝试了几件事情之后,我无法使它收敛。 数据是绝对线性的,只是数字0到30作为输入,x*3作为正确的输出来学习。 这就是梯度下降背后的逻辑: 我从不同的地方取了公式,包括: 乌达城深度学习基金会纳米学位的练习 吴恩达的线性回归梯度下降课程(也在这里) 斯坦福CS229讲义 我从卡内基梅隆大学找到的其他PDF幻

  • 我正在学习机器学习/线性回归的Coursera课程。下面是他们如何描述用于求解估计OLS系数的梯度下降算法: 因此,他们对系数使用,对设计矩阵(或他们称之为特征)使用,对因变量使用。它们的收敛准则通常是RSS梯度的范数小于容差ε;也就是说,他们对“不收敛”的定义是: 我很难让这个算法收敛,我想知道在我的实现中是否忽略了一些东西。下面是代码。请注意,我还通过statsmodels回归库运行了我在其中

  • 好的,那么这个算法到底意味着什么呢? 据我所知: i) 阿尔法:梯度下降的步骤有多大。 ii)现在,∑{hTheta[x(i)]-y(i)}:指给定θ值的总误差。 误差是指预测值{hTheta[x(i)]}与实际值之间的差值。[y(i)] σ{hTheta[x(i)]-y(i)}给出了所有训练示例中所有误差的总和。 结尾的Xj^(i)代表什么? 在为多元线性回归实现梯度下降时,我们是否在执行以下操