最小二乗法
en: least squares method
線形回帰モデルの推定に使う計算方法
curve fittingの一種
i.e. linear curve fitting
直線だけど
#回帰分析
数式
傾き A
$ = \frac{\mathrm{Cov}[X,Y]}{\mathrm{Var}[X]}
$ = \frac{ E[(X - E[X])(Y - E[Y])] }{ E[(X - E[X])^2] }
分散と共分散とを使う。
相関係数ではない。
切片 B
$ = E[Y] - A\,E[X]
性質
得られた直線は必ず$ (μ_X,μ_Y)を通る。
$ ∵ μ_Y = B + A\,μ_X
Aは X と Y の平行移動に対して不変 (i.e. shift-invariant)
Var も Cov も不変なので
図形的に考えれば、傾きが並進不変 (translation invariant) なのは当然
cf. Translational symmetry - Wikipedia
algorithm
one-pass で計算したい。
可能なら stream処理にしたい。 #streaming
aka. online algorithm
でもオンライン処理で正確度を たもてるのか?
精度を気にするなら、データ点ごとに移動平均を引く方が良い。桁落ちもしない。
$ M = \frac{ Σ_i(x - \bar{x})(y - \bar{y}) }{ Σ_i(x - \bar{x})^2 } = \frac{ Σ_i(y - \bar{y}) }{ Σ_i(x - \bar{x}) }
wint.icon この変形は合法か?
下のアルゴリズムを見る限りは大丈夫そう。
Welford's online algorithm を利用する。
code:online
let n := data.len();
let mut mx = my = v = c = m = b := 0;
for (x,y) in data {
let dx = x-mx;
mx += dx/n;
let dy = y-my;
my += dy/n;
v += (x-mx)*dx;
c += (x-mx)*dy;
// simply?
m += dy/dx;
}
m := c/v;
b := my - m*mx;
Cov と Var とで相殺するので、不偏か どうかは 気にしなくて良い。
ref.
最小二乗法 - Wikipedia
Algorithms for calculating variance - Wikipedia
https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Covariance
One-pass algorithm - Wikipedia
#記述統計学 #計算統計学