如果這個問題已經得到解答,我已經對此表示歉意了,我已經看過了,並且找不到具體的內容。如何在線性迴歸中強制零截取?
我有一些形式的或多或少的線性數據
x = [0.1, 0.2, 0.4, 0.6, 0.8, 1.0, 2.0, 4.0, 6.0, 8.0, 10.0, 20.0, 40.0, 60.0, 80.0]
y = [0.50505332505407008, 1.1207373784533172, 2.1981844719020001, 3.1746209003398689, 4.2905482471260044, 6.2816226678076958, 11.073788414382639, 23.248479770546009, 32.120462301367183, 44.036117671229206, 54.009003143831116, 102.7077685684846, 185.72880217806673, 256.12183145545811, 301.97120103079675]
我使用scipy.optimize.leastsq
,以適應線性迴歸到這一點:
def lin_fit(x, y):
'''Fits a linear fit of the form mx+b to the data'''
fitfunc = lambda params, x: params[0] * x + params[1] #create fitting function of form mx+b
errfunc = lambda p, x, y: fitfunc(p, x) - y #create error function for least squares fit
init_a = 0.5 #find initial value for a (gradient)
init_b = min(y) #find initial value for b (y axis intersection)
init_p = numpy.array((init_a, init_b)) #bundle initial values in initial parameters
#calculate best fitting parameters (i.e. m and b) using the error function
p1, success = scipy.optimize.leastsq(errfunc, init_p.copy(), args = (x, y))
f = fitfunc(p1, x) #create a fit with those parameters
return p1, f
它精美的作品(雖然我不是當然,如果scipy.optimize在這裏使用是正確的,那麼它可能會超過頂端?)。
但是,由於數據點的方式,它不會給我一個0的Y軸截取。我知道在這種情況下它必須爲零,if x = 0 than y = 0
。
有什麼辦法可以強制這個嗎?
如果你知道你的截距是0,你爲什麼把它作爲你的函數自由參數,以適應?你可以將'b'作爲一個自由參數嗎? – Jdog 2012-04-03 09:51:09
啊。是。當然!我很抱歉,這是一個非常明顯的答案。有時我沒有看到樹木: - /這工作正常。非常感謝你指出我! – 2012-04-03 10:51:27
我只看到答案中的數據圖。與這個問題無關,你應該嘗試二階多項式來擬合。通常可以說,如果按照錯誤的順序,截取值爲空,我認爲在拋物線擬閤中,你會得到它。 – chuse 2014-02-14 15:11:15