李宏毅机器学习课程笔记Lesson1-Regression - Case Study

╰半橙微兮° 2021-09-26 18:14 391阅读 0赞

machine learning 有三个步骤:
step 1 :选择 a set of function, 即选择一个 model
这里写图片描述
step 2 :评价goodness of function
这里写图片描述
step 3 :选出 best function
这里写图片描述
采用梯度下降得到最佳答案
gradient descent 的步骤是:
先选择参数的初始值,再向损失函数对参数的负梯度方向迭代更新,learning rate控制步子大小、学习速度。梯度方向是损失函数等高线的法线方向。
这里写图片描述
基于以上步骤,测试y=w*x+b的代码实现

  1. import np
  2. import matplotlib.pyplot as plt # plt
  3. x_data = [1,2,3,4,5,6]
  4. y_data = [3,5,7,9,11,13]
  5. # yadata = b + w*xdata
  6. b = -1 # intial b
  7. w = 1 # intial w
  8. lr = 0.000001 # learning rate
  9. iteration = 100000000#iterate times
  10. for i in range(iteration):
  11. b_grad = 0.0
  12. w_grad = 0.0
  13. for n in range(len(x_data)):
  14. b_grad = b_grad - 2.0*(y_data[n] - (b + w*x_data[n]))*1.0
  15. w_grad = w_grad - 2.0*(y_data[n] - (b + w*x_data[n]))*x_data[n]
  16. # update parameters
  17. b = b - lr*b_grad
  18. w = w - lr*w_grad
  19. b = round(b,1)
  20. w = round(w,1)
  21. print(b,w)
  22. plt.scatter(x_data, y_data, s=200, label = '$test1$', c = 'blue', marker='.', alpha = None, edgecolors= 'blue' )
  23. x = np.arange(0, 20, 1)
  24. plt.plot(x, b+w*x,color='red')
  25. plt.legend()
  26. plt.show()

实验结果:
这里写图片描述

测试y=w1*x^2+w2*x+b的代码实现

  1. import np
  2. import matplotlib.pyplot as plt # plt
  3. x_data = []
  4. y_data = []
  5. for i in range(10):
  6. x_data.append(i)
  7. y_data.append(2*i*i+i+1)
  8. # y= w1*x^2 + w2*x+b
  9. w1 = 1#intial w1
  10. w2 = 0.5#intial w2
  11. b = 0.5#intial b
  12. lr = 0.00000001# learning rate
  13. iteration = 10000000#iterate times
  14. for i in range(iteration):
  15. w1_grad = 0.0
  16. w2_grad = 0.0
  17. b_grad = 0.0
  18. for n in range(len(x_data)):
  19. t = 2*(y_data[n]-(w1*x_data[n]*x_data[n]+w2*x_data[n]+b))
  20. w1_grad = w1_grad + t*(-x_data[n]*x_data[n])
  21. w2_grad = w2_grad + t*(-x_data[n])
  22. b_grad = b_grad + t*(-1)
  23. w1 = w1 - lr*w1_grad
  24. w2 = w2 - lr*w2_grad
  25. b = b - lr*b_grad
  26. w1 = round(w1,1)
  27. w2 = round(w2,1)
  28. b = round(b,1)
  29. print(w1,w2,b)
  30. x = np.arange(0, 20, 1)
  31. v = 0.0
  32. for n in range(len(x_data)):
  33. v = v + (y_data[n] - (w1*x_data[n]*x_data[n]+w2*x_data[n]+b))**2
  34. v = v/(len(x_data))
  35. v = round(v,3)
  36. plt.plot(x, w1*x*x+w2*x+1,color='red')
  37. l = 'w1 = %s,w2 = %s, b = %s ,variance=%s' % (w1,w2,b,v)
  38. plt.scatter(x_data, y_data, s=200, label = '$test2$', c = 'blue', marker='.', alpha = None, edgecolors= 'blue' )
  39. plt.xlabel(l)
  40. plt.legend()
  41. plt.show()

实验结果:设置的w1=2,w2=1,b=1,实验结果有误差,可通过调整learning rate 和迭代次数、增加测试数据等调试
这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,391人围观)

还没有评论,来说两句吧...

相关阅读