「実行中の」線形またはロジスティック回帰パラメーターを計算するアルゴリズムはありますか?


32

http://www.johndcook.com/standard_deviation.htmlの論文「実行中の分散を正確に計算する」 は、実行中の平均、分散、標準偏差を計算する方法を示しています。

新しいトレーニングレコードが提供されるたびに、線形またはロジスティック回帰モデルのパラメーターを同様に「動的に」更新できるアルゴリズムはありますか?


1
巨大なトレーニングセットまたはデータの連続入力ストリームを使用すると、確率的勾配降下法などの反復アルゴリズムを使用して、先へ進むにつれて小さなバッチで入力を取得できます。それはあなたが求めていたものですか?
アンドレイスター

1
ルックアップRLSアルゴリズムとそのバリアント。en.wikipedia.org/wiki/Recursive_least_squares_filter
Memming

回答:


20

線形回帰係数y=ax+bである= C O V X Y / V R X 及びB = mは電子N Y - mは電子N Xがa=cov(x,y)/var(x)b=mean(y)amean(x)

したがって、本当に必要なのは、cov(x,y)を計算するためのインクリメンタルな方法だけです。この値とxの分散、およびyxの両方の平均から、パラメーターab計算できます。以下に示す擬似コードでわかるように、cov(x,y)増分計算はvar(x)増分計算に非常に似ています。これは驚くべきことではありませんvar(x)=cov(x,x)

おそらく探している擬似コードは次のとおりです。

init(): meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0

update(x,y):
n += 1
dx = x - meanX
dy = y - meanY
varX += (((n-1)/n)*dx*dx - varX)/n
covXY += (((n-1)/n)*dx*dy - covXY)/n
meanX += dx/n
meanY += dy/n

getA(): return covXY/varX
getB(): return meanY - getA()*meanX

R=(XX)1XYとして多変量回帰をインクリメンタルに計算する同等のアルゴリズムを探しているときにこの質問を見つけたので、XR=Y+ϵ


4
ご協力いただき、ありがとうございます!線形回帰に関する質問の一部は、実際にはstats.stackexchange.com/questions/6920 / ...の複製であり、その答えは、多重線形回帰モデルを更新する方法を示しています。質問のロジスティック回帰部分は独立して関心があるので、現在のスレッドは立つことができます。実際、ロジスティック部分でさえstats.stackexchange.com/questions/59174/…で複製されています。
whuber

1
この答えは、質問で与えられた参照テキストを考慮すると役に立つと思いました。リンクありがとうございます。しかし、それは私が探しているものではありません。私のユースケースは明らかに特定のものです。
chmike

3
私はそれが有用であると信じており、実用的なコードを提供する点でユニークです。
whuber

なぜdx * dy回(n-1)/ nを許可するのかをお聞きしますか?
FavorMylikes

p値を計算するためにコードを改善できますか?
ネイサン

12

あなたの2つの特定の例:

線形回帰アレクサンダー・ストレールとマイケル・リットマンによる 論文「オンライン線形回帰とそのモデルベースの強化学習への応用」は、インクリメンタル更新を使用した線形回帰ソリューションへの近似を提供する「KWIK線形回帰」(アルゴリズム1を参照)と呼ばれるアルゴリズムについて説明しています。これは正規化されていないことに注意してください(つまり、リッジ回帰ではありません)。Strehl&Littmanの方法はその設定にまで拡張できないと確信しています。

ロジスティック回帰

このスレッドは、問題にいくつかの光を当てます。引用:

正則化制約がなくても、ロジスティック回帰は非線形最適化の問題です。すでにこれには分析ソリューションがありません。これは通常、更新ソリューションを導出するための前提条件です。正則化制約では、制約付き最適化問題になります。これにより、制約のない問題がすでに抱えていたものに加えて、まったく新しい非分析的合併症が導入されます。

ただし、他のオンライン(またはインクリメンタル)回帰方法を検討することをお勧めします。たとえば、局所加重投影回帰(LWPR)


ロジスティック回帰については、不必要に悲観的だと思います。ロジスティック回帰は、異なる平均と共有共分散を使用して、各クラスガウス分布の2クラス問題の事後クラス確率を計算することと同等です。共分散のMLEは、クラスごとの共分散の加重合計であるため、十分な統計情報は、クラスごとのカウント、合計、および平方和だけです。明らかに、十分な統計を使用して正確な更新を作成するのは簡単です。
ロバートドディエ

3
@RobertDodierロジスティック回帰ではなく、線形判別分析について説明しました。ここで紹介セクションの最後の段落は、関係を明確にします。
-ahfoss

@ahfossクラスごとのデータが正規分布していない場合でも、クラスごとの共分散を介してロジスティック回帰に相当するモデルを構築できます。
ロバートドディエ16

1
@RobertDodier同等のモデルとは何ですか?あなたは、実質的に難しい問題に対する明らかな解決策があることを暗示しているようです。あなたのソリューションは、あなたが思っているよりも素晴らしいか、それともはるかに劣っています。
ahfoss

11

一般原則として:

0)十分な統計と現在のML推定値を保持します

1)新しいデータを取得したら、十分な統計と推定値を更新します

2)十分な統計がない場合は、すべてのデータを使用する必要があります。

3)通常、閉形式のソリューションはありません。以前のMLEを開始点として使用し、便利な最適化手法を使用してそこから新しい最適なものを見つけます。特定の種類の問題インスタンスに対して、どのアプローチが最良のトレードオフになるかを見つけるために、少し実験する必要がある場合があります。

問題に特別な構造がある場合、おそらくそれを悪用することができます。

いくつかの値を持っている場合と持っていない場合があるいくつかの潜在的な参照:

McMahan、HB and M. Streeter(2012)、
Open Problem:Better Bounds for Online Logistic Regression
JMLR:Workshop and Conference Proceedings、vol 23、44.1-44.3

ペニー、WDおよびSJロバーツ(1999)、
ダイナミックロジスティック回帰
Proceedings IJCNN '99


十分な統計を保持するという考えに同意します(問題に対して存在する場合)が、十分な統計が存在することで他のものは不要になりませんか?十分な統計がある場合は、データセット全体を使用した場合とまったく同じように、更新されたパラメーターを計算できます。現在のパラメーターを考慮する必要はなく、最適化手法を試す必要もありません。
ロバートドディエ

2
ただし、十分な統計情報があるからといって、方程式の解が得られるわけではないことに注意してください。
グレン_b-モニカの復帰

8

tdcの答えに加えて、反復ごとに一定の時間だけで、任意の時点で係数の正確な推定値を計算する既知の方法はありません。ただし、合理的で興味深いいくつかの選択肢があります。

最初に確認するモデルは、オンライン学習の設定です。この設定では、世界は最初にxの値をアナウンスし、アルゴリズムはyの値を予測し、世界は真の値y 'をアナウンスし、アルゴリズムは損失l(y、y')を被ります。この設定では、単純なアルゴリズム(勾配降下法と指数勾配法など)が準線形後悔を達成することが知られています。つまり、より多くの例を見ると、可能な限り最良の線形予測子と比較した場合、アルゴリズムが犯す余分なミスの数は、例の数に応じて増えません。これは、敵対的な設定でも機能します。これらの後悔の限界を証明する一般的な戦略の1つを説明する優れた論文があります。Shai Shalev-Schwartzの講義ノートも役立ちます。

オンライン学習設定には、バンディット設定と呼ばれる拡張機能があり、アルゴリズムには、それがどれだけ間違っているかを表す数値のみが与えられます(正しい答えへのポインターはありません)。印象的なことに、オンライン学習の多くの結果はこの設定に引き継がれますが、ここでは、探索と悪用を余儀なくされ、あらゆる種類の興味深い課題につながります。


6

他の答えは機械学習の世界を指しており、それは確かにこの問題が対処されている1つの場所です。

ただし、ニーズにより適した別のアプローチは、低ランクの更新でQR分解を使用することです。これを実行し、それを使用して最小二乗問題を解決する方法を以下に示します。

HammerlingとLucasによるQR分解と最小二乗問題の更新


5

yt=βtxt+εt,βt=βt1+ηt
βt=βt1

yt=logit(βtxt+εt),βt=βt1+ηt

2

これは、@ chmikeの回答に追加することです。

この方法は、BP Welfordの標準偏差のオンラインアルゴリズムに似ており、平均も計算します。ジョンクックはここで良い説明をします。2009年のトニーフィンチは、指数移動平均と標準偏差の方法を提供します。

diff := x – mean 
incr := alpha * diff 
mean := mean + incr 
variance := (1 - alpha) * (variance + diff * incr)

以前に投稿された答えをじっくりと見て、指数関数的な移動ウィンドウを含めるように拡張します。

init(): 
    meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0,
    meanXY = 0, varY = 0, desiredAlpha=0.01 #additional variables for correlation

update(x,y):
    n += 1
    alpha=max(desiredAlpha,1/n) #to handle initial conditions

    dx = x - meanX
    dy = y - meanY
    dxy = (x*y) - meanXY #needed for cor

    varX += ((1-alpha)*dx*dx - varX)*alpha
    varY += ((1-alpha)*dy*dy - varY)*alpha #needed for corXY
    covXY += ((1-alpha)*dx*dy - covXY)*alpha

    #alternate method: varX = (1-alpha)*(varX+dx*dx*alpha)
    #alternate method: varY = (1-alpha)*(varY+dy*dy*alpha) #needed for corXY
    #alternate method: covXY = (1-alpha)*(covXY+dx*dy*alpha)

    meanX += dx * alpha
    meanY += dy * alpha
    meanXY += dxy  * alpha

getA(): return covXY/varX
getB(): return meanY - getA()*meanX
corXY(): return (meanXY - meanX * meanY) / ( sqrt(varX) * sqrt(varY) )

上記の「コード」では、desiredAlphaを0に設定することができ、その場合、コードは指数的な重み付けなしで動作します。移動するウィンドウのサイズに対してModified_moving_averageが示唆するように、desiredAlphaを1 / desiredWindowSizeに設定することをお勧めします。

副次的な質問:上記の代替計算のうち、精度の観点からより良いコメントはありますか?

参照:

chmike(2013)https://stats.stackexchange.com/a/79845/70282

クック、ジョン(nd)実行分散を正確に計算するhttp://www.johndcook.com/blog/standard_deviation/

フィンチ、トニー。(2009)加重平均と分散の増分計算。https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf

ウィキペディア。(nd)ウェルフォードのオンラインアルゴリズムhttps://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.