私はいくつかの(x、y)データ点を通って最良のフィットラインを見つけるために一般化最小二乗適合をしようとしています。私はscipyでこれを行うことができましたが、私は体重を加えるのに問題があります。元のフィットの残差からウェイトを取得し、ウェイトを使って最小二乗法で再フィットを試みたいと思います。ウェイトは残差の逆数でなければなりませんが、-1 < residuals < 1
以降であり、これは一例に過ぎません。残差をウェイトとして使用しても問題ありません。このscipy最小二乗最適化ルーチンでウェイトを適用するにはどうすればよいですか?
(x、y)データポイントは他の場所で計算され、目的は、最適フィッティングラインy = x/alpha +切片のアルファ(1 /スロープ)と切片を見つけることです。次のように私のコードは次のとおりです。
import numpy as np
from scipy.optimize import least_squares
ydata = [9.7372923, 10.0587245, 10.3838510, 10.6931371, 10.9616260, 11.1833220, 11.3806770, 11.5248917, 11.7353000]
xdata = np.array([j+5 for j in range(len(ydata))])
def get_weights(resid):
"""
This function calculates the weights per (x,y) by using the inverse of the squared residuals divided by the total sum of the inverse of the squared residuals.
This might be incorrect but should work for the sake of example.
"""
total = sum([abs(resid[i]) for i in range(len(resid))])
fract = np.array([resid[i]/total for i in range(len(resid))])
return fract
def get_least_squares_fit(xs, ys):
"""
This function finds alpha (1/slope) and the y-intercept in the equation
of a line y = x/alpha + intercept = mx + b
"""
## SPECIFY INITIAL GUESS OF OPTIMIZED PARAMETERS
params_guess = [1/3, 9] ## ps = [alpha, intercept]
## DEFINE FITTING FUNCTIONS
fit_func = lambda ps,x : x/ps[0] + ps[1]
err_func = lambda ps,x,y : fit_func(ps,x) - y
## GET OPTIMIZED PARAMETERS, RESIDUALS & WEIGHTS
res = least_squares(err_func, params_guess, args=(xs, ys))
alpha, intercept, residuals = res.x[0], res.x[1], res.fun
weights = get_weights(residuals)
return alpha, intercept, residuals, weights
alpha, intercept, residuals, weights = get_least_squares_fit(xdata, ydata)
print(alpha, intercept)
>> 4.03378447722 8.6198247828
print(residuals)
>> [ 0.12206326 0.04853721 -0.02868313 -0.09006308 -0.11064582 -0.08443567
-0.03388451 0.06980694 0.1073048 ]
EDIT:私はsigma
とabsolute_sigma
を持ってscipy curve_fitを、使用して同じ結果を得ることができます。私はこれを推し進めている最善の方法です。私はまだそれを理解しようとしています。
最低に乗相対誤差の最低の合計にフィット、元のデータの相対的な回帰を実行するためにあなたの全体的な目標を達成するのに十分ではなく、フィッティングだろう平方絶対誤差の和? –
この例ではこれで十分です。私は体重よりも体重を適用する方法にもっと関心があります。絶対的な広場はちょうど私の部分の推測でした。 – mikey