国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Python機器學習及分析工具:Scipy篇

??Scipy是一個用于數(shù)學、科學、工程領域的常用軟件包,可以處理插值、積分、優(yōu)化、圖像處理、常微分方程數(shù)值解的求解、信號處理等問題。它用于有效計算Numpy矩陣,使Numpy和Scipy協(xié)同工作,高效解決問題。
??Scipy是由針對特定任務的子模塊組成:

模塊名應用領域
scipy.cluster向量計算/Kmeans
scipy.constants物理和數(shù)學常量
scipy.fftpack傅立葉變換
scipy.integrate積分程序
scipy.interpolate插值
scipy.io數(shù)據(jù)輸入輸出
scipy.linalg線性代數(shù)程序
scipy.ndimagen維圖像包
scipy.odr正交距離回歸
scipy.optimize優(yōu)化
scipy.signal信號處理
scipy.sparse稀疏矩陣
scipy.spatial空間數(shù)據(jù)結構和算法
scipy.special一些特殊的數(shù)學函數(shù)
scipy.stats統(tǒng)計

scipy.io

  • 載入和保存matlab文件

from scipy import io as spiofrom numpy as npx = np.ones((3,3))spio.savemat('f.mat',{'a':a})data = spio.loadmat('f.mat',struct_as_record=True)data['a']
  • 讀取圖片

from scipy import miscmisc.imread('picture')

scipy.special

??special庫中的特殊函數(shù)都是超越函數(shù),所謂超越函數(shù)是指變量之間的關系不能用有限次加、減、乘、除、乘方、開方 運算表示的函數(shù)。如初等函數(shù)中的三角函數(shù)、反三角函數(shù)與對數(shù)函數(shù)、指數(shù)函數(shù)都是初等超越函數(shù),一般來說非初等函數(shù)都是超越函數(shù)。

初等函數(shù):指由基本初等函數(shù)經過有限次四則運算與復合運算所得到的函數(shù)

??下面我們對scipy.special中的部分常用函數(shù)進行說明:

  • 函數(shù)
    ??
    函數(shù),也稱伽瑪函數(shù),是由歐拉積分定義的函數(shù),是階乘函數(shù)在實數(shù)域與復數(shù)域上的擴展,當
    時,
    函數(shù)可以定義為:

    解析延拓原理可以將這個定義拓展到整個復數(shù)域上,非正整數(shù)除外。
    ??在scipy.special中使用scipy.special.gamma()實現(xiàn)
    函數(shù)的計算,如果對于精度有更高要求,可以使用采用對數(shù)坐標的scipy.special.gammaln()函數(shù)進行計算。

  • 貝塞爾函數(shù)
    ??在介紹貝塞爾函數(shù)之前,先對貝塞爾方程進行說明,一般來說,我們將形如


    的二階線性常微分方程稱為貝塞爾方程,而貝塞爾方程的標準解函數(shù)
    就是貝塞爾函數(shù)。其中,參數(shù)
    被稱為對應貝塞爾函數(shù)的階。貝塞爾方程是一個二階線性齊次常微分方程,必然存在兩個線性無關的解,然而通常情況下它的解無法用初等函數(shù)表示,但是當
    時,注意到
    是貝爾塞方程的正則奇點,則由常微分方程的廣義冪級數(shù)解法可以得出貝塞爾方程的兩個廣義冪級數(shù)解:




其中

被稱為第一類貝塞爾函數(shù),
被稱為第二類貝塞爾函數(shù)(諾依曼函數(shù))。(求解方法參考常微分方程教程 7.4 廣義冪級數(shù)解法)。
??貝塞爾方程是在柱坐標球坐標下使用分離變量法求解拉普拉斯方程和亥姆霍茲方程時得到的,因此貝塞爾函數(shù)在波動問題以及各種涉及有勢場的問題中占有非常重要的地位,其應用有:

在圓柱形波導中的電磁波傳播問題
圓柱體中的熱傳導問題
圓形或環(huán)形薄膜的震動膜態(tài)分析問題
信號處理中的調頻合成(FMsynthesis)
波動聲學

??在scipy.special中使用scipy.special.jn()計算

階貝塞爾函數(shù)

  • 橢圓函數(shù)
    ??橢圓函數(shù)是定義在有限復平面上亞純的雙周期函數(shù)。所謂的雙周期是指具有兩個基本周期的單復變函數(shù),即存在

    兩個非0復數(shù),對任意整數(shù)
    有:
    于是
    構成
    的全部周期。
    ??在scipy.special中使用scipy.special.ellipj()函數(shù)計算橢圓函數(shù)。

  • Erf(高斯曲線的面積)
    ??高斯曲線是指高斯分布也就是我們常說的正態(tài)分布


    其概率密度函數(shù)為:

    其概率密度函數(shù)曲線就是高斯曲線也叫鐘形曲線,如下:

    不同參數(shù)下的高斯曲線


    時,高斯分布被稱為標準正態(tài)分布。
    scipy.special使用scipy.special.erf()計算高斯曲線的面積。

scipy.linalg

  • scipy.linalg.det():計算方陣的行列式

  • scipy.linalg.inv():計算方陣的逆

  • scipy.linalg.svd():奇異值分解

scipy.fftpack

??快速傅立葉變換(FFT),是快速計算序列的離散傅立葉變換(DFT)或其逆變換的方法。FFT會通過把DFT矩陣分解為稀疏因子之積來快速計算此類變換。

傅立葉變換將函數(shù)的時域與頻域相關聯(lián)

scipy.fftpack使用:

  • scipy.fftpack.fftfreq():生成樣本序列

  • scipy.fftpack.fft():計算快速傅立葉變換

scipy.optimize

??scipy.optimize模塊提供了函數(shù)最值、曲線擬合和求根的算法。

  • 函數(shù)最值
    ??以尋找函數(shù)

    的最小值為例進行說明:
    ??首先繪制目標函數(shù)的圖形:

from scipy import optimizeimport numpy as npimport matplotlib.pyplot as plt#定義目標函數(shù)def f(x):    return x**2+10*np.sin(x)#繪制目標函數(shù)的圖形plt.figure(figsize=(10,5))x = np.arange(-10,10,0.1)plt.xlabel('x')plt.ylabel('y')plt.title('optimize')plt.plot(x,f(x),'r-',label='$f(x)=x^2+10sin(x)$')#圖像中的最低點函數(shù)值a = f(-1.3)plt.annotate('min',xy=(-1.3,a),xytext=(3,40),arrowprops=dict(facecolor='black',shrink=0.05))plt.legend()plt.show()

圖形輸出如下:


先確定最小值所在區(qū)間

顯然這是一個非凸優(yōu)化問題,對于這類函數(shù)得最小值問題一般是從給定的初始值開始進行一個梯度下降,在optimize中一般使用bfgs算法。

optimize.fmin_bfgs(f,0)
運行結果

結果顯示在經過五次迭代之后找到了一個局部最低點-7.945823,顯然這并不是函數(shù)的全局最小值,只是該函數(shù)的一個局部最小值,這也是擬牛頓算法(BFGS)的局限性,如果一個函數(shù)有多個局部最小值,擬牛頓算法可能找到這些局部最小值而不是全局最小值,這取決與初始點的選取。在我們不知道全局最低點,并且使用一些臨近點作為初始點,那將需要花費大量的時間來獲得全局最優(yōu)。此時可以采用暴力搜尋算法,它會評估范圍網格內的每一個點。對于本例,如下:

grid = (-10, 10, 0.1)xmin_global = optimize.brute(f, (grid,))print(xmin_global)

搜尋結果如下:

全局最小值

??但是當函數(shù)的定義域大到一定程度時,scipy.optimize.brute() 變得非常慢。scipy.optimize.anneal() 提供了一個解決思路,使用模擬退火算法。

可以使用scipy.optimize.fminbound(function,a,b)得到指定范圍([a,b])內的局部最低點。

  • 函數(shù)零點

scipy.optimize.fsolve(f,x):函數(shù)可以求解f=0的零點,x是根據(jù)函數(shù)圖形特征預先估計的一個零點。

  • 曲線擬合

scipy.optimize.curve_fit():非線性最小二乘擬合

from scipy import optimizexdata = np.linspace(-10, 10, num=20)ydata = f(xdata) + np.random.randn(xdata.size)def f2(x, a, b):    return a*x**2 + b*np.sin(x)guess = [2, 2]params, params_covariance = optimize.curve_fit(f2, xdata, ydata, guess)print(params)

scipy.optimize.leatsq():最小二乘法擬合

'''使用最小二乘法擬合直線'''import numpy as npfrom scipy.optimize import leastsqimport matplotlib.pyplot as plt#訓練數(shù)據(jù)Xi = np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78])Yi = np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])#定義擬合函數(shù)形式def func(p,x):    k,b = p    return k*x+b#定義誤差函數(shù)def error(p,x,y,s):    print(s)    return func(p,x)-y#隨機給出參數(shù)的初始值p = [10,2]#使用leastsq()函數(shù)進行參數(shù)估計s = '參數(shù)估計次數(shù)'Para = leastsq(error,p,args=(Xi,Yi,s))k,b = Para[0]print('k=',k,'\n','b=',b)#圖形可視化plt.figure(figsize = (8,6))#繪制訓練數(shù)據(jù)的散點圖plt.scatter(Xi,Yi,color='r',label='Sample Point',linewidths = 3)plt.xlabel('x')plt.ylabel('y')x = np.linspace(0,10,1000)y = k*x+bplt.plot(x,y,color= 'orange',label = 'Fitting Line',linewidth = 2)plt.legend()plt.show()

擬合效果如下:

最小二乘法擬合直線

'''使用最小二乘法擬合正弦函數(shù)'''import numpy as npfrom scipy.optimize import leastsqimport  matplotlib.pyplot as plt #定義擬合函數(shù)圖形def func(x,p):    A,k,theta = p    return A*np.sin(2*np.pi*k*x+theta)#定義誤差函數(shù)def error(p,x,y):    return y-func(x,p)#生成訓練數(shù)據(jù)#隨機給出參數(shù)的初始值p0 = [10,0.34,np.pi/6]A,k,theta = p0x = np.linspace(0,2*np.pi,1000)#隨機指定參數(shù)y0 = func(x,[A,k,theta])#randn(m)從標準正態(tài)分布中返回m個值,在本例作為噪聲y1 = y0 + 2*np.random.randn(len(x))#進行參數(shù)估計Para = leastsq(error,p0,args=(x,y1))A,k,theta = Para[0]print('A=',A,'k=',k,'theta=',theta)'''圖形可視化'''plt.figure(figsize=(20,8))ax1 = plt.subplot(2,1,1)ax2 = plt.subplot(2,1,2)#在ax1區(qū)域繪圖plt.sca(ax1)#繪制散點圖plt.scatter(x,y1,color='red',label='Sample Point',linewidth = 3)plt.xlabel('x')plt.xlabel('y')y = func(x,p0)plt.plot(x,y0,color='black',label='sine',linewidth=2)#在ax2區(qū)域繪圖plt.sca(ax2)e = y-y1plt.plot(x,e,color='orange',label='error',linewidth=1)#顯示圖例和圖形plt.legend()plt.show()
最小二乘法擬合曲線
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
梯度下降的原理、代碼、調試
寫SCI論文就用SciPy
SciPy
【python數(shù)據(jù)挖掘課程】十四.Scipy調用curve
多孔介質粘性系數(shù)與慣性系數(shù)計算
機器學習 梯度
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服