【问题标题】:Cant understand the number of iteration in linear regression (Machine Learning)无法理解线性回归中的迭代次数(机器学习)
【发布时间】:2018-06-16 19:47:28
【问题描述】:

这几天我一直在努力研究机器学习。我正在互联网上观看视频和文章。
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,得到 bm 的一些值。但是当我使用高于 1000 时,我得到的 bm 的值不同。而使用 num_iteration 的循环,我们不能用while循环替换它吗,条件是直到,除非我们得到成本函数的最低值?所以,如果你们可以给我一些关于这个 num_iteration 变量的见解,这将非常有帮助。
提前致谢

【问题讨论】:

  • 我认为您使用 for 而不是 while 循环的原因是因为如果您的数据不是线性的,您可能无法在 while 循环中找到条件,然后您将进入一个无限循环。

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


【解决方案1】:

要在 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 个 epoch,代码将不断调整 b 和 m,直到出现错误或达到 110。 1000 时,它会继续做同样的事情,但一旦达到 1000,它就会停止。

【讨论】:

  • 我将值更改为 100000 一个不同的 m 和 b 值即将到来是否超过最小值?但需要注意的是,成本函数值低于 1000 的值......
  • 为什么你认为 m 和 b 超过了最小值?正如您所说,100000 的成本函数小于 1000 的成本函数。这就是我们所期望的。如果我们将代码运行 100 倍以上,我们预计成本会降低。你跑得越多,我们期望我们的成本函数得到的就越少。
  • 那么如果我们继续增加 epochs...我们会过度拟合模型吗?
  • 过度拟合是一件小事。如果我们继续增加 epoch,我们预计训练数据的误差总是会减小。这就是这里发生的事情。当我们开始谈论验证数据时,就会出现过度拟合。我们跑得越多,我们得到的训练数据的错误就越少。但这并不意味着验证数据也会发生同样的情况。如果 epoch 太多,我们可能会在验证集上过度拟合,并且错误可能会随着 epoch 的数量而增加。
猜你喜欢
  • 2020-09-01
  • 2021-04-07
  • 2019-08-01
  • 2019-04-17
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多