運行結果:
100
運行結果:
[4.00355516 1.55927961]
# 還可以用 poly1d 生成一個以傳入的 coeff 為參數的多項式函數:
運行結果:
[<matplotlib.lines.Line2D at 0x251c6b60970>]
運行結果:
array([[0.05050505, 1. ],
[0.1010101 , 1. ],
[0.15151515, 1. ],
[0.2020202 , 1. ]])
運行結果:
sum squared residual = 12.986
rank of the X matrix = 2
singular values of X = [30.23732043 4.82146667]
運行結果:
(0.5028457518511993, 0.024071946424871093)
運行結果:
R-value = 0.912
p-value (probability there is no correlation) = 1.254e-39
Root mean squared error of the fit = 0.151
運行結果:
[3.32130888 1.89218577 1.28617493 0.68515905]
1
# 更高級的做法:不需要定義誤差函數,直接傳入function作為參數。
運行結果:
[3.32130886 1.89218577 1.28617493 0.68515906]
[[ 0.13806975 -0.04121882 0.01507384 -0.04721358]
[-0.04121882 0.01262612 -0.00431895 0.01352772]
[ 0.01507384 -0.00431895 0.00224488 -0.00703102]
[-0.04721358 0.01352772 -0.00703102 0.02227572]]
運行結果:
normalized relative errors for each parameter
a b f phi
[0.11187679 0.05938424 0.03683802 0.21783342]
① Matplotlib庫 是 Python 的繪圖庫。
② 它常與 NumPy 一起使用。
附錄02:matplotlib.pyplot庫① matplotlib的pyplot子庫提供了繪圖API,方便用戶快速繪製2D圖表。
② matplotlib.pyplot是函數的集合,每一個函數都對圖像作了修改,比如其中有創建圖形,在圖像上創建畫圖區域,在畫圖區域上畫線,在線上標註等。
附錄03:np.polyfit()函數① polyfit()函數是多項式擬合函數,polyfit(x, noise_y, 1)表示擬合一階多項式,即線性擬合函數。
② 即擬合出一階多項式 y=a1x+a0,返回兩個係數 [a1,a0]。
附錄04:np.poly1d()函數① np.poly1d()函數有兩個入口參數。
② 若沒有第二個參數,則生成一個多項式。
③ 例如:
p = np.poly1d([2,3,5,7])
print(p)==>>2x3+3x2+5x+7
④ 若第二個參數為True,則表示把數組中的值作為根,然後反推多項式。
⑤ 例如:
q = np.poly1d([2,3,5],True)
print(q)===>>(x-2)(x-3)(x-5)=x3-10x2+31x-30
附錄05:%matplotlib inline① 有了%matplotlib inline 就可以省掉plt.show()了。
② 如果不加這一句的話,我們在畫圖結束之後需要加上plt.show()才可以顯示圖像。
附錄06:numpy.random.randn()函數① randn函數返回一組樣本,具有標準正態分布。
② 標準正態分布又稱為u分布,是以0為均值、以1為標準差的正態分布,記為N(0,1)。
附錄07:plt.axis()函數① axis是用來設置具體某一個坐標軸的屬性的。
② xmin, xmax, ymin, ymax = axis([xmin, xmax, ymin, ymax])
附錄08:最小二乘法① 當M個點具有線性關係時,我們可以使用一個 N-1 階的多項式擬合這 M 個點,關係式為:
② 即:
③ 要得到C,可以使用scipy.linalg.lstsq求最小二乘解。
附錄09:numpy.linalg庫① numpy.linalg模塊包含線性代數的函數,使用這個模塊,可以計算逆矩陣、求特徵值、解線性方程組以及求解行列式等。
附錄10:scipy.stats庫① Scipy的stats模塊包含了多種概率分布的隨機變量,隨機變量分為連續的和離散的兩種。
附錄11:lstsq()函數① lstsq()函數表示最小二乘法,它有四個返回值,第一個返回值的第一個元素為多項式的係數,第二個返回值為平方和殘差,第三個返回值句矩陣X的秩,第四個返回值為矩陣X的奇異值。
附錄12:linregress()函數① linregress(x,y)函數就是線性回歸的函數。
② linregress(x,y)函數有五個返回值,第一個返回值slope為斜率,第二個返回值intercept為截距,第三個返回值r_value為相關係數,第四個返回值p-value為沒有相關性的可能性,第五個返回值stderr為擬合的均方根誤差。
附錄13:np.hstack()函數① np.hstack()函數使得數組沿著水平方向堆疊起來。
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
res = np.hstack((arr1, arr2))
print(res)
輸出結果:
[1 2 3 4 5 6]
arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[7, 8], [9, 0], [0, 1]])
res = np.hstack((arr1, arr2))
print(res)
輸出結果:
[[1 2 7 8]
[3 4 9 0]
[5 6 0 1]]
附錄14:x[:,np.newaxis]① x[:,np.newaxis]使得一行元素變成一列元素了。
附錄15:np.exp()函數① np.exp()函數返回e(自然對數的底)的冪次方。
附錄16:norm.rvs()函數① norm函數 可以實現正態分布,norm.rvs()函數通過loc和scale參數可以指定隨機變量的偏移和縮放參數,這裡對應的是正態分布的期望和標準差。
② size得到隨機數數組的形狀參數。(也可以使用np.random.normal(loc=0.0, scale=1.0, size=None))
附錄17:curve_fit()函數① 而curve_fit()函數是將模型函數適用於噪聲數據的最後一步,它的主要功能就是計算出參數。
② curve_fit()函數第一個返回的是函數的參數,第二個返回值為各個參數的協方差矩陣,協方差矩陣的對角線為各個參數的方差。
參考文獻:Henri Jambo:Python曲線擬合詳解幫忙點個讚,謝謝!
整理不易,給點鼓勵,謝謝!我整理的所有筆記!( 專欄裡有 )