用python進行線性/非線性擬合的三種方法

1. 簡單線性回歸
使用回歸分析繪制擬合曲線是一種常見的方法,簡單線性回歸就是其中的一種。簡單線性回歸可以通過最小二乘法來計算回歸系數(shù)。以下是一個使用簡單線性回歸來擬合數(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]) # 計算回歸系數(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ù)可以用來計算簡單線性回歸的回歸系數(shù)。plot函數(shù)用來繪制擬合曲線,scatter函數(shù)繪制原始數(shù)據(jù)點。

2. 多項式回歸
使用多項式回歸是一種常用方法,它可以用來擬合更加復(fù)雜的數(shù)據(jù)集。以下是一個使用多項式回歸來擬合數(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]) # 計算多項式回歸系數(shù) coefs = np.polyfit(x, y, 3) # 使用np.poly1d函數(shù)來生成一個多項式擬合對象 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()
與簡單線性回歸不同,多項式回歸可以擬合更加復(fù)雜的數(shù)據(jù)集。在該代碼中,np.polyfit函數(shù)計算多項式回歸系數(shù),np.poly1d函數(shù)生成一個多項式擬合對象。plot函數(shù)用來繪制擬合曲線,scatter函數(shù)繪制原始數(shù)據(jù)點。

3. 非線性回歸
使用非線性回歸是一種更加復(fù)雜的擬合方法,在實際應(yīng)用中可以用來擬合更加復(fù)雜的非線性數(shù)據(jù)。以下是一個使用非線性回歸來擬合數(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庫中的curve_fit函數(shù)來擬合非線性數(shù)據(jù)。curve_fit函數(shù)中第一個參數(shù)是非線性函數(shù),第二個參數(shù)是擬合數(shù)據(jù)的橫坐標(biāo),第三個參數(shù)是擬合數(shù)據(jù)的縱坐標(biāo)。

總結(jié)
以上是Python中的三種常用擬合曲線方法。簡單線性回歸可以擬合線性關(guān)系的數(shù)據(jù),多項式回歸可以擬合更加復(fù)雜的數(shù)據(jù),而非線性回歸則可以用來擬合非線性數(shù)據(jù)。我們可以根據(jù)實際需要選擇不同的方法來擬合數(shù)據(jù)。
相關(guān)文章
使用Python獲取JS加載的數(shù)據(jù)的多種實現(xiàn)方法
在當(dāng)今的互聯(lián)網(wǎng)時代,網(wǎng)頁數(shù)據(jù)的動態(tài)加載已經(jīng)成為一種常見的技術(shù)手段,許多現(xiàn)代網(wǎng)站通過JavaScript(JS)動態(tài)加載內(nèi)容,這使得傳統(tǒng)的靜態(tài)網(wǎng)頁爬取方法難以奏效,所以本文將詳細(xì)介紹如何使用Python來爬取JavaScript加載的數(shù)據(jù),需要的朋友可以參考下2025-05-05
詳解利用django中間件django.middleware.csrf.CsrfViewMiddleware防止csrf
這篇文章主要介紹了詳解利用django中間件django.middleware.csrf.CsrfViewMiddleware防止csrf攻擊,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
深入理解Python虛擬機中元組(tuple)的實現(xiàn)原理及源碼
在本篇文章當(dāng)中主要給大家介紹?cpython?虛擬機當(dāng)中針對列表的實現(xiàn),在?Python?中,tuple?是一種非常常用的數(shù)據(jù)類型,在本篇文章當(dāng)中將深入去分析這一點是如何實現(xiàn)的2023-03-03
詳解python中的defaultdict?默認(rèn)值
這篇文章主要介紹了defaultdict?默認(rèn)值,defaultdict是python內(nèi)建dict類的一個字類,功能與dict相同,但它帶有一個默認(rèn)的值,若key值不存在時返回一個默認(rèn)的值,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04

