numpy 多项式拟合函数polyfit的使用

import numpy as np
def fit(x,y,m,w):
    if len(x)<=m:
        return False
    xishu = np.polyfit(x,y,m,w=w)
    p = np.poly1d(xishu) # 构造多项式
    yfit = p(x) # 拟合的y值
    yresid = y - yfit # 残差
    SSresid = sum(pow(yresid, 2)) # 残差平方和
    SStotal = len(y) * np.var(y) # 总体平均方差
    if SStotal==0:#水平线
        r2=1
    else:
        r2 = 1 - SSresid/SStotal # 拟合优度    
    return (xishu,r2,yfit)
if __name__=="__main__":
    x = np.arange(0,5,0.1)
    z = [2+3*x+4*x**2 for x in x]
    y = np.array([np.random.normal(z,3) for z in z])
    weight=[1 for one in x]
    print(fit(x,y,2,weight))

polyfit(x,y,m,w) 参数m为多项式的次数,w为权重。权重的含义是这个数据点的误差要乘以权重,低点给予高权重可以减少低点的误差,避免低点的相对误差过大。

自定义函数fit(x,y,m,w)的返回值 (xishu,r2,yfit)分别为系数、相关系数、拟合Y值。

过原点也可以通过权重实现。代码如下:

if must00:
    x=np.append(x,0)#.append(0)
    y=np.append(y,0)#y.append(0)
    w=np.append(w,100000000)#.append(10000)
fit_r=fit(x,y,m,w)
if fit_r:
    (xishu,r,y_fitted)=fit_r
else:
    #fit error
    xishu=[0,1,0]
    y_fitted=x 
    r=0

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值