用python進(jìn)行線性/非線性擬合的三種方法
1. 簡(jiǎn)單線性回歸
使用回歸分析繪制擬合曲線是一種常見的方法,簡(jiǎn)單線性回歸就是其中的一種。簡(jiǎn)單線性回歸可以通過最小二乘法來計(jì)算回歸系數(shù)。以下是一個(gè)使用簡(jiǎn)單線性回歸來擬合數(shù)據(jù)的代碼示例:
import numpy as np import matplotlib.pyplot as plt x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.array([2.5, 4.5, 4.8, 5.5, 6.0, 7.0, 7.8, 8.0, 9.0, 9.5]) # 計(jì)算回歸系數(shù) slope, intercept = np.polyfit(x, y, 1) # 繪制擬合曲線 plt.scatter(x, y) plt.plot(x, slope * x + intercept, color='red') plt.show()
在該代碼中,np.polyfit函數(shù)可以用來計(jì)算簡(jiǎn)單線性回歸的回歸系數(shù)。plot函數(shù)用來繪制擬合曲線,scatter函數(shù)繪制原始數(shù)據(jù)點(diǎn)。
2. 多項(xiàng)式回歸
使用多項(xiàng)式回歸是一種常用方法,它可以用來擬合更加復(fù)雜的數(shù)據(jù)集。以下是一個(gè)使用多項(xiàng)式回歸來擬合數(shù)據(jù)的代碼示例:
import numpy as np import matplotlib.pyplot as plt x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.array([2.5, 4.5, 4.8, 5.5, 6.0, 7.0, 7.8, 8.0, 9.0, 9.5]) # 計(jì)算多項(xiàng)式回歸系數(shù) coefs = np.polyfit(x, y, 3) # 使用np.poly1d函數(shù)來生成一個(gè)多項(xiàng)式擬合對(duì)象 poly = np.poly1d(coefs) # 生成新的橫坐標(biāo),使得擬合曲線更加平滑 new_x = np.linspace(min(x), max(x), 1000) # 繪制擬合曲線 plt.scatter(x, y) plt.plot(new_x, poly(new_x), color='red') plt.show()
與簡(jiǎn)單線性回歸不同,多項(xiàng)式回歸可以擬合更加復(fù)雜的數(shù)據(jù)集。在該代碼中,np.polyfit函數(shù)計(jì)算多項(xiàng)式回歸系數(shù),np.poly1d函數(shù)生成一個(gè)多項(xiàng)式擬合對(duì)象。plot函數(shù)用來繪制擬合曲線,scatter函數(shù)繪制原始數(shù)據(jù)點(diǎn)。
3. 非線性回歸
使用非線性回歸是一種更加復(fù)雜的擬合方法,在實(shí)際應(yīng)用中可以用來擬合更加復(fù)雜的非線性數(shù)據(jù)。以下是一個(gè)使用非線性回歸來擬合數(shù)據(jù)的代碼示例:
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit def func(x, a, b, c): return a * np.exp(-b * x) + c # 生成模擬數(shù)據(jù) x_data = np.linspace(0, 4, 50) y_data = func(x_data, 2.5, 1.3, 0.5) + 0.2 * np.random.normal(size=len(x_data)) # 使用curve_fit函數(shù)來擬合非線性數(shù)據(jù) popt, pcov = curve_fit(func, x_data, y_data) # 畫出原始數(shù)據(jù)和擬合曲線 plt.scatter(x_data, y_data, label="Data") plt.plot(x_data, func(x_data, *popt), color='red', label="Fitted curve") plt.legend() plt.show()
在該代碼中,使用了Scipy庫(kù)中的curve_fit函數(shù)來擬合非線性數(shù)據(jù)。curve_fit函數(shù)中第一個(gè)參數(shù)是非線性函數(shù),第二個(gè)參數(shù)是擬合數(shù)據(jù)的橫坐標(biāo),第三個(gè)參數(shù)是擬合數(shù)據(jù)的縱坐標(biāo)。
總結(jié)
以上是Python中的三種常用擬合曲線方法。簡(jiǎn)單線性回歸可以擬合線性關(guān)系的數(shù)據(jù),多項(xiàng)式回歸可以擬合更加復(fù)雜的數(shù)據(jù),而非線性回歸則可以用來擬合非線性數(shù)據(jù)。我們可以根據(jù)實(shí)際需要選擇不同的方法來擬合數(shù)據(jù)。
相關(guān)文章
使用python實(shí)現(xiàn)將視頻中的音頻分離出來
這篇文章主要介紹了使用python實(shí)現(xiàn)將視頻中的音頻分離出來,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11python利用paramiko連接遠(yuǎn)程服務(wù)器執(zhí)行命令的方法
下面小編就為大家?guī)硪黄猵ython利用paramiko連接遠(yuǎn)程服務(wù)器執(zhí)行命令的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10用Python?Tkinter庫(kù)GUI編程創(chuàng)建圖形用戶界面
這篇文章主要為大家介紹了用Python?Tkinter庫(kù)GUI編程創(chuàng)建圖形用戶界面,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08python數(shù)據(jù)可視化matplotlib繪制折線圖示例
這篇文章主要為大家介紹了python數(shù)據(jù)可視化matplotlib繪制折線圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python實(shí)現(xiàn)騰訊滑塊驗(yàn)證碼識(shí)別
這篇文章主要介紹了python如何實(shí)現(xiàn)騰訊滑塊驗(yàn)證碼識(shí)別,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04深入了解python的tkinter實(shí)現(xiàn)簡(jiǎn)單登錄
這篇文章主要為大家介紹了python的tkinter實(shí)現(xiàn)簡(jiǎn)單登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12Python中調(diào)用和運(yùn)行其他.py文件的多種實(shí)現(xiàn)方法
本文介紹了在Python中調(diào)用和運(yùn)行其他.py文件的四種方法:subprocess模塊、exec函數(shù)、import語句和os.system函數(shù),每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn)2025-02-02