李航《统计学习方法》——过拟合

  当假设空间含有不同复杂度(例如,不同的参数个数)的模型时,就要面临模型选择(model selection)的问题.我们希望选择或学习一个合适的模型.如果在假设空间中存在“真”模型,那么所选择的模型应该逼近真模型.具体地,所选择的模型要与真模型的参数个数相同,所选择的模型的参数向量与真模型的参数向量相近.
  如果一味追求提高对训练数据的预测能力,所选模型的复杂度则往往会比真模型更高.这种现象称为过拟合(over- fiting).过拟合是指学习时选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象,可以说模型选择旨在避免过拟合并提高模型的预测能力.
用最小二乘法拟合曲线
我们用目标函数𝑦=𝑠𝑖𝑛2𝜋𝑥, 加上一个正态分布的噪音干扰,用多项式去拟合【例1.1 11页】

import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
%matplotlib inline
# 十个点
x = np.linspace(0, 1, 10)
x_points = np.linspace(0, 1, 1000)
# 加上正态分布噪音的目标函数的值
y_ = real_func(x)
y = [np.random.normal(0, 0.1) + y1 for y1 in y_]
#numpy.random.normal(loc=0.0, scale=1.0, size=None)  
#loc:float  概率分布的均值,对应着整个分布的中心center
#  scale:float  概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高

def fitting(M=0):
    """
    M    为 多项式的次数
    """
    # 随机初始化多项式参数
    p_init = np.random.rand(M + 1)
    # 最小二乘法
    p_lsq = leastsq(residuals_func, p_init, args=(x, y))
    print('Fitting Parameters:', p_lsq[0])

    # 可视化
    plt.plot(x_points, real_func(x_points), label='real')
    plt.plot(x_points, fit_func(p_lsq[0], x_points), label='fitted curve')
    plt.plot(x, y, 'bo', label='noise')
    plt.legend()
    return p_lsq
# M=0
p_lsq_0 = fitting(M=0)

直线

# M=1
p_lsq_1 = fitting(M=1)

在这里插入图片描述

# M=3
p_lsq_3 = fitting(M=3)

在这里插入图片描述

# M=9
p_lsq_9 = fitting(M=9)

在这里插入图片描述当M=9时,多项式曲线通过了每个数据点,但是造成了过拟合。M=3是最好的选择。
代码来自链接
https://github.com/wzyonggege/statistical-learning-method/blob/master/LeastSquaresMethod/least_sqaure_method.ipynb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值