最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

環(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ù)值計算和數(shù)組操作。
  • pandas:用于讀取和處理Excel數(shù)據(jù)。
  • scipy.optimize.curve_fit:用于非線性最小二乘擬合。
  • matplotlib.pyplot:用于繪制三維散點圖和曲面。

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

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

定義nonlinear_model函數(shù),它接受兩個坐標(biāo)xy(包含x和y的元組)以及三個參數(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ù)估計

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ù)進行擬合,傳入觀測到的(x_data, y_data)對和對應(yīng)的z_data作為目標(biāo)值。curve_fit返回最佳擬合參數(shù)popt和協(xié)方差矩陣pcov。接著,將最佳參數(shù)賦值給a_fitb_fitc_fit,并使用這些參數(shù)計算出所有數(shù)據(jù)點的擬合值z_fit。

計算擬合優(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)

計算擬合優(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ù)精度。

繪制三維散點圖和擬合曲面

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()

計算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 進行非線性回歸
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)

# 計算指標(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)

# 繪制三維散點圖和擬合曲面
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()

部分結(jié)果

image-20240425233029356

總結(jié)

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

參考

Matplotlib文檔

Scipy Curve_fit文檔

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

相關(guān)文章

  • pandas 對series和dataframe進行排序的實例

    pandas 對series和dataframe進行排序的實例

    今天小編就為大家分享一篇pandas 對series和dataframe進行排序的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Python的條件語句

    詳解Python的條件語句

    這篇文章主要為大家介紹了Python的條件語句,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 基于Python構(gòu)建一個智能對話系統(tǒng)

    基于Python構(gòu)建一個智能對話系統(tǒng)

    在當(dāng)今信息爆炸的時代,如何有效管理和組織對話記錄成為了一個重要挑戰(zhàn),本文將介紹如何使用Python構(gòu)建一個智能對話系統(tǒng),感興趣的小伙伴可以了解下
    2025-10-10
  • python字符串格式化函數(shù)

    python字符串格式化函數(shù)

    這篇文章主要介紹了python字符串格式化函數(shù),主要概述內(nèi)容有?格式化字符串輸出?、三引號、字符串字母處理函數(shù)等相關(guān)內(nèi)容,下文詳細內(nèi)容介紹需要的小伙伴可以參考一下
    2022-04-04
  • python中isdigit() isalpha()用于判斷字符串的類型問題

    python中isdigit() isalpha()用于判斷字符串的類型問題

    這篇文章主要介紹了python中isdigit() isalpha()用于判斷字符串的類型問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python安裝requests庫的實例代碼

    python安裝requests庫的實例代碼

    在本篇文章中小編給大家分享了關(guān)于python怎么安裝requests庫的知識點以及代碼內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-06-06
  • Python 處理帶有 \u 的字符串操作

    Python 處理帶有 \u 的字符串操作

    這篇文章主要介紹了Python 處理帶有 \u 的字符串操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python?numpy中的ndarray介紹

    Python?numpy中的ndarray介紹

    這篇文章主要介紹了Python?numpy中的ndarray,numpy?模塊通常被稱為?matplotlib?模塊伴侶,numpy可以方便快捷地對大量數(shù)據(jù)進行科學(xué)計算,為matplotlib?繪制圖表提供數(shù)據(jù),下面來看看文章內(nèi)容的詳細介紹吧
    2022-01-01
  • 使用Python向C語言的鏈接庫傳遞數(shù)組、結(jié)構(gòu)體、指針類型的數(shù)據(jù)

    使用Python向C語言的鏈接庫傳遞數(shù)組、結(jié)構(gòu)體、指針類型的數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于使用Python向C語言的鏈接庫傳遞數(shù)組、結(jié)構(gòu)體、指針類型的數(shù)據(jù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Kali Linux安裝ipython2 和 ipython3的方法

    Kali Linux安裝ipython2 和 ipython3的方法

    今天小編就為大家分享一篇Kali Linux安裝ipython2 和 ipython3的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

迭部县| 镇雄县| 来凤县| 县级市| 郑州市| 烟台市| 隆子县| 木兰县| 阿拉善右旗| 九江市| 夏邑县| 昌都县| 札达县| 丰县| 丰台区| 邵阳县| 绩溪县| 米泉市| 栖霞市| 获嘉县| 房产| 宝清县| 博野县| 吴桥县| 桐城市| 军事| 营山县| 蓬莱市| 宣城市| 唐海县| 乌苏市| 信宜市| 临朐县| 波密县| 高邮市| 额敏县| 靖安县| 西丰县| 波密县| 新乐市| 从化市|