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

如何使用Python最小二乘法擬合曲線代碼詳解

 更新時間:2022年11月18日 11:03:56   作者:張小鳴  
最小二乘法Least Square Method做為分類回歸算法的基礎,有著悠久的歷史,下面這篇文章主要給大家介紹了關于如何使用Python最小二乘法擬合曲線的相關資料,需要的朋友可以參考下

一、背景描述

在一個普通的摸魚早晨,群里居然出現(xiàn)了一個不合時宜頗為突兀的正經(jīng)問題,原來是一個博士同學需要対實驗數(shù)據(jù)進行曲線擬合并且批量計算出多項式方程

一般來說,這種問題對于經(jīng)常做實驗的同學來說并不陌生,通常使用MATLAB或者Origin Pro這類專業(yè)的數(shù)據(jù)計算軟件,甚至Excel也可以實現(xiàn).

但是作為程序員肯定第一想到的還是使用強大的Python來實現(xiàn),但是因為本人主要做java開發(fā),python知之甚少,但也知道python強大在各種現(xiàn)成的類庫,所以實現(xiàn)估計并不難,按我們就上手試試?

再來一張圖更直觀的表述下,博士同學就是有多組實驗數(shù)據(jù),可以分布在坐標系,例如圖中的各個散點,而他想做的就是將散點擬合為一條曲線,獲得曲線的方程式,從而可以通過輸入其他x坐標的值預測結果數(shù)據(jù).這在非常多的地方都有極大的用處

二、前期準備

在開始前還是需要対一些基本概念和類庫進行了解和介紹,因為并不是專業(yè)做研究的,所以對于以下名詞只做簡單的描述,達到理解并且可以使用的目的即可

最小二乘法

最小二乘法(又稱最小平方法)是一種數(shù)學優(yōu)化技術。它通過最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實際數(shù)據(jù)之間誤差的平方和為最小

最小二乘法是解決曲線擬合問題最常用的方法。

其基本思路是:事先選定的一組線性無關的函數(shù), 是待定系數(shù) ,擬合準則是使實驗數(shù)據(jù)(笛卡爾坐標系的坐標數(shù)據(jù))與待擬合曲線的距離的平方和最小,稱為最小二乘準則.

總結來說,我們通常就是使用最小二乘法來做曲線擬合,通過計算最小值來獲得多項式的系數(shù)與誤差數(shù)值.

(關于最小二乘法的原理大家可以自行了解,甚至可以讓你重新感知到數(shù)學邏輯之美)

Python類庫

NumPy

NumPy 是一個 Python 包。 它代表 “Numeric Python”。 它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫。支持大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫。

Matplotlib

Matplotlib 是 Python 的繪圖庫。 它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案。

三、代碼實現(xiàn)

這里我們舉一個例子來展示下,相信下面這道數(shù)學題大家一定不陌生.

某公司為合理定價,在試銷期間得到單價x(單位:元)與銷售量y(單位:件)的數(shù)據(jù)如表:

單價(x) 80 82 84 86 88 90

銷量(y) 90 84 83 80 75 68

如果換做之前,我們肯定就熟練的直接開始列方程解未知數(shù)了,但是現(xiàn)在我已經(jīng)失去了這項能力,那么不妨使用我們準備好的擬合曲線讓程序來幫我們計算下.

話不多說,直接上代碼

import matplotlib.pyplot as plt
import numpy as np

# 準備數(shù)據(jù),將(x,y)坐標點進行輸入
x = np.arange(80, 92, 2)  # x = 80,82,84,86,88,90
y = np.array([90, 84, 83, 80, 75, 68])
# 使用polyfit方法來擬合,并選擇多項式,這里先使用2次方程
z1 = np.polyfit(x, y, 2)
# 使用poly1d方法獲得多項式系數(shù),按照階數(shù)由高到低排列
p1 = np.poly1d(z1)
# 在屏幕上打印擬合多項式
print(p1)
# 求對應x的各項擬合函數(shù)值
fx = p1(x)
# 繪制坐標系散點數(shù)據(jù)及擬合曲線圖
plot1 = plt.plot(x, y, '*', label='origin data')
plot2 = plt.plot(x, fx, 'r', label='polyfit data')
plt.xlabel('x-price')
plt.ylabel('y-amount')
plt.legend(loc=4)  # 指定legend的位置,類似象限的位置
plt.title('polyfit')
plt.show()
plt.savefig('polyfit.png')

代碼其實比較簡單,輸入坐標數(shù)據(jù),使用polyfit擬合曲線,輸出方程并且將圖標畫出來,我們來執(zhí)行下看看結果如何

左邊那個就是擬合出來的二次方程,因為格式問題,2次方在上面一行,大家能看懂就行,右邊就是這個曲線的圖,但是可以看出曲線并不能非常好的貼合散點數(shù)據(jù)

這里我們將多項式改為3次方式再試一下

z1 = np.polyfit(x, y, 3)

再試一下

可以看出三次方程對于數(shù)據(jù)的貼合度還是比較好的,而如何選擇合適的多項式,或者其他類型函數(shù),比如指數(shù)函數(shù),冪函數(shù)等就需要人自己的合理選擇了.

好了,文章就到這里了,在python強大類庫的幫助下,總體還是比較簡單的

總結

到此這篇關于如何使用Python最小二乘法擬合曲線的文章就介紹到這了,更多相關Python最小二乘法擬合曲線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

和田县| 隆回县| 墨玉县| 微山县| 西昌市| 青冈县| 河西区| 恭城| 临朐县| 闸北区| 恩施市| 六安市| 武强县| 濮阳县| 潼关县| 京山县| 张家口市| 九台市| 宽城| 辽阳县| 贵定县| 嘉鱼县| 晋宁县| 公安县| 特克斯县| 阳原县| 格尔木市| 沂水县| 边坝县| 富川| 沁阳市| 内乡县| 门头沟区| 于田县| 广东省| 专栏| 梧州市| 东乡县| 砚山县| 汝阳县| 桂林市|