首页 > 解决方案 > 为什么我的梯度下降算法不起作用?

问题描述

我在 Python 中做了一个梯度下降算法,但它不起作用。我的 m 和 b 值不断增加并且永远不会停止,直到我得到 -inf 错误或在平方错误中遇到溢出。

import numpy as np

x = np.array([2,3,4,5])

y = np.array([5,7,9,5])

m = np.random.randn()

b = np.random.randn()

error = 0

lr = 0.0001


for q in range(1000):

        for i in range(len(x)):
            ypred = m*x[i] + b
            error += (ypred - y[i]) **2
        m = m - (x * error) *lr
        b = b - (lr * error)
print(b,m)

我希望我的算法能够为我的数据(x 和 y)返回最佳的 m 和 b 值,但它不起作用。出了什么问题?

标签: pythonpython-3.xmachine-learninglinear-regressiongradient-descent

解决方案


import numpy as np

x = np.array([2,3,4,5])
y = 0.3*x+0.6


m = np.random.randn()
b = np.random.randn()


lr = 0.001

for q in range(100000):
    ypred = m*x + b 
    error = (1./(2*len(x))) * np.sum(np.square(ypred - y)) #eq 1
    m = m - lr * np.sum((ypred - y)*x)/len(x) # eq 2 and eq 4
    b = b - lr * np.sum(ypred - y)/len(x)   # eq 3 and eq 5

print (m , b)

输出:

0.30007724168011807 0.599703981757188​​1

背后的数学

![在此处输入图像描述

使用 numpy 向量化操作来避免循环。


推荐阅读