2016-06-22 3 views
0

Numpyは、X_i * beta = Y_i(ここで、X_iはmxn行列、betaは長さ)のようなベータを推定するために、np.linalg.lstsq(X、Y) -n行ベクトルであり、Yは長さn列ベクトルである。Pythonにおけるインクリメンタルな最小二乗

ただし、Xに行を追加してYに値を追加すると、繰り返しベータ推定が必要な場合はどうなりますか?言い換えれば、私は最初に1つの(x、y)ペアを持つベータを推定し、次に2つの(x、y)ペアを使用してベータを推定し、3つ(x、y)のペアを使用してベータを推定します。これは、たとえば、オンライン学習環境でのものです。

np.linalg.lstsq(X、Y)への繰り返し呼び出しは、XとYを繰り返し更新しても動作しますが、以前の計算は使用しません。これは無駄に思える。

もっと良い方法がありますか?

+0

[Dynamic Programming](https://www.codechef.com/wiki/tutorial-dynamic-programming)のようなアプローチを検討してください。 – Andrew

答えて

0

新しい(x、y)ペアごとにベータを再計算して以前の計算を保存する独自の関数を作成しました。

具体的には、我々は

によってベータを推定する一般的に対応するn個のY-観測値の列ベクトルとしてR^nは、n個のX-観測行列とyとR ^(NXD)で与えられたX、

beta_hat =(X^TX)^( - 1)(X ^のTy)

次に、あなただけのオンラインR ^(DX1)にR ^(DXD)でX^TXを維持し、X^Tyのことができます。我々は

X^TX = np.add(X^TX、np.outer(x_nに関する+ 1))を再計算(x_nは+ 1、y_n + 1)新しい例を追加するたとえば

X ^のTy = np.add(X^TX、np.multiply(x_nに関する+ 1、np.tile(y_n + 1、D)))

T.

への依存性を除去する私はこれを想像しますパンダなどのどこかに存在しますが、自分で実装するだけでも簡単です。

関連する問題