当前位置 博文首页 > 风信子的猫Redamancy的快乐星球:PRML 1.1 多项式曲线拟合

    风信子的猫Redamancy的快乐星球:PRML 1.1 多项式曲线拟合

    作者:[db:作者] 时间:2021-08-22 12:04

    PRML 1.1 多项式曲线拟合


    • 输入 训练集

      x ≡ ( x 1 , . . . , x N ) T x\equiv (x_1,...,x_N)^T x(x1?,...,xN?)T
      t ≡ ( t 1 , . . . , t N ) T t\equiv (t_1,...,t_N)^T t(t1?,...,tN?)T

    • 输出 拟合曲线

    1.1.1 代码

    import numpy as np
    import matplotlib.pyplot as plt
    
    np.random.seed(1)
    X = np.linspace(0, 1, 10)
    y = np.sin(2*np.pi*X) + np.random.normal(0.1, 0.1, 10)  # 加入噪声
    X_true = np.linspace(0, 1, 256, endpoint=True)
    y_true = np.sin(2*np.pi*X_true)
    
    plt.scatter(X, y, c="b", alpha=0.6)
    plt.plot(X_true, y_true, c="g")
    plt.show()
    

    在这里插入图片描述

    可以看到绿色的是潜在的待发现的函数 sin ? ( 2 π x ) \sin(2\pi x) sin(2πx),也就是我们最终想预测到对拟合曲线,但是现在根据输入【10个点的数据集】来进行拟合的。

    1.1.2 多项式推导

    我们需要用一个公式来拟合这些点,假设这是一个关于x的多项式

    y ( x , ω ) = ω 0 + ω 1 x + ω 2 x 2 + . . . + ω M x M = ∑ j = 0 M ω j x j y(x,\omega)=\omega_0+\omega_1x+\omega_2x^2+...+\omega_Mx^M=\sum_{j=0}^{M}{\omega_jx^j} y(x,ω)=ω0?+ω1?x+ω2?x2+...+ωM?xM=j=0M?ωj?xj

    • 上面公式中 M M M表示多项式的阶数
    • M = 1 M=1 M=1时,为简单的线性回归方程

    当𝑀=0M=0或𝑀=1M=1时,拟合曲线如下图上部分的红线所示

    我们肉眼可以看到,拟合效果是非常差的。我们怎么量化这种训练时的误差呢?故引出下面常见的一种度量方法。
    每个数据点的预测值 y ( x n , ω ) y(x_n,\omega) y(xn?,ω)和真实值 t n t_n tn?之间的平方和,这个 E ( ω ) E(\omega) E(ω)很明显越小越好
    E ( ω ) = 1 2 ∑ n = 1 N [ y ( x n , ω ) ? t n ] 2 E(\omega)=\frac{1}{2}\sum_{n=1}^{N}{[y(x_n,\omega)-t_n]^2} E(ω)=21?n=1N?[y(xn?,ω)?tn?]