PRML 1.1 多项式曲线拟合
输入 训练集
- 输出拟合曲线
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 ) ,也就是我们最终想预测到对拟合曲线,但是现在根据输入【10个点的数据集】来进行拟合的。
1.1.2 多项式推导
我们需要用一个公式来拟合这些点,假设这是一个关于x的多项式
上面公式中M 表示多项式的阶数
当M = 1时,为简单的线性回归方程
当𝑀=0或𝑀=1时,拟合曲线如下图上部分的红线所示
我们肉眼可以看到,拟合效果是非常差的。我们怎么量化这种训练时的误差呢?故引出下面常见的一种度量方法。每个数据点的预测值y ( x n , ω ) )和真实值t n 之间的平方和,这个E ( ω ) 很明显越小越好
1.1.3 过拟合
解决过拟合的方法较多,如调节模型参数数量,让模型变得简单;加入正则项惩罚模型的复杂度,增加训练集的个数
1.1.4 正则化
我们给误差函数增加一个惩罚项。如下所示:
其中
统计学 : 收缩法(shrinkage)【xgboost也会用到此方法】
神经网络: 权值衰减(weight decay)