梯度下降需要太多的迭代才能收敛

时间:2019-07-26 11:32:03

标签: python machine-learning gradient-descent

梯度下降似乎没有收敛

我正在使用Python从头开始进行梯度下降(无sklearn),以在Boston Housing数据集上实现线性回归(房间数与中位数成本)。

Scikit Learn的LinearRegression为我提供了以下与数据完美契合的斜率/截距。 斜率= [9.10210898] 拦截= -34.67062077643854

但是,梯度下降甚至还没有接近。

import numpy as np
import matplotlib.pyplot as plt

l_rate = 0.0001 # Learning rate
steps = 100000    # number of iterations ( steps )

m = 0.0 # initial slope
b = 0.0 # initial intercept

n = len(x)

cost_array = np.empty([steps],dtype="float64")

# Start Gradient Descent
for step in range(steps) :
    y_pred = m * x + b

    # Derivative of the cost function w.r.t slope (m)
    m_der  = (-1/n) * sum( (y - y_pred) * x)

    # Derivative of the cost function w.r.t intercept (b)    
    b_der  = (-1/n) * sum( y - y_pred )

    # move m
    m = m -  l_rate * m_der
    b = b -  l_rate * b_der

    cost = (1/(2*n)) * np.sum(np.square(y - y_pred))
    cost_array[step] = cost

我期望随着学习率的多种变化(例如介于0.1和0.0000001之间),解决方案应在5000次迭代中收敛。但是,只有在进行100K次迭代后,才能达到理想的斜率和截距值(由SKLearn的LinearRegression计算)。

很明显,我做错了。你能帮我解决我哪里出问题吗?

0 个答案:

没有答案