【发布时间】: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,得到 b 和 m 的一些值。但是当我使用高于 1000 时,我得到的 b 和 m 的值不同。而使用 num_iteration 的循环,我们不能用while循环替换它吗,条件是直到,除非我们得到成本函数的最低值?所以,如果你们可以给我一些关于这个 num_iteration 变量的见解,这将非常有帮助。
提前致谢
【问题讨论】:
-
我认为您使用
for而不是while循环的原因是因为如果您的数据不是线性的,您可能无法在 while 循环中找到条件,然后您将进入一个无限循环。
标签: python machine-learning linear-regression gradient-descent