linear_regression.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import numpy as np
  2. # data = []
  3. # for i in range(100):
  4. # x = np.random.uniform(3., 12.)
  5. # # mean=0, std=0.1
  6. # eps = np.random.normal(0., 0.1)
  7. # y = 1.477 * x + 0.089 + eps
  8. # data.append([x, y])
  9. # data = np.array(data)
  10. # print(data.shape, data)
  11. # y = wx + b
  12. def compute_error_for_line_given_points(b, w, points):
  13. totalError = 0
  14. for i in range(0, len(points)):
  15. x = points[i, 0]
  16. y = points[i, 1]
  17. # computer mean-squared-error
  18. totalError += (y - (w * x + b)) ** 2
  19. # average loss for each point
  20. return totalError / float(len(points))
  21. def step_gradient(b_current, w_current, points, learningRate):
  22. b_gradient = 0
  23. w_gradient = 0
  24. N = float(len(points))
  25. for i in range(0, len(points)):
  26. x = points[i, 0]
  27. y = points[i, 1]
  28. # grad_b = 2(wx+b-y)
  29. b_gradient += (2/N) * ((w_current * x + b_current) - y)
  30. # grad_w = 2(wx+b-y)*x
  31. w_gradient += (2/N) * x * ((w_current * x + b_current) - y)
  32. # update w'
  33. new_b = b_current - (learningRate * b_gradient)
  34. new_w = w_current - (learningRate * w_gradient)
  35. return [new_b, new_w]
  36. def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):
  37. b = starting_b
  38. w = starting_w
  39. # update for several times
  40. for i in range(num_iterations):
  41. b, w = step_gradient(b, w, np.array(points), learning_rate)
  42. return [b, w]
  43. def run():
  44. points = np.genfromtxt("data.csv", delimiter=",")
  45. learning_rate = 0.0001
  46. initial_b = 0 # initial y-intercept guess
  47. initial_w = 0 # initial slope guess
  48. num_iterations = 1000
  49. print("Starting gradient descent at b = {0}, w = {1}, error = {2}"
  50. .format(initial_b, initial_w,
  51. compute_error_for_line_given_points(initial_b, initial_w, points))
  52. )
  53. print("Running...")
  54. [b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)
  55. print("After {0} iterations b = {1}, w = {2}, error = {3}".
  56. format(num_iterations, b, w,
  57. compute_error_for_line_given_points(b, w, points))
  58. )
  59. if __name__ == '__main__':
  60. run()