当前位置 博文首页 > 风信子的猫Redamancy的快乐星球: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
输出 拟合曲线
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个点的数据集】来进行拟合的。
我们需要用一个公式来拟合这些点,假设这是一个关于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=0∑M?ωj?xj
当𝑀=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=1∑N?[y(xn?,ω)?tn?]