用Python實(shí)現(xiàn)插值算法
數(shù)模比賽中,常常需要對(duì)數(shù)據(jù)進(jìn)行處理和分析,但有時(shí)候數(shù)據(jù)不多,就需要一些方法“模擬產(chǎn)生”一些靠譜的值來滿足需求,這就是插值的作用。本文不再具體介紹每個(gè)插值算法的內(nèi)在原理,將直接通過調(diào)包實(shí)現(xiàn)。
下面,先上三件套,看一下原始數(shù)據(jù)的大致情況:
import numpy as np import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel('data.xlsx')
拉格朗日插值算法
原始數(shù)據(jù)我們采用sin(x)的形式,看一下原始數(shù)據(jù)點(diǎn):
import scipy from scipy.interpolate import lagrange x = np.linspace(0,10,6) #0~10等差插入11個(gè)數(shù),需要預(yù)測(cè)的值 y = np.sin(x) x_new = np.linspace(0,10,200) #用于繪制圖形 y_new = np.sin(x_new) plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b')
f1 = lagrange(x,y) plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f1(x_new),'g')
看一下擬合效果:
分段線性插值
f4 = scipy.interpolate.interp1d(x,y,kind='linear') plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f4(x_new),'g')
分段二次(三次)插值
f5 = scipy.interpolate.interp1d(x,y,kind='quadratic') #三次就是cubic plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f5(x_new),'g')
牛頓插值法:暫未找到相應(yīng)的庫
分段三次埃爾米特插值
f5 = scipy.interpolate.interp1d(x,y,kind='quadratic') #三次就是cubic plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f5(x_new),'g')
三次樣條插值
f3 = scipy.interpolate.CubicSpline(x,y) plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f3(x_new),'g')
接下來,讓我們看看一個(gè)具體實(shí)例的比較:
y = np.array(data)[:,1] x = np.linspace(2009,2018,10) x_new = np.array([2019,2020,2021]) f2 = scipy.interpolate.PchipInterpolator(x,y) f3 = scipy.interpolate.CubicSpline(x,y) #coding:utf-8 plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus']=False #用來正常顯示負(fù)號(hào) plt.plot(x,y,color='black',marker='o',label='樣本點(diǎn)') plt.plot(x_new,f2(x_new),'b-',marker='x',label='分段三次埃米爾特') plt.plot(x_new,f3(x_new),'r-',marker='x',label='三次樣條插值') plt.xticks(range(2009,2022,1)) #調(diào)整x軸間距 plt.legend() plt.show()
Tips:①最常用的就是埃爾米特三次插值、三次樣條插值
②拉格朗日插值雖然在訓(xùn)練集上表現(xiàn)良好,但是在測(cè)試集上著實(shí)難堪,尤其擬合高階函數(shù)時(shí),千萬不要輕易用此預(yù)測(cè)
到此這篇關(guān)于用Python實(shí)現(xiàn)插值算法的文章就介紹到這了,更多相關(guān)Python插值算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
總結(jié)分析Python的5個(gè)硬核函數(shù)
今天看到一篇很好的 Python 博文,結(jié)合自己的經(jīng)驗(yàn)總結(jié),分享給大家一篇關(guān)于eval, exec, compile, locals, globals這些函數(shù)的文章2021-11-11python 爬取騰訊視頻評(píng)論的實(shí)現(xiàn)步驟
這篇文章主要介紹了python 爬取騰訊視頻評(píng)論的實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用python爬蟲,感興趣的朋友可以了解下2021-02-02Python關(guān)于excel和shp的使用在matplotlib
今天小編就為大家分享一篇關(guān)于Python關(guān)于excel和shp的使用在matplotlib,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01centos6.8安裝python3.7無法import _ssl的解決方法
這篇文章主要介紹了centos6.8安裝python3.7無法import _ssl的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09Python+Turtle繪制可愛的多啦A夢(mèng)的示例代碼
這篇文章主要介紹了如何利用python中的Turtle模塊繪制一個(gè)童年記憶的卡通人物哆啦A夢(mèng),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-03-03