如何使用Python曲線擬合
1、問題背景
在Python中,使用者想要使用曲線擬合來處理一組資料點。這些點通常看起來像這樣:
藍色曲線表示輸入的資料(在本例中為4個點),綠色曲線是使用np.polyfit和polyfit1d進行曲線擬合的結果。使用者希望得到的曲線擬合結果與藍色曲線非常相似,但在點1和點2處具有更平滑的梯度變化(這意味著使用者不要求擬合曲線透過這些點)。
2、解決方案
2.1 曲線擬合
使用者可以使用Python中的numpy和scipy庫來進行曲線擬合。以下程式碼片段展示了一種曲線擬合的方法:
import numpy as np
import scipy as sp
from scipy. interpolate import interp1d
x = np. array([ 0, 5, 10, 15, 20, 30, 40, 50])
y = np. array([ 0, 0, 0, 12, 40, 40, 40, 40])
coeffs = np. polyfit( x, y, deg = 4) # 你可以根據需要改變階數
poly = np. poly1d( coeffs)
yp = np. polyval( poly, x)
interpLength = 10
new_x = np. linspace( x. min(), x. max(), new_length)
new_y = sp. interpolate. interp1d( x, y, kind = 'cubic')( new_x)
plt. plot( x, y, '.', x, yp, '-', new_x, new_y, '--')
plt. show()
在上面的程式碼中,使用者可以使用np.polyfit()函式來擬合資料點,並使用np.poly1d()來生成擬合曲線。使用者還可以使用scipy.interpolate.interp1d()函式來進行插值,從而得到更平滑的曲線。
2.2 插值
如果使用者想要得到一條不透過所有資料點的擬合曲線,可以使用插值方法。插值方法可以生成一條平滑的曲線,並使曲線儘量接近資料點。以下程式碼片段展示了一種插值的方法:
import numpy as np
import scipy as sp
from scipy. interpolate import interp1d
x = np. array([ 0, 5, 10, 15, 20, 30, 40, 50])
y = np. array([ 0, 0, 0, 12, 40, 40, 40, 40])
interpLength = 10
new_x = np. linspace( x. min(), x. max(), new_length)
new_y = sp. interpolate. interp1d( x, y, kind = 'cubic')( new_x)
plt. plot( x, y, '.', new_x, new_y, '-')
plt. show()
在上面的程式碼中,使用者可以使用scipy.interpolate.interp1d()函式來進行插值,並使用np.linspace()函式來生成新的x值。使用者可以使用不同的插值方法,例如'linear'、'quadratic'和'cubic'等,來得到不同的插值效果。
2.3 指定函式型別
如果使用者知道資料點的分佈情況,可以使用指定的函式型別來進行曲線擬合。例如,如果資料點分佈成一條直線,可以使用線性函式來擬合;如果資料點分佈成一條拋物線,可以使用拋物線函式來擬合。以下程式碼片段展示瞭如何使用指定函式型別進行曲線擬合:
import numpy as np
import scipy as sp
from scipy. optimize import curve_fit
def linear_func( x, a, b):
return a * x + b
def parabolic_func( x, a, b, c):
return a * x ** 2 + b * x + c
x = np. array([ 0, 5, 10, 15, 20, 30, 40, 50])
y = np. array([ 0, 0, 0, 12, 40, 40, 40, 40])
# 使用線性函式進行擬合
popt, pcov = curve_fit( linear_func, x, y)
# 使用拋物線函式進行擬合
popt, pcov = curve_fit( parabolic_func, x, y)
# 繪製擬合曲線
plt. plot( x, y, '.', x, linear_func( x, * popt), '-', x, parabolic_func( x, * popt), '--')
plt. show()
在上面的程式碼中,使用者可以使用scipy.optimize.curve_fit()函式來進行曲線擬合。使用者需要指定要擬合的函式型別,以及要擬合的資料。curve_fit()函式會自動計算擬合引數,並返回擬合引數和擬合協方差矩陣。
在這個例子中,我們首先生成了一些帶有噪聲的示例資料。然後,我們使用
numpy.polyfit
函式對這些資料進行多項式擬合,
degree
變數指定了多項式的次數。最後,我們使用Matplotlib將原始資料和擬合曲線繪製在同一個圖中。
我們可以根據自己的需求調整多項式的次數(
degree
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3012289/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python擬合曲線Python
- 【Python】keras使用LSTM擬合曲線PythonKeras
- excel曲線擬合怎麼弄Excel
- .NET 白板書寫加速-曲線擬合預測
- [Open3d系列]--點雲曲線擬合3D
- R語言之視覺化①③散點圖+擬合曲線R語言視覺化
- 最小二乘法擬合曲線:4次函式函式
- 【python資料探勘課程】十四.Scipy呼叫curve_fit實現曲線擬合Python
- python來擬合Langmuir非線性方程PythonUI
- dwg解析-樣條曲線擬合點解析(中望CAD匯出)
- Java 使用 Apache commons-math3 線性擬合、非線性擬合例項(帶效果圖)JavaApache
- 自定義View合輯(6)-波浪(貝塞爾曲線)View
- 機器學習中的PR曲線和ROC曲線機器學習
- 如何理解並應用貝塞爾曲線
- 如何跨越 Kubernetes 學習曲線
- 如何使用Python建立AI虛擬助手PythonAI
- excel線性迴歸擬合線Trend函式是這樣來使用的Excel函式
- canvas進階——如何畫出平滑的曲線?Canvas
- 使用貝塞爾曲線裁圓優化tableView優化View
- 自定義View合輯(8)-跳躍的小球(貝塞爾曲線)View
- 曲線點抽稀演算法- Python 實現演算法Python
- 如何解決過度擬合
- three.js 曲線JS
- 【CSS】曲線陰影CSS
- 庫克曲線(轉載)
- 圓錐曲線14
- 圓錐曲線15
- 今日面試題分享:如何理解模型的過擬合與欠擬合,以及如何解決?面試題模型
- caffe的python介面繪製loss和accuracy曲線示例Python
- 用canvas繪製一個曲線動畫——深入理解貝塞爾曲線Canvas動畫
- 機器學習–過度擬合 欠擬合機器學習
- 如何使用學習曲線來診斷你的LSTM模型的行為?(附程式碼)模型
- 機器學習之學習曲線機器學習
- Error Curves——錯誤曲線Error
- Android 貝塞爾曲線Android
- Python科學計算——任意波形擬合Python
- 4擬合線性函式的k和b函式
- Flutter 實現平滑曲線折線圖Flutter