当前位置:   article > 正文

吴恩达机器学习2022-Jupyter-机器学习实例_吴恩达机器学习实验

吴恩达机器学习实验

1 可选实验: 特征工程和多项式回归

1.1 目标

在这个实验室里:

  • 探索特征工程和多项式回归,它可以让你使用线性回归机制来适应非常复杂,甚至非常非线性的函数。

1.2 工具

您将利用在以前的实验中开发的函数以及matplotlib和NumPy。

2 特征工程与多项式回归综述

线性回归提供了一种模型方法,公式形式为:

如果您的特性/数据是非线性的或者是特性的组合,该怎么办?例如,住房价格往往不与居住面积成线性关系,而是对小型或大型房屋造成上图所示曲线的惩罚。我们如何利用线性回归机制来适应这条曲线?回想一下,我们所拥有的“机制”是能够修改(1)中的参数 w,b,使方程“适合”训练数据。然而,(1)中 w,b 的任何调整都不会实现对非线性曲线的拟合。

2.1 多项式特征

上面我们考虑了一个数据是非线性的场景。让我们试着用我们目前所知道的来拟合一条非线性曲线。我们从一个简单的二次型开始: y = 1 + x^2。

  1. # create target data
  2. x = np.arange(0, 20, 1)
  3. y = 1 + x**2
  4. X = x.reshape(-1, 1)
  5. model_w,model_b = run_gradient_descent_feng(X,y,iterations=1000, alpha = 1e-2)
  6. plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("no feature engineering")
  7. plt.plot(x,X@model_w + model_b, label="Predicted Value"); plt.xlabel("X"); plt.ylabel("y"); plt.legend(); plt.show()

输出:

Iteration         0, Cost: 1.65756e+03
Iteration       100, Cost: 6.94549e+02
Iteration       200, Cost: 5.88475e+02
Iteration       300, Cost: 5.26414e+02
Iteration       400, Cost: 4.90103e+02
Iteration       500, Cost: 4.68858e+02
Iteration       600, Cost: 4.56428e+02
Iteration       700, Cost: 4.49155e+02
Iteration       800, Cost: 4.44900e+02
Iteration       900, Cost: 4.42411e+02
w,b found by gradient descent: w: [18.7], b: -52.0834

 不出所料,不太合适。我们需要的是类似 y = w0x0^2 + b 或者多项式特征的东西。为此,您可以修改输入数据来设计所需的特性。如果将原始数据与平方 x 值的版本交换,则可以实现 y = w0·x0^2 + b。以 X * * 2交换 X 如下:

  1. # create target data
  2. x = np.arange(0, 20, 1)
  3. y = 1 + x**2
  4. # Engineer features
  5. X = x**2 #<-- added engineered feature
  6. X = X.reshape(-1, 1) #X should be a 2-D Matrix
  7. model_w,model_b = run_gradient_descent_feng(X, y, iterations=10000, alpha = 1e-5)
  8. plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("Added x**2 feature")
  9. plt.plot(x, np.dot(X,model_w) + model_b, label="Predicted Value"); plt.xlabel("x"); plt.ylabel("y"); plt.legend(); plt.show()

输出:

Iteration         0, Cost: 7.32922e+03
Iteration      1000, Cost: 2.24844e-01
Iteration      2000, Cost: 2.22795e-01
Iteration      3000, Cost: 2.20764e-01
Iteration      4000, Cost: 2.18752e-01
Iteration      5000, Cost: 2.16758e-01
Iteration      6000, Cost: 2.14782e-01
Iteration      7000, Cost: 2.12824e-01
Iteration      8000, Cost: 2.10884e-01
Iteration      9000, Cost: 2.08962e-01
w,b found by gradient descent: w: [1.], b: 0.0490

太好了!近乎完美。注意打印出来的 w 和 b 的值就在图表 w,b 的梯度下降法 w: [1. ]的右上方,b: 0.0490.梯度下降法修改了 w,b 的初始值为(1.0.0.049) ,或者 y = 1的模型为 * x20.0.049,非常接近我们的目标 y = 1 * x20 + 1。如果你运行的时间更长,可能会更匹配。

2.1.1 选择特征

上面,我们知道需要一个 x^2项。需要那些特征可能并不总是显而易见的。人们可以添加各种潜在的特性,以试图找到最有用的特性。例如,如果我们尝试: y = w0x0 + w1x1^2 + w2x3^2 + b。

  1. # create target data
  2. x = np.arange(0, 20, 1)
  3. y = x**2
  4. # engineer features .
  5. X = np.c_[x, x**2, x**3] #<-- added engineered feature
  6. model_w,model_b = run_gradient_descent_feng(X, y, iterations=10000, alpha=1e-7)
  7. plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("x, x**2, x**3 features")
  8. plt.plot(x, X@model_w + model_b, label="Predicted Value"); plt.xlabel("x"); plt.ylabel("y"); plt.legend(); plt.show()

输出:

Iteration         0, Cost: 1.14029e+03
Iteration      1000, Cost: 3.28539e+02
Iteration      2000, Cost: 2.80443e+02
Iteration      3000, Cost: 2.39389e+02
Iteration      4000, Cost: 2.04344e+02
Iteration      5000, Cost: 1.74430e+02
Iteration      6000, Cost: 1.48896e+02
Iteration      7000, Cost: 1.27100e+02
Iteration      8000, Cost: 1.08495e+02
Iteration      9000, Cost: 9.26132e+01
w,b found by gradient descent: w: [0.08 0.54 0.03], b: 0.0106

注意 w,[0.080.540.03]和 b 的值是0.0106。这意味着拟合/训练后的模型是: 

0.08声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】

推荐阅读
相关标签