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

我在过去几天里一直试图理解机器学习。我在互联网上观看了各种视频和文章。
这个视频中。视频中的@人名教我们如何从头开始使用numpy和python创建梯度下降法。以下是代码:

import numpy as npERROR = []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_mdef 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,mdef 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变量的见解,那将非常有帮助。
提前感谢


回答:

要在while循环中设置一个条件说“直到成本函数的最低值”,你首先需要知道那个值会是什么。你不会知道那个值,直到程序完成收敛。你无法事先知道它。

所以你让它运行一个任意次数,在你的例子中是1000次,并希望通过这么多次迭代,能够达到成本的最小值(或至少是一个合理值)。

编辑

这是我在运行代码10000次后的结果

OPTIMIZED:  4.247984440219189OPTIMIZED:  1.3959992655297515Error:  110.7863192974508

对于1000次 –

OPTIMIZED:  0.08893651993741346OPTIMIZED:  1.4777440851894448Error:  112.61481011613473

当代码运行1000次时,与运行100000次相比,误差更大。这是预期的结果。你运行的循环次数越多,参数就越接近最优值。运行100000次迭代,代码会不断调整b和m,直到达到110的误差。运行1000次,它会做同样的事情,但一旦达到1000次就会停止。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注