无法理解线性回归中的迭代次数(机器学习)

时间:2018-06-16 19:47:28

标签: python machine-learning linear-regression gradient-descent

我一直在努力让我的机器学习几天。我正在观看互联网上的视频和文章 在this视频中。 Siraj(视频中的家伙)教导从头开始创造渐变下降与numpy和python。这是代码: -

import numpy as np

ERROR = []

def compute_error_for_given_points(b, m, points):
    total_error = 0.0

    for i in range(0,len(points)):
        x = points[i,0]
        y = points[i,1]
        total_error += (y-(m * x + b))**2

    return total_error/float(len(points))

def step_gradient(b_current, m_current, points, learning_rate):
    b_gradient = 0
    m_gradient = 0
    N = float(len(points))

    for i in range(0,int(N)):
        x = points[i, 0]
        y = points[i, 1]
        b_gradient += -(2/N) * (y- (m_current*x + b_current))
        m_gradient += -(2/N) * x * (y- (m_current*x + b_current))
    new_b = b_current - (learning_rate * b_gradient)
    new_m = m_current - (learning_rate * m_gradient)

    return new_b,new_m

def gradient_descent_runner(points,starting_b,starting_m,learning_rate,num_iteration):
    b = starting_b
    m = starting_m

    for i in range(num_iteration):
        ERROR.append(compute_error_for_given_points(b,m,points))
        b, m  = step_gradient(b, m, points, learning_rate)

    return b,m


def run():
    points = np.genfromtxt('data.csv',delimiter=',')
    #print(type(points))
    #print(points)
    #hyperparameter
    learning_rate = 0.0001

    #y = mx + b
    initial_b = 0
    initial_m = 0
    num_iteration = 100000

    b,m = gradient_descent_runner(points,initial_b,initial_m,learning_rate,num_iteration)
    print("OPTIMIZED: ",b)
    print("OPTIMIZED: ",m)
    print("Error: ",compute_error_for_given_points(b,m,points))
    print("\n")
    #print(ERROR)


if __name__ == '__main__':
    run()

我理解所有数学和微积分的东西。但我无法理解变量 num_iteration 。他告诉使用1000,得到 b m 的一些值。但是当我使用高于1000时,我会得到 b m 的不同值。并且使用 num_iteration 的循环,我们不能用while循环替换它,条件是直到除非我们得到成本函数的最低值?所以,如果你们有人能够在这个 num_iteration 变量中给我一些见解,那将非常有帮助。
提前致谢

1 个答案:

答案 0 :(得分:0)

为了在while循环中设置条件“直到成本函数的最低值”,首先必须知道该值是什么。在程序完成聚合之前,您不会知道它会是什么。你无法预先知道它。

因此,你可以让它运行一个任意数字,在你的情况下,1000,并希望通过那么多次迭代,成本的最小值(或至少是一个合理的值)将达到。

修改

这是我在运行10000

代码后得到的结果
OPTIMIZED:  4.247984440219189
OPTIMIZED:  1.3959992655297515
Error:  110.7863192974508

1000 -

OPTIMIZED:  0.08893651993741346
OPTIMIZED:  1.4777440851894448
Error:  112.61481011613473

当代码运行1000次时,错误与我们100000次获得的错误相比更多。这是预期的。循环越多,参数越接近最佳值。使用100000个纪元,代码将继续调整b和m,直到达到错误或110。使用1000时,它将继续执行相同的操作,但一旦达到1000就会停止。