切片はGLMnetでどのように計算されますか?


8

R以外のソフトウェアを使用して線形回帰用のGLMNETバージョンのエラスティックネットを実装してきました。糖尿病データの lassoモードでR関数glmnetと結果を比較しました。

変数の選択は、パラメーター(ラムダ)の値を変更する場合は問題ありませんが、係数の値が少し異なります。これと他の理由で、アルゴリズム全体で切片(ターゲット変数の平均と見なします)を変更しないので、現在の近似を計算するときの更新ループの切片に由来すると思います。 Trevor Hastieの記事(座標降下による一般化線形モデルの正則化パス、 7ページ、セクション2.6)で説明されています:

切片は正則化されていません。[...]ラムダのすべての値について[...] [L1制約パラメーター]

しかし、この記事にもかかわらず、R関数glmnetは、正則化パスに沿った切片に異なる値を提供します(ラムダの異なる値)。傍受の値がどのように計算されるかについて誰かが手掛かりを持っていますか?

回答:


8

GLMnetの切片は、新しい係数の更新が収束した後に計算されることがわかりました。切片は、の平均との平均を使用して計算されます。この式は、前の式と似ていますが、更新ループの後のがあります。。yixijβjβ0=y¯j=1pβj^xj¯

Pythonではこれは次のようなものになります:

        self.intercept_ = ymean - np.dot(Xmean, self.coef_.T)

scikit-learnページで見つけまし

編集:係数は前に標準化する必要があります:

        self.coef_ = self.coef_ / X_std

β0=y¯j=1pβj^xj¯i=1nxij2


これは、モデルが線形でエラーの平均がゼロであると仮定して、切片を計算する標準的な方法であることを付け加えておきます。
mpiktas 2011

確かに、それにもかかわらず、著者たちは自分の記事ですべての値について明示的に述べており、さらに、アルゴリズムのどの時点で計算されるのかはβ0=y¯ αλ
明言し

著者はと想定しているため、これは真実です。3ページの最初の部分では、予測子が中央にあると想定していると述べていますが、「...結果は自然に一般化します...」なので、標準化されていない場合に限定されません。あなたが見つける公式はこの自然な一般化です。x¯=0
mpiktas 2011

ただし、アルゴリズムの予測子に標準化が適用されている(したがって平均が中央に配置されている)場合でも、標準化されていないデータ(したがって、通常は)を使用して、によって表示されるさまざまな切片に適合します。それらは係数の更新に同じを使用しますが、生データと切片を適合させ、事後的に行います。x¯0glmnetβ0=constant=y¯
yelh

3

これをターゲット変数の平均と見なします

これはあなたが間違っているところかもしれないと思います:線形モデルとは異なり、予測子を再パラメーター化してそれらが常に切片に直交するようにすることはできないため、切片を単に平均として計算することはできません。


私が説明した記事で、このメソッドの作成者はalphaとlambdaのすべての値にY_i(説明された変数の観測値)の平均を使用すると書いているため、説明された変数の平均を採用しました。ここで、glmnet関数の出力を見ると、すべてのラムダに当てはまるわけではないようです。そのため、各正則化パラメーターラムダの切片を計算する方法はわかりません。
yelh

私の推測では、それらは加重平均を使用しています(重みは変化するため)。λ
Simon Byrne、2011

あなたの考えを正確に教えていただけますか?考慮すべき重みの式はどれですか?
yelh

紙に、それぞれ「内側ループ」は式17を介して前フィット値によって定義される量を有する献上、加重最小二乗問題である
サイモン・バーンズ

1
scikit-learnのpythonコードを見て答えを見つけたのは問題ありません(glmnetのソースコードはFortranにあり、お茶ではありません)。興味があれば後で共有します。とにかくありがとう !
yelh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.