无法理解线性回归(机器学习)中的迭代次数
Cant understand the number of iteration in linear regression (Machine Learning)
这几天我一直在努力研究机器学习。我正在网上看视频和文章。
在 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 变量的见解,那将非常有帮助。
提前致谢
要在 while 循环中设置条件 'go till the lowest value of the cost function',您首先必须知道该值是什么。在程序完成收敛之前,您不会知道那会是什么。你不可能事先知道它。
所以你改为 运行 任意数字,在你的情况下,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 就会停止。
这几天我一直在努力研究机器学习。我正在网上看视频和文章。
在 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 变量的见解,那将非常有帮助。
提前致谢
要在 while 循环中设置条件 'go till the lowest value of the cost function',您首先必须知道该值是什么。在程序完成收敛之前,您不会知道那会是什么。你不可能事先知道它。
所以你改为 运行 任意数字,在你的情况下,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 就会停止。