【李宏毅机器学习】1. 回归

  • 输出是标量

  • 应用

    • 股市预测
    • 自动驾驶
    • 推荐系统
  • 案例学习:预测宝可梦的CP值

    • Step1: Model

      • Linear Model: \(y=b+\Sigma w_i x_i\)
      • 暂时只考虑一个因素:进化前的CP值\(x_{cp}\):\(y=b+w\cdot x_{cp}\)
    • Step 2: Goodness of function

      • 给定10个数据的训练集\((x^i, \widehat{y}^i)\)
      • 定义Loss Function为偏差的平方和:\(L(f)=\Sigma_{n=1}^{10} (\widehat{y}^n-f(x_{cp}^n))^2\)
    • Step3: Best Function

      • 寻找一个函数\(f\)(此处是两个参数\(w\)和\(b\)),使Loss Function最小
      • 梯度下降 Gradient Descent
        • 对于只有一个参数\(w\)的模型
          • (随机)选取一个初始值\(w^0\)
          • 计算\(w\)对\(L\)在\(w_i\)处的微分\(\frac{dL}{dw}|_{w=w^0}\)
            • \(<0\):增加w
            • \(>0\):减小w
            • 使Loss Function减小
          • \(w^1=w^0-\eta \frac{dL}{dw}|_{w=w^0}\)
            • \(\eta\)被称为学习率 Learning Rate
          • 多次迭代直到达到极小值
            • 局部极小 Local minima
            • 全局极小 Global minima
        • 对于有多个参数的模型,将微分改为偏微分,分别更新每个参数,以两个参数\(w\)和\(b\)为例:
          • (随机)选取初始值\(w^0\)和\(b^0\)
          • 更新\(w\):\(w_1=w_0-\eta \frac{\partial L}{\partial w}|_{w=w^0,b=b^0}\)
          • 更新\(b\):\(b_1=b_0-\eta \frac{\partial L}{\partial b}|_{w=w^0,b=b^0}\)
          • 多次迭代直到最优解
        • 存在的问题
          • Plateau
            • \(\frac{\partial L}{\partial w}\approx 0\)
            • 收敛很慢
          • Saddle point
            • \(\frac{\partial L}{\partial w}= 0\)
            • 停止在拐点,不是正确的结果
          • Local minima
            • \(\frac{\partial L}{\partial w}= 0\)
            • 局部极小,不是全局最优解
    • 我们真正关心的是模型在测试集上的表现,而不是训练集

    • 选择不同复杂程度的模型

      • \(y=b+w\cdot x_{cp}\)

      • \(y=b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2\)

      • \(y=b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2+w_3\cdot (x_{cp})^3\)

      • \(y=b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2+w_3\cdot (x_{cp})^3+w_4\cdot (x_{cp})^4\)

      • \(y=b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2+w_3\cdot (x_{cp})^3+w_4\cdot (x_{cp})^4+w_5\cdot (x_{cp})^5\)

      • 模型编号 训练集误差 测试集误差
        1 31.9 35.0
        2 15.4 18.4
        3 15.3 18.1
        4 14.9 28.2
        5 12.8 232.1
      • 更复杂的模型往往在训练集上的误差更小

      • 过于复杂的模型在训练集上的误差最小,但在测试集上的表现不如更简单的模型,这就是过拟合 Overfitting

      • 我们应该选择合适复杂程度的模型

    • 获取更多测试数据,会发现:

      • 对于相同的\(x_{cp}\),会有不同的\(y\)
      • 模型不完善,还有其他因素影响\(y\) (hidden factors)
      • 根据数据分析可知,宝可梦的种类\(x_S\)也会影响进化后的CP值\(y\)
      • 对于每个种类都定义一个模型\(y=b_i+w_i\cdot x_{cp}\)
      • 整合成一个线性模型\(y=\Sigma b_i\cdot \delta _i(x_S)+\Sigma w_i\cdot \delta _i(x_S)\cdot x_{cp}\)
      • 收集更多数据,分析是否还存在其他hidden factor
      • 结合之前的经验,选择不同复杂程度的模型
    • Overfitting的另一种解决方法:正则化 Regularization

      • 在Loss Function后面添加一项\(\lambda \Sigma(w_i)^2\)
      • 使得到的曲线更平滑(\(w_i\)倾向于更小)
      • 我们认为更平滑的模型更有可能是正确的(大部分情况是如此)
      • 无需对常数项bias正则化,因为bias不影响模型的平滑程度
      • \(\lambda\)越大,模型越平滑,训练集误差也越大。因为最后一项越大,前一项的比重就越小,更少考虑训练误差。
      • 选择合适的\(\lambda\)能够得到最小的测试误差。与过拟合的情况类似,过于平滑的模型会带来更大的测试误差。
上一篇:linux 中awk命令实现统计频数


下一篇:awk之getline函数与next语句