簡體   English   中英

Python - 最小化卡方

[英]Python - Minimizing Chi-squared

我一直試圖通過最小化卡方來擬合線性模型到一組應力/應變數據。 不幸的是,使用下面的代碼並沒有正確地最小化chisqfunc函數。 它在初始條件下找到最小值x0 ,這是不正確的。 我查看了scipy.optimize文檔並測試了最小化其他正常工作的函數。 您能否建議如何修復下面的代碼或建議另一種方法,我可以通過最小化卡方來使線性模型適應數據?

import numpy
import scipy.optimize as opt

filename = 'data.csv'

data = numpy.loadtxt(open(filename,"r"),delimiter=",")

stress = data[:,0]
strain = data[:,1]
err_stress = data[:,2]

def chisqfunc((a, b)):
    model = a + b*strain
    chisq = numpy.sum(((stress - model)/err_stress)**2)
    return chisq

x0 = numpy.array([0,0])

result =  opt.minimize(chisqfunc, x0)
print result

感謝您閱讀我的問題,我們將非常感謝您的幫助。

干杯,威爾

編輯:我目前使用的數據集: 鏈接到數據

問題是你最初的猜測與實際解決方案相差甚遠。 如果你在chisqfunc()添加一個print語句,比如print (a,b) ,並重新運行你的代碼,你會得到類似的東西:

(0, 0)
(1.4901161193847656e-08, 0.0)
(0.0, 1.4901161193847656e-08)

這意味着minimize僅在這些點評估函數。

如果您現在嘗試在這3對值中評估chisqfunc() ,您會看到它們完全匹配,例如

print chisqfunc((0,0))==chisqfunc((1.4901161193847656e-08,0))
True

這是因為舍入浮點算術。 換句話說,在評估stress - model ,var stressmodel大許多個數量級,結果被截斷。

然后可以嘗試強制它,增加浮點精度,在使用loadtxt加載數據之后寫入data=data.astype(np.float128) minimize失敗, result.success=False ,但有一個有用的消息

由於精度損失,不一定能實現所需的誤差。

一種可能性是提供更好的初始猜測,以便在減法stress - modelmodel部分具有相同的數量級,另一種重新縮放數據,因此解決方案將更接近您的初始猜測(0,0)

它是好得多 ,如果你只是重新縮放數據,使得例如無量綱相對於一定的應力值(如yelding /該材料的開裂)

這是擬合的一個示例,使用最大測量應力作為應力標度。 您的代碼中的更改很少:

import numpy
import scipy.optimize as opt

filename = 'data.csv'

data = numpy.loadtxt(open(filename,"r"),delimiter=",")

stress = data[:,0]
strain = data[:,1]
err_stress = data[:,2]


smax = stress.max()
stress = stress/smax
#I am assuming the errors err_stress are in the same units of stress.
err_stress = err_stress/smax

def chisqfunc((a, b)):
    model = a + b*strain
    chisq = numpy.sum(((stress - model)/err_stress)**2)
    return chisq

x0 = numpy.array([0,0])

result =  opt.minimize(chisqfunc, x0)
print result
assert result.success==True
a,b=result.x*smax
plot(strain,stress*smax)
plot(strain,a+b*strain)

你的線性模型非常好,即你的材料在這個變形范圍內具有非常線性的行為(無論如何它都是什么材料?): 在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM