python最小二乘法
㈠ 怎麼用python將圖像邊界用最小二乘法擬合成曲線
本文實例講述了Python基於最小二乘法實現曲線擬合。分享給大家供大家參考,具體如下:
這里不手動實現最小二乘,調用scipy庫中實現好的相關優化函數。
考慮如下的含有4個參數的函數式:
希望本文所述對大家Python程序設計有所幫助。
㈡ Python中如何使用最小二乘法
##最小二乘法
importnumpyasnp##科學計算庫
importscipyassp##在numpy基礎上實現的部分演算法庫
importmatplotlib.pyplotasplt##繪圖庫
fromscipy.optimizeimportleastsq##引入最小二乘法演算法
'''
設置樣本數據,真實數據需要在這里處理
'''
##樣本數據(Xi,Yi),需要轉換成數組(列表)形式
Xi=np.array([6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2])
Yi=np.array([5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3])
'''
設定擬合函數和偏差函數
函數的形狀確定過程:
1.先畫樣本圖像
2.根據樣本圖像大致形狀確定函數形式(直線、拋物線、正弦餘弦等)
'''
##需要擬合的函數func:指定函數的形狀
deffunc(p,x):
k,b=p
returnk*x+b
##偏差函數:x,y都是列表:這里的x,y更上面的Xi,Yi中是一一對應的
deferror(p,x,y):
returnfunc(p,x)-y
'''
主要部分:附帶部分說明
1.leastsq函數的返回值tuple,第一個元素是求解結果,第二個是求解的代價值(個人理解)
2.官網的原話(第二個值):
3.實例:Para=>(array([0.61349535,1.79409255]),3)
4.返回值元組中第一個值的數量跟需要求解的參數的數量一致
'''
#k,b的初始值,可以任意設定,經過幾次試驗,發現p0的值會影響cost的值:Para[1]
p0=[1,20]
#把error函數中除了p0以外的參數打包到args中(使用要求)
Para=leastsq(error,p0,args=(Xi,Yi))
#讀取結果
k,b=Para[0]
print("k=",k,"b=",b)
print("cost:"+str(Para[1]))
print("求解的擬合直線為:")
print("y="+str(round(k,2))+"x+"+str(round(b,2)))
'''
繪圖,看擬合效果.
matplotlib默認不支持中文,label設置中文的話需要另行設置
如果報錯,改成英文就可以
'''
#畫樣本點
plt.figure(figsize=(8,6))##指定圖像比例:8:6
plt.scatter(Xi,Yi,color="green",label="樣本數據",linewidth=2)
#畫擬合直線
x=np.linspace(0,12,100)##在0-15直接畫100個連續點
y=k*x+b##函數式
plt.plot(x,y,color="red",label="擬合直線",linewidth=2)
plt.legend(loc='lowerright')#繪制圖例
plt.show()
㈢ Python數據分析要學什麼數學
因為不知道所學的數學知識到底有什麼用。對於IT公司的研發人員來說,他們在進入大數據相關崗位前,總是覺得要先學點數學,但是茫茫的數學世界,哪裡才是數據技術的盡頭?一談到數據技術,很多人首先想到的是數學,大概是因為數字在數學體系中穩固的位置吧,這也是理所當然的。本文對數據技術的數學基礎這個問題進行一些探討。(推薦學習:Python視頻教程)
我們知道數學的三大分支,即代數、幾何與分析,每個分支隨著研究的發展延伸出來很多小分支。在這個數學體系中,與大數據技術有密切關系的數學基礎主要有以下幾類。(關於這些數學方法在大數據技術中的應用參見《互聯網大數據處理技術與應用》一書, 2017,清華大學出版社)
(1)概率論與數理統計
這部分與大數據技術開發的關系非常密切,條件概率、獨立性等基本概念、隨機變數及其分布、多維隨機變數及其分布、方差分析及回歸分析、隨機過程(特別是Markov)、參數估計、Bayes理論等在大數據建模、挖掘中就很重要。大數據具有天然的高維特徵,在高維空間中進行數據模型的設計分析就需要一定的多維隨機變數及其分布方面的基礎。Bayes定理更是分類器構建的基礎之一。除了這些這些基礎知識外,條件隨機場CRF、隱Markov模型、n-gram等在大數據分析中可用於對詞彙、文本的分析,可以用於構建預測分類模型。
當然以概率論為基礎的資訊理論在大數據分析中也有一定作用,比如信息增益、互信息等用於特徵分析的方法都是資訊理論裡面的概念。
(2)線性代數
這部分的數學知識與數據技術開發的關系也很密切,矩陣、轉置、秩 分塊矩陣、向量、正交矩陣、向量空間、特徵值與特徵向量等在大數據建模、分析中也是常用的技術手段。
在互聯網大數據中,許多應用場景的分析對象都可以抽象成為矩陣表示,大量Web頁面及其關系、微博用戶及其關系、文本集中文本與詞彙的關系等等都可以用矩陣表示。比如對於Web頁面及其關系用矩陣表示時,矩陣元素就代表了頁面a與另一個頁面b的關系,這種關系可以是指向關系,1表示a和b之間有超鏈接,0表示a,b之間沒有超鏈接。著名的PageRank演算法就是基於這種矩陣進行頁面重要性的量化,並證明其收斂性。
以矩陣為基礎的各種運算,如矩陣分解則是分析對象特徵提取的途徑,因為矩陣代表了某種變換或映射,因此分解後得到的矩陣就代表了分析對象在新空間中的一些新特徵。所以,奇異值分解SVD、PCA、NMF、MF等在大數據分析中的應用是很廣泛的。
(3)最優化方法
模型學習訓練是很多分析挖掘模型用於求解參數的途徑,基本問題是:給定一個函數f:A→R,尋找一個元素a0∈A,使得對於所有A中的a,f(a0)≤f(a)(最小化);或者f(a0)≥f(a)(最大化)。優化方法取決於函數的形式,從目前看,最優化方法通常是基於微分、導數的方法,例如梯度下降、爬山法、最小二乘法、共軛分布法等。
(4)離散數學
離散數學的重要性就不言而喻了,它是所有計算機科學分支的基礎,自然也是數據技術的重要基礎。這里就不展開了。
最後,需要提的是,很多人認為自己數學不好,數據技術開發應用也做不好,其實不然。要想清楚自己在大數據開發應用中充當什麼角色。參考以下的大數據技術研究應用的切入點,上述數學知識主要體現在數據挖掘與模型層上,這些數學知識和方法就需要掌握了。
當然其他層次上,使用這些數學方法對於改進演算法也是非常有意義的,例如在數據獲取層,可以利用概率模型估計爬蟲採集頁面的價值,從而能做出更好的判斷。在大數據計算與存儲層,利用矩陣分塊計算實現並行計算。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於Python數據分析要學什麼數學的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
㈣ 如何用python作空間自回歸模型
基本形式
線性模型(linear model)就是試圖通過屬性的線性組合來進行預測的函數,基本形式如下:
f(x)=wTx+b
許多非線性模型可在線性模型的基礎上通過引入層結構或者高維映射(比如核方法)來解決。線性模型有很好的解釋性。
線性回歸
線性回歸要求均方誤差最小:
(w∗,b∗)=argmin∑i=1m(f(xi)−yi)2
均方誤差有很好的幾何意義,它對應了常用的歐式距離(Euclidean distance)。基於均方誤差最小化來進行模型求解稱為最小二乘法(least square method),線性回歸中,最小二乘發就是試圖找到一條直線,使得所有樣本到直線的歐式距離之和最小。
我們把上式寫成矩陣的形式:
w∗=argmin(y−Xw)T(y−Xw)
這里我們把b融合到w中,X中最後再加一列1。為了求最小值,我們對w求導並令其為0:
2XT(Xw−y)=0
當XTX為滿秩矩陣(full-rank matrix)時是可逆的。此時:
w=(XTX)−1XTy
令xi=(xi,1),可以得到線性回歸模型:
f(xi)=xTi(XTX)−1XTy
㈤ 如何用python實現含有虛擬自變數的回歸
參考資料:
DataRobot | Ordinary Least Squares in Python
DataRoboe | Multiple Regression using Statsmodels
AnalyticsVidhya | 7 Types of Regression Techniques you should know!
㈥ 如何應用最小二乘法進行實驗曲線擬合
打開Excel,先將數據繪成線性圖,然後在圖表中添加趨勢線,然後勾選:顯示公式,就可以擬合出數據的公式了。
㈦ python 有沒有最小二乘法回歸包
線性回歸可以讓X 的平均數和Y的平均數落在一條直線上。換句話說,用最小二乘法可以讓數據中盡可量多的點落在同一條直線上。詳情參照高中數學教科書。
㈧ Python怎麼做最優化
一、概觀
scipy中的optimize子包中提供了常用的最優化演算法函數實現。我們可以直接調用這些函數完成我們的優化問題。optimize中函數最典型的特點就是能夠從函數名稱上看出是使用了什麼演算法。下面optimize包中函數的概覽:
1.非線性最優化
fmin -- 簡單Nelder-Mead演算法
fmin_powell -- 改進型Powell法
fmin_bfgs -- 擬Newton法
fmin_cg -- 非線性共軛梯度法
fmin_ncg -- 線性搜索Newton共軛梯度法
leastsq -- 最小二乘
2.有約束的多元函數問題
fmin_l_bfgs_b ---使用L-BFGS-B演算法
fmin_tnc ---梯度信息
fmin_cobyla ---線性逼近
fmin_slsqp ---序列最小二乘法
nnls ---解|| Ax - b ||_2 for x>=0
3.全局優化
anneal ---模擬退火演算法
brute --強力法
4.標量函數
fminbound
brent
golden
bracket
5.擬合
curve_fit-- 使用非線性最小二乘法擬合
6.標量函數求根
brentq ---classic Brent (1973)
brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出這個演算法的人名
bisect ---二分法
newton ---牛頓法
fixed_point
7.多維函數求根
fsolve ---通用
broyden1 ---Broyden』s first Jacobian approximation.
broyden2 ---Broyden』s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixing
excitingmixing ---tuned diagonal Jacobian approximationlinearmixing ---scalar Jacobian approximationdiagbroyden ---diagonal Broyden Jacobian approximation8.實用函數
line_search ---找到滿足強Wolfe的alpha值
check_grad ---通過和前向有限差分逼近比較檢查梯度函數的正確性二、實戰非線性最優化
fmin完整的調用形式是:
fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)不過我們最常使用的就是前兩個參數。一個描述優化問題的函數以及初值。後面的那些參數我們也很容易理解。如果您能用到,請自己研究。下面研究一個最簡單的問題,來感受這個函數的使用方法:f(x)=x**2-4*x+8,我們知道,這個函數的最小值是4,在x=2的時候取到。
from scipy.optimize import fmin #引入優化包def myfunc(x):
return x**2-4*x+8 #定義函數
x0 = [1.3] #猜一個初值
xopt = fmin(myfunc, x0) #求解
print xopt #列印結果
運行之後,給出的結果是:
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 16
Function evaluations: 32
[ 2.00001953]
程序准確的計算得出了最小值,不過最小值點並不是嚴格的2,這應該是由二進制機器編碼誤差造成的。
除了fmin_ncg必須提供梯度信息外,其他幾個函數的調用大同小異,完全類似。我們不妨做一個對比:
from scipy.optimize import fmin,fmin_powell,fmin_bfgs,fmin_cgdef myfunc(x):
return x**2-4*x+8
x0 = [1.3]
xopt1 = fmin(myfunc, x0)
print xopt1
print
xopt2 = fmin_powell(myfunc, x0)
print xopt2
print
xopt3 = fmin_bfgs(myfunc, x0)
print xopt3
print
xopt4 = fmin_cg(myfunc,x0)
print xopt4
給出的結果是:
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 16
Function evaluations: 32
[ 2.00001953]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 53
1.99999999997
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 12
Gradient evaluations: 4
[ 2.00000001]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 15
Gradient evaluations: 5
[ 2.]
我們可以根據給出的消息直觀的判斷演算法的執行情況。每一種演算法數學上的問題,請自己看書學習。個人感覺,如果不是純研究數學的工作,沒必要搞清楚那些推導以及定理雲雲。不過,必須了解每一種演算法的優劣以及能力所及。在使用的時候,不妨多種演算法都使用一下,看看效果分別如何,同時,還可以互相印證演算法失效的問題。
在from scipy.optimize import fmin之後,就可以使用help(fmin)來查看fmin的幫助信息了。幫助信息中沒有例子,但是給出了每一個參數的含義說明,這是調用函數時候的最有價值參考。
有源碼研究癖好的,或者當你需要改進這些已經實現的演算法的時候,可能需要查看optimize中的每種演算法的源代碼。在這里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聰明的你肯定發現了,順著這個鏈接往上一級、再往上一級,你會找到scipy的幾乎所有源碼!