欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python多元非線性回歸及繪圖的實(shí)現(xiàn)

 更新時(shí)間:2024年04月28日 14:58:33   作者:浩瀚地學(xué)  
本文主要介紹了Python多元非線性回歸及繪圖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在數(shù)字地形模型這門課做的一個(gè)小實(shí)驗(yàn),代碼實(shí)現(xiàn)的是以影像因子和地形要素為自變量,采樣后的高程計(jì)算出的指標(biāo)為因變量進(jìn)行回歸,本質(zhì)上是通過curve_fit進(jìn)行多元非線性回歸,但是當(dāng)時(shí)的要素偏多,需要寫代碼依次使用不同的自變量和因變量回歸

環(huán)境:Python 3.9

部分?jǐn)?shù)據(jù)截圖

image-20240425231728608

代碼邏輯

導(dǎo)入所需庫和模塊

# coding=gbk
# -*- coding = utf-8 -*-

import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
  • numpy:用于數(shù)值計(jì)算和數(shù)組操作。
  • pandas:用于讀取和處理Excel數(shù)據(jù)。
  • scipy.optimize.curve_fit:用于非線性最小二乘擬合。
  • matplotlib.pyplot:用于繪制三維散點(diǎn)圖和曲面。

定義非線性模型函數(shù)

def nonlinear_model(xy, a, b, c):
    x, y = xy
    return (a * x - b) * y + c

定義nonlinear_model函數(shù),它接受兩個(gè)坐標(biāo)xy(包含x和y的元組)以及三個(gè)參數(shù)abc,即 (a * x - b) * y + c

設(shè)置數(shù)據(jù)源和變量

excel_file_path = 'E:\zbh.xlsx'    
df = pd.read_excel(excel_file_path)

x = 'R'
y = 'SOS'
z = 'MEAN'
x_data = np.array(df[x])
y_data = np.array(df[y])
z_data = np.array(df[z])

指定的Excel文件路徑可以改改,讀取變量RSOSMEAN的列數(shù)據(jù),這里也需要根據(jù)數(shù)據(jù)本身來改

非線性回歸與參數(shù)估計(jì)

popt, pcov = curve_fit(nonlinear_model, (x_data, y_data), z_data)
a_fit, b_fit, c_fit = popt
z_fit = nonlinear_model((x_data, y_data), a_fit, b_fit, c_fit)

使用scipy.optimize.curve_fit對給定的nonlinear_model函數(shù)進(jìn)行擬合,傳入觀測到的(x_data, y_data)對和對應(yīng)的z_data作為目標(biāo)值。curve_fit返回最佳擬合參數(shù)popt和協(xié)方差矩陣pcov。接著,將最佳參數(shù)賦值給a_fitb_fitc_fit,并使用這些參數(shù)計(jì)算出所有數(shù)據(jù)點(diǎn)的擬合值z_fit

計(jì)算擬合優(yōu)度指標(biāo)和均方根誤差

ss_total = np.sum((z_data - np.mean(z_data)) ** 2)
ss_reg = np.sum((z_fit - np.mean(z_data)) ** 2)
r_squared = ss_reg / ss_total
rmse = np.sqrt(np.mean((z_data - z_fit) ** 2))

print("R方:", r_squared)
print("RMSE:", rmse)

計(jì)算擬合優(yōu)度指標(biāo)(R方),均方根誤差(RMSE),最后打印

構(gòu)建擬合公式字符串

formula = "{} = ({:.2f} * {} + ({:.2f})) * {} + {:.2f}".format(z, a_fit, x, b_fit, y, c_fit)
print(formula)

用已得到的最佳參數(shù)和變量名構(gòu)建最終的擬合公式,并保留兩位小數(shù)精度。

繪制三維散點(diǎn)圖和擬合曲面

fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, projection='3d')

ax.scatter(x_data, y_data, z_data, color='blue', label='Data Points')
X, Y = np.meshgrid(np.linspace(min(x_data), max(x_data), 30),
                   np.linspace(min(y_data), max(y_data), 30))
Z = nonlinear_model((X.flatten(), Y.flatten()), a_fit, b_fit, c_fit).reshape(X.shape)
ax.plot_surface(X, Y, Z, color='r', alpha=0.6, label='Fitted Surface')

ax.set_xlabel(x)
ax.set_ylabel(y)
ax.set_zlabel(z)
plt.title(x +"-"+ y + "-" + z + ":" + formula)
plt.show()

計(jì)算Z值和繪圖

完整代碼

# coding=gbk
# -*- coding = utf-8 -*-

import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

# 定義非線性模型函數(shù)
def nonlinear_model(xy, a, b, c):
    x, y = xy
    return (a * x - b) * y + c

# 指定Excel文件路徑并讀取
excel_file_path = 'E:\zbh.xlsx'
df = pd.read_excel(excel_file_path)
x = 'R'
y = 'SOS'
z = 'MEAN'
x_data = np.array(df[x])
y_data = np.array(df[y])
z_data = np.array(df[z])

# 利用 curve_fit 進(jìn)行非線性回歸
popt, pcov = curve_fit(nonlinear_model, (x_data, y_data), z_data)
a_fit, b_fit, c_fit = popt
z_fit = nonlinear_model((x_data, y_data), a_fit, b_fit, c_fit)

# 計(jì)算指標(biāo)
ss_total = np.sum((z_data - np.mean(z_data)) ** 2)
ss_reg = np.sum((z_fit - np.mean(z_data)) ** 2)
r_squared = ss_reg / ss_total
rmse = np.sqrt(np.mean((z_data - z_fit) ** 2))
print("R方:", r_squared)
print("RMSE:", rmse)
# 擬合公式
formula = "{} = ({:.2f} * {} + ({:.2f})) * {} + {:.2f}".format(z, a_fit, x, b_fit, y, c_fit)
print(formula)

# 繪制三維散點(diǎn)圖和擬合曲面
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, projection='3d')

# 散點(diǎn)圖
ax.scatter(x_data, y_data, z_data, color='blue', label='Data Points')
# 曲面圖
X, Y = np.meshgrid(np.linspace(min(x_data), max(x_data), 30),
                   np.linspace(min(y_data), max(y_data), 30))
Z = nonlinear_model((X.flatten(), Y.flatten()), a_fit, b_fit, c_fit).reshape(X.shape)
ax.plot_surface(X, Y, Z, color='r', alpha=0.6, label='Fitted Surface')

ax.set_xlabel(x)
ax.set_ylabel(y)
ax.set_zlabel(z)
plt.title(x +"-"+ y + "-" + z + ":" + formula)
plt.show()

部分結(jié)果

image-20240425233029356

總結(jié)

由于這次實(shí)驗(yàn)用到的數(shù)據(jù)量較少,因此畫圖的效果感覺一般,趨勢不明顯,計(jì)算出的指標(biāo)參考意義也有限,數(shù)據(jù)量大一點(diǎn)效果好壞會一目了然

參考

Matplotlib文檔

Scipy Curve_fit文檔

到此這篇關(guān)于Python多元非線性回歸及繪圖的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python多元非線性回歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?虛擬機(jī)集合set實(shí)現(xiàn)原理及源碼解析

    Python?虛擬機(jī)集合set實(shí)現(xiàn)原理及源碼解析

    這篇文章主要為大家介紹了Python?虛擬機(jī)集合set實(shí)現(xiàn)原理及源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • OpenCV學(xué)習(xí)之圖像加噪與濾波的實(shí)現(xiàn)詳解

    OpenCV學(xué)習(xí)之圖像加噪與濾波的實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了OpenCV中圖像的加噪與濾波操作的相關(guān)資料,文中的示例代碼簡潔易懂,具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-02-02
  • 關(guān)于tensorflow中tf.keras.models.Sequential()的用法

    關(guān)于tensorflow中tf.keras.models.Sequential()的用法

    這篇文章主要介紹了關(guān)于tensorflow中tf.keras.models.Sequential()的用法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • python中的格式化輸出用法總結(jié)

    python中的格式化輸出用法總結(jié)

    這篇文章主要介紹了python中的格式化輸出用法,分析了Python格式化輸出的種類并結(jié)合實(shí)例形式總結(jié)了針對浮點(diǎn)數(shù)的格式化輸出方法,需要的朋友可以參考下
    2016-07-07
  • python遞歸函數(shù)用法詳解

    python遞歸函數(shù)用法詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python遞歸函數(shù)用法詳解,有需要的朋友們可以參考學(xué)習(xí)下。
    2020-10-10
  • Win10搭建Pyspark2.4.4+Pycharm開發(fā)環(huán)境的圖文教程(親測)

    Win10搭建Pyspark2.4.4+Pycharm開發(fā)環(huán)境的圖文教程(親測)

    本文主要介紹了Win10搭建Pyspark2.4.4+Pycharm開發(fā)環(huán)境的圖文教程(親測),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 提升Python代碼質(zhì)量巧妙整理包引入順序

    提升Python代碼質(zhì)量巧妙整理包引入順序

    在Python編程中,優(yōu)化導(dǎo)入包的順序可以提高代碼的可讀性、可維護(hù)性和性能,一個(gè)良好的導(dǎo)入順序不僅使代碼更易于理解,還可以幫助減少潛在的循環(huán)依賴和提高導(dǎo)入速度,本文將介紹如何快速、有效地優(yōu)化Python導(dǎo)入包的順序,并提供豐富的示例代碼以幫助更好地理解
    2024-01-01
  • python實(shí)現(xiàn)簡單俄羅斯方塊游戲

    python實(shí)現(xiàn)簡單俄羅斯方塊游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單俄羅斯方塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python實(shí)現(xiàn)批量讀取HDF多波段柵格數(shù)據(jù)并繪制像元直方圖

    Python實(shí)現(xiàn)批量讀取HDF多波段柵格數(shù)據(jù)并繪制像元直方圖

    這篇文章主要為大家詳細(xì)介紹了如何基于Python語言gdal模塊,實(shí)現(xiàn)多波段HDF柵格圖像文件的讀取、處理與像元值可視化(直方圖繪制)等操作,需要的可以參考一下
    2023-03-03
  • 淺談python量化 雙均線策略(金叉死叉)

    淺談python量化 雙均線策略(金叉死叉)

    這篇文章主要介紹了淺談python量化 雙均線策略(金叉死叉),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評論