最小二乘法拟合曲线

最小二乘法:

最优性质:在所有无偏线性估计中,最小二乘法的方差最小。

给定一组数据,得到拟合函数,拟合函数所对应的函数值与原数据值之间的误差(残差)

在这里插入图片描述
范数(残差平方和)最小时,相似度最高,拟合更好。

拟合函数
在这里插入图片描述
目的:
在这里插入图片描述
得到一组参数
在这里插入图片描述

举例:用多项式去拟合正弦函数+正态分布的噪音(数据点)

scipy提供的最小二乘法函数:scipy.optimize包里面的leastsq函数

matplotlib.pyplot包里面的plot函数绘制折线图

%matplotlib inline是一个魔法函数(Magic Functions):当输入plt.plot(x,y_1)后,不必再输入 plt.show(),图像将自动显示出来

import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
%matplotlib inline


#正弦函数
def real_func(x):
    return np.sin(2*np.pi*x)

#多项式
def fit_func(p,x):
    f=np.polyld(p)   #np.polyld([1 2 3])
    return f(x)

#残差
def residuals_func(p,x,y):
    ret=fit_func(p,x)-y
    return ret

#正态分布噪音
    x=np.linspace(0,1,10)  #10个点
    x_points=np.linspace(0,1,100)
    y_=real_func(x)
    y=[np.random.normal(0,0.1)+y1 for y1 in y_] #正弦函数值加上正态分布噪音的目标函数值

def fitting(m=0): #m为多项式次数

    p_init=np.random.rand(m+1)  #随机初始化多项式参数                
    p_lsp=leastsq(residuals_func,p_init,args=(x,y))
    print('Fitting Parameters:'p_lsp[0])

    plt.plot(x_points,real_func(x_points),label='real') #画正弦函数曲线
    plt.plot(x_points,fit_func(p_lsp[0],x_points),label='fitted cruve')   #最优的多项式参数p_lsp[0]
    plt.plot(x,y,'bo',label='noise')
    plt.legend()
    return p_lsp   #将p_lsp的值返回给函数fitting(m=0)

用法:直接调用函数fitting(M= )即可,M为多项式次数
在这里插入图片描述

过拟合时,引入正则化项(regularizer),降低过拟合

在这里插入图片描述
正则化可以为参数向量的L2范数或者L1范数。

regularization=0.0001

#正则化
def residuals_func_regularization(p,x,y):
    ret=fit_func(p,x)-y
    ret=np.append(ret,np.sqrt(0.5*regularization*np.square(p)))  
    return ret

#最小二乘法+正则化=求最优
p_init=np.random.rand(9+1)
p_lsp_regularization=leastsq(residuals_func_regularization,p_init,args=(x,y))

plt.plot(x_points,real_func(x_points),label='real')
plt.plot(x_points,fit_func(fitting(M=9)[0],x_points),label='fitted cruve')   #给定参数fitting(M=9)[0]
plt.plot(
    x_points,
    fit_func(p_lsq_regularization[0],x_points),
    label='regularization')
plt.plot(x,y,'bo',label='noise')
plt.legend()

说明:
fitting(M=9)[0]或者p_lsq[0]表示的是参数数组
在这里插入图片描述
fitting(M=9)或者p_lsq由参数数组和另外一个参数组成。
在这里插入图片描述
用法:直接加入正则化项,对原先的参数多项式拟合曲线进行正则化后的最小二乘法求优。输入正则化参数regularization= 即可
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值