首页 > 其他 > 详细

第十三天学习进度--曲线函数拟合(可以做数据预测的函数)

时间:2020-07-23 09:12:29      阅读:95      评论:0      收藏:0      [点我收藏+]

因为之前学习的神经网络的算法大多都是拟合非线性函数的,所以在某些具有连续性的预测方面,神经网络算法的函数拟合并没有简单函数好用。

今天学习一下关于曲线函数的拟合方式。

首先给定一组数据来对数据进行拟合,例如随便想一个函数 y=2x^3+x^2+1

接下来分别取x=[1,2,3,4,5]

对应的y就为y=[4,21,64,145,276]

上面的数据x和y就为基础的数据,然后我们需要通过x,y这些训练数据,得到一个f(x)来得到具体的函数转换器y=2x^3+x^2+1

所以现在我们吧x,y作为训练数据代入 则有以下的过程

import numpy as np

#自动型最大幂次,减小计算量
maxn=20

#自动多项式函数拟合(计算量相对较大)
def auto_ax_bfit(x,y):
    x=np.array(x)
    y=np.array(y)
    n=maxn if len(x)-1>maxn else len(x)-1
    fit_coef=np.polyfit(x,y,n)
    alist=[]
    g_start=False
    minnum=1e-14
    for one in fit_coef:
        if(not g_start):
            if(abs(one)>minnum):
                g_start=True
                alist.append(one)
        else:
            alist.append(one)
    alist=[round(one,9) for one in list(alist)]
    return fit_coef[-len(alist):],alist

#靠猜最高幂次多项式拟合,n是最高幂次,这个需要靠猜n的大小,n越大计算量也就越大,同时也越准确(泰勒展开公式,最高幂次越大越逼近准确函数),同时n需要小于len(x),当太大时直接取正整数型,想方便时也直接用自动型就好了
def ax_bfit(x,y,n):
    x=np.array(x)
    y=np.array(y)
    fit_coef=np.polyfit(x,y,n)
    alist=[round(one,9) for one in list(np.polyfit(x,y,n))]
    return fit_coef[-len(alist):],alist

#函数构建器
def func_general(fit_coef,predict_xlist):
    calculate_y = [round(one, 9) for one in list(np.polyval(fit_coef, predict_xlist))]
    return calculate_y

 

代入对应数据,并预测当x=[1,3,6]时,f(x)对应的值是多少(根据事先所想的函数,正确的值应该是[4,64,469]),下面我们代入数据看看结果

#数据列表
x=[1,2,3,4,5]
y=[4,21,64,145,276]

#需要预测的x值
calculate_x=[1,3,6]
#期待值[4,64,469]

# #拟合函数最高次幂(这部分可以靠猜,当为3时是准确值,计算量相对较小型)
# n=3
# fit_coef,alist=ax_bfit(x,y,n)

#自动型,计算量相对较大
fit_coef,alist=auto_ax_bfit(x,y)

print("系数列表:",alist)
print("calculate_x列表对应的预测值:",func_general(fit_coef,calculate_x))

最终结果如下:

 技术分享图片

可以看到预测出来的函数为: 与2x^3+x^2+1一致

预测值和期待值[4,64,469]一致

 

第十三天学习进度--曲线函数拟合(可以做数据预测的函数)

原文:https://www.cnblogs.com/halone/p/13363567.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!