ラッソ回帰とは?
📂統計的分析ラッソ回帰とは?
定義
y1y2⋮yn=11⋮1x11x12⋮x1n⋯⋯⋱⋯xp1xp2⋮xpnβ0β1⋮βp+ε1ε2⋮εn
n 個のデータが与えられており、p<n である場合、線形多重回帰モデルを設計行列で表すと上記のようになり、簡単に Y=Xβ+ε と表します。この時、次の最適化問題を BPDNbasis Pursuit Denoisingと呼び、BPDNを解くことを ラッソlASSO, Least Absolute Shrinkage and Selection Operatorまたはラッソ回帰lASSO regressionと呼びます。
βargmin(21∥Y−Xβ∥22+λ∥β∥1)
ここで、λ≥0 を チューニングパラメーターtuning Parameterと呼びます。
- ∥⋅∥2 はユークリッドノルムであり、∥⋅∥1 は絶対値の合計です。
説明
ラッソは、その名の通り、回帰問題で回帰係数の絶対値を縮小shrinkageして、最小限leastのみを選択selectionします。
機械学習では、BPDNを一般的な最小二乗問題に λ∥β∥1 を加えたl1 正則化regularizationとして見ることもできます。
なぜ使うのか?
スパース回帰の文書を先に読んでおくとより良いでしょう。
- 統計学の観点から: 解釈が簡単なモデルを見つけるためです。基本的に、回帰係数の大きさがデータのスケールに対して十分に大きくなければ統計的に有意ではないとされていました。つまり、必ずしも0ではないが、ほとんど0であれば、データを説明するために必要なものではないかもしれないということです。この解釈はラッソ回帰でも正確に同じとは限りませんが、結局のところ、‘小さい回帰係数’を見つけ出して処理することが目的です。
- 機械学習の観点から: オーバーフィッティングoverfittingを防ぐためです。与えられたデータをうまく説明するために非常に複雑な項を追加するか、追加データを確保して非常に特殊なケースまでカバーするモデルを作ることができるかもしれませんが、このように細かく合わせると、トレーニングデータでは優れていても実際のテストではひどい結果になる可能性があります。多くの変数に対して細かい回帰係数を見つけることは、オーバーフィッティングのリスクを増大させるため、データを説明する力を落とすペナルティを背負ってでも防ごうとするのです。
これは観点の違いに過ぎず、よく読むと同じことを言っています。
チューニングパラメーター λ
- この説明はリッジ回帰についてのものですが、チューニングパラメーターを扱う文脈ではラッソ回帰でも同じです。
定義で紹介されたチューニングパラメーター λ は、大きければ大きいほどペナルティpenalty ∥λ∥ が強くなりますが、これがあまりに小さいと単なる回帰分析と変わらず、あまりに大きいとデータを説明するかどうかにかかわらず、β=0 が最良の選択となってしまいます。極端な直感的な例として、データから出てくる値のスケールが0~10程度なのにペナルティに非常に大きな重み λ=106 を与えると、∥β∥ を小さくすることに夢中になって、本来の仕事―データをうまく説明するモデルを作ることが全くできなくなってしまいます。要点は、適切な λ を選択する必要があるということですが、数式だけを見た場合、λ が大きいか小さいか自体には特に良し悪しがないのです。

したがって、特別な直感や基準がない場合は、λ を変えながら目的関数が最小になるものを選択することも一つの方法です。上の図は、ある分析で λ を変えながらクロスバリデーションを行った後のエラーを λ の関数値として描いたグラフです。 このグラフは 5×10−1 の付近で最小値を持つことが縦の点線で示されており、特に理由がなければ λ はその値を使用するのが妥当です。
リッジ回帰との違い
歴史的にリッジridgeは1970年バイアス-バリアンストレードオフの関係で不偏性をある程度犠牲にしても少しのバイアスが生じることによりパラメーターの推定における効率性を向上させる方法として紹介され、ラッソlASSOは1986年に地球物理学geophysicsで初めて登場し、1996年に再紹介されてラッソという名前が付けられました。
- リッジ回帰の目的関数:
βargmin(∥Y−Xβ∥22+λ∥β∥22)
- 라쏘 회귀의 목적함수:
βargmin(∥Y−Xβ∥22+λ∥β∥1)
見ての通り、リッジ回帰とラッソ回帰の目的関数は非常に似ており、さまざまな点で関連していますが、正直なところ、似ているのは目的関数の形式的な見た目だけであり、これらの長所と短所を比較していること自体があまりにも単純化された視点かもしれません。一般的には、ペナルティ項が l1 か l2 か、微分可能で最適解が閉形式closed formで簡単に表現できるかどうか、実際に係数を 0 まで減らすことができるかどうかなど、リッジとラッソの違いについて多くの説明がされています。さらに詳しくなると、Pythonの例示コードが含まれ、経験的には通常どちらが優れているか、どのような場合には他の方がより良い可能性があるという言及が追加される傾向にあります。
…しかし、そのような説明は、書籍、ウィキペディア、ブログなどに溢れています。こうしたよく知られた事柄をきちんと整理した記事は、‘Ridge vs LASSO’とGoogleで検索すると簡単に見つかりますが、この投稿ではそれらよりも少し、ほんの少し深く入ってみようと考えています。
- 以下の内容は、ラッソ回帰の立場からリッジ回帰とどのように異なるかを説明します。リッジ回帰の立場からラッソ回帰をどのように見るかは該当の投稿で確認しましょう。
一般的に、ラッソ回帰のコストはリッジ回帰よりも高いとか、計算上複雑であるとよく説明されます。決して間違った指摘ではありませんが、そもそもペナルティ ∥λ∥ を背負いながらスパース回帰をしたいのであれば、そのようなコストは問題にならないかもしれません。

上の図では β^ は元の最小二乗問題の最適解であり、左側はラッソ回帰(l1)、右側はリッジ回帰(l2)の解空間を直感的に示しています。 このような幾何学的な説明は、前述のように ‘Ridge vs LASSO’ でGoogle画像検索をすると、その数を数えることができないほど多く、それだけで十分に良い説明です。
- (左側) ラッソ: 回帰係数 β1 と β2 の絶対値がある値 r と等しいということは、一辺の長さが r の正方形 ∣β1∣+∣β2∣=r 上のある点であるということです。BPDNの最適解は ∥Y−Xβ∥2 が作る等高線の中で最も低く、かつその正方形と重なる点でなければならず、図のように正確に軸上に位置することができます。解がある軸上にあるということは、他の次元のうち少なくとも一つ以上が 0 になったことを意味するため、ラッソは特定の回帰係数を正確に 0 にすることができます。
- (右側) リッジ: 回帰係数 β1 と β2 の二乗がある値 r と等しいということは、半径の長さが r の円 β12+β22=r 上のある点であるということです。ラッソと同様に、特定のレベルの r であっても β^ が作る等高線と円が交わる点は、ほぼ確実に軸上に位置することはありません。

もちろん、リッジ回帰もそれ自体で多くの良い意味を持っていますが、スパース回帰の文脈では、特定の係数を 0 にできない方法と比較されること自体が奇妙です。 特定のタイプのデータでは、λ を与えることによって、オーバーフィッティングの観点から、計算速度とシンプルさの観点から… そのすべての仮定が無意味になるかもしれません。リッジ回帰はできないことをラッソ回帰はできますし、根本的にこの違いを埋める方法はありません。ラッソかリッジかという比較は、長所と短所や些細な違いで判断するものではないということです。
- 結果だけを考えると、βk=0 と βk≈0 はあまり違わないかもしれませんが、計算のプロセスまで考えると、βk=0 の独立変数 Xk はそもそも除外できるという点が大きく異なります。もしリッジ回帰では βk≈0 であっても、ラッソ回帰では確実に βk=0 となる変数が100万個程度ある場合、モデルとしてのパフォーマンスが似ていても、リッジ回帰は1つのデータポイントのフィッティングごとに100万回の乗算がさらに必要になるのです。
一方で、ラッソは実際に特定の条件下で最適解の閉形式closed formが知られており、その最適解にソフトしきい値処理が使用されます。つまり、数式自体で βk を 0 にする部分があり、ラッソ回帰を視覚的、直感的に頼らずに感覚を掴むには、以下のような数式的な議論を理解する必要があります。
公式
最適解
L(β)=21∥Y−Xβ∥22+λ∥β∥1
λ が定数として与えられている場合、ラッソ回帰の目的関数 L を上記のように表します。一般的にラッソ回帰の最適解は閉形式closed formがないのですが、X の全ての列が互いに直交していると仮定すると、β^=argminβL(β) の k 番目の成分 (β^)k は以下のようになります。
(β^)k==(XTX)kk1ηλ(XTY)k(XTX)kk1⎩⎨⎧(XTY)k+λ0(XTY)k−λ,if (XTY)k<−λ,if (XTY)k∈[−λ,λ],if (XTY)k>λ
ここで AT は A の転置行列、A−1 は A の逆行列であり、ηλ はソフトしきい値処理です。
導出
ベクトルと行列の勾配:
∂w∂(wTRw)=(R+RT)w
残差二乗和の勾配:
f(s):=(y−Xs)TR(y−Xs)
ベクトル y∈Rn と行列 X∈Rn×p、R∈Rn×n が s に依存しない場合、次のことが成り立ちます。
∂s∂f(s)=−XT(R+RT)(y−Xs)
R=I の場合、上記の公式を適用すると
∂β∂L(β)=====∂β∂21∥Y−Xβ∥22+∂β∂λ∥β∥∂β∂21(Y−Xβ)T(Y−Xβ)+λ∂β∂∥β∥−21XT(I+IT)(Y−Xβ)+λ∂β∂∥β∥−XT(Y−Xβ)+λ∂β∂∥β∥−XTY+XTXβ+λ∂β∂∥β∥
となり、β=β^ は ∂β∂L=0 を満たさなければならないため、整理すると以下が得られます。
XTXβ^=XTY−λ∂β∂∥β∥
これで k=0,1,⋯,p に対して β^k:=(β)k を考えると、行列 A の i 番目の行を (A)i⋅ と表すと、
⟹⟹⟹XTXβ^=XTY−λ∂β∂∥β∥(XTX)i⋅β^=(XTY)i−λ∂β^i∂j=0∑p∣βj∣j=0∑p(XTX)ijβ^j=(XTY)i−λ∂β^i∂β^iβ^i=(XTX)ii1(XTY)i−λ∂β^i∂β^i−j=i∑(XTX)ijβ^j
という方程式が得られます。β^i が他の β^j に依存しているため、この解を閉形式とは言えませんが、(XTX)ij=0 の場合、β^j を考慮する必要がないことがわかります。したがって、X の列が直交するという仮定を追加すると、X の列が直交するということは XTX が対角行列であることを意味します。
β^k は正、負、または 0 のいずれかです。もし β^k>0 であれば、
⟹⟹β^k>0β^k=(XTX)kk1[(XTY)k−λ∂β^k∂β^k]>0β^k=(XTX)kk1[(XTY)k−λ]>0
となるため、β^k>0 であるだけでなく、(XTY)k>λ でなければなりません。同様に β^k<0 であれば、
⟹⟹β^k<0β^k=(XTX)kk1[(XTY)k−λ(−1)]>0β^k=(XTX)kk1[(XTY)k+λ]<0
となるため、(XTY)k<−λ でなければなりません。その他の場合は β^k=0 であり、以下のようにソフトしきい値処理を通じて要約できます。
β^k==(XTX)kk1⎩⎨⎧(XTY)k+λ0(XTY)k−λ,if (XTY)k<−λ,if (XTY)k∈[−λ,λ],if (XTY)k>λ(XTX)kk1ηλ(XTY)k
■
アルゴリズム
β^i=(XTX)ii1(XTY)i−λ∂β^i∂β^i−j=i∑(XTX)ijβ^j
導出過程で既に確認したように、暗黙的implicitな方程式があるだけであっても、β^j を求めることができないという意味ではありません。勾配降下法などの反復的iterativeなアルゴリズムを用いて近似解を求めることができます。 BPDNを見ただけでは、一般的な最適化問題とは異なり、求めた解を検証する方程式があるため、状況は比較的良好です。一方で、勾配降下法を使用する場合であっても、X の列が適切に直交している場合は、上記の公式で得られる最適解を初期値として使用することができます。変数間の独立性に問題がある場合、その問題をラッソの欠点として指摘するのは困難です。
関連項目