見落とされた変数に 救いの手を
“FindingAlternate Features in Lassos”
1.“Finding Alternate Features in Lassos”の一部をRでトレースします
(Satoshi Hara and Takanori Maehara (2016): "Finding Alternate Features in Lasso", in NIPS 2016 workshop on
Interpretable Machine Learning for Complex Systems, December 10th, 2016.)
2.{glmnet} で実装して使ってみます
Lassoにおける変数選択と代替候補となる変数の可視化
第58回R勉強会@東京(#TokyoR)
変数選択(モデル選択) どうしてますか?
オペレーションズ・リサーチ2013 年 5 月号,261-266
LASSO
Lasso の変数選択の問題点#2
#1
• 「変数の数>>サンプルサイズ」 なデータの扱い
• http://www.slideshare.net/kato_kohaku/oracle-property-andhdmpkgrigorouslasso
#2
• “Finding Alternate Features in Lassos”の論文紹介
• Rで線形回帰だけ実装したので{glmnet}の Lassoにおける変数選択と
代替候補となる変数を可視化
• 重回帰分析の前処理をとしての多重共線性のチェックを、二次工程に
回せるのでは?
• 二値分類とかは本家のPythonで。
Lasso
• 回帰モデルの係数 (β)の絶対値を大きくしたくない
→ 損失関数に罰則項を加えた目的関数L(β)とする
𝐿 𝛽 = 𝑓 𝑋𝛽, 𝑦 + 𝑃(𝛽)
= 𝑓 𝑋𝛽, 𝑦 + 𝜆 𝛽 1
The Lasso optimal solution
• この目的関数を最小化するような推定量(β*)を求める
𝛽∗
= argmin
𝛽
𝑓 𝑋𝛽, 𝑦 + 𝜆 𝛽 1
Lasso
• 線形重回帰モデルで、最小二乗法で係数を推定をする場合:
|β|の大きさに対する罰則項最小二乗法
λは罰則の大きさを
調整するパラメータ
βの絶対値を大きさを
定数 t 以下に抑えたい
最小二乗法
Lassoの縮小推定(shrinkage)
Hao Helen Zhang, Fall 2015 Lecture 12: Variable Selection - Lasso
推定された βj が0なら
変数 xj は
予測に貢献しない
Lassoの罰則項
soft-thresholding operator
Hao Helen Zhang, Fall 2015 Lecture 12: Variable Selection - Lasso
Lassoの推定量( )と、
最小二乗推定量( )には、
以下の関係がなりたつ
λ
Lassoの罰則の強さと推定量と変数選択
λ
log(λ)
λが大きいほどLassoので0と推定される変数が増える
Lassoと変数選択
Lassoによって「よいモデル」を推定したい
=最適な罰則の強さ(λ)の下で選ばれる
変数とその推定量を決めたい
• λ → 0 (no penalty) では、罰則のない重回帰
• λ → ∞ では、定数項だけのモデル
※ 典型的にはcross-validation errorを眺めながら決める
> plot(cv.glmnet(X, y)) > plot(glmnet(X, y) , xvar = "lambda")
λ
log(λ)
Lassoと変数選択: 見落としの問題
• 変数の数p がサンプルサイズnよりも多い場合(p>n)、
選択される説明変数はサンプルサイズを超えない
→ 幾つかの改良法が提案されている
• http://www.slideshare.net/kato_kohaku/oracle-property-andhdmpkgrigorouslasso
• 重要な変数のあいだに高い相関 がある場合、
それらの変数のうちの1つだけを選びたがる
https://arxiv.org/abs/1611.05940
変数間に高い相関がある場合の見落としに着目
余談ですが..
https://arxiv.org/abs/1606.09066
https://github.com/sato9hara/defragTrees
defragTrees の作者
この論文の提案: Alternate Lasso
選択された変数が使われなかった としたら
代わりにどの変数が選択されるか を出力
↓
複数の解候補を提示することで利用者に納得感を与える
特徴量たちの関係理解・結果の解釈性が高まると期待
著者らによる研究の説明から改変
http://www.prefield.com/commentary.html
Lassoを解きなおす: Alternate Lasso
The Lasso optimal solution
• この目的関数を最小化するような推定量(β*)を求める
𝛽∗
= argmin
𝛽
𝑓 𝑋𝛽, 𝑦 + 𝜆 𝛽 1
Alternate Lasso
• Lasso推定量(β*)のうち β*i≠0, β*j=0 となる i,j の組について
β*i=0, βj≠ 0 とおいて、β*jの推定量を求める
𝛽𝑗∗ = argmin
𝛽 𝑗
𝑓 𝑋𝛽∗
− 𝑋𝑖 𝛽𝑖∗ + 𝑋𝑗 𝛽𝑗+ , 𝑦 + 𝜆 𝛽 1
非ゼロ項について足し上げ β*i=0 βj≠ 0
再推定
β*i=0, βj≠ 0 とおいて、β*jの推定量を求める
再推定された βj が0なら
変数 xj は xi を代替しない
Alternate Lassoの変数スコア
• 「差し替えた後の目的関数値がほとんど変わらない」変数は、
オリジナルに近いと考える。つまり、
score(xi → xj ) が小さいほどオリジナルに近い
ここで、
score 𝑥𝑖 → 𝑥𝑗 = 𝐿 𝛽 𝑖→𝑗
− 𝐿 𝛽∗
𝐿 𝛽 は目的関数:
𝐿 𝛽 = 𝑓 𝑋𝛽, 𝑦 + 𝑃(𝛽)
𝛽∗はLassoが選んだ推定値
どれくらい代わりになるか?という指標(相対値)
作った: Rでminimal
• 線形回帰モデル
• 最小二乗法
• soft-thresholding operator
https://github.com/katokohaku/AlternateLassoR
著者のgithubのPython実装をみながら
Rで実装
動作確認: シンプルな人工データ
• 重要な変数=X1, X2
• X1と相関: X3, X4
• X2と相関: X5
• 無関係な変数: X6
作った: re-fit
作った: print() & summary()
glmnetのLassoで
推定したβを解きなおす
作った: plot()
使ってみた: Boston Housing Data Set
https://archive.ics.uci.edu/ml/datasets/Housing
http://pythondatascience.plavox.info/scikit-learn/scikit-learn に付属しているデータセット/
米国ボストン市郊外における
地域別の住宅価格のデータセット
使ってみた: Boston Housing Data Set
あとで再利用するので
あらかじめデータを正規化
CVでλを見つつ
今回はλ.1SEを採用
使ってみた: Boston Housing Data Set
• Scoreの順と相関の大きさの順は概ね一致
• しないことも結構あるっぽい
• 解釈はできるような、できないような..
町毎の児童と教師の比率(ptratio) alt score cor
1 $10,000 ドルあたりの不動産税率の総計 tax 0.01382 0.460853
2 町毎の児童と教師の比率(ptratio) zn 0.015046 -0.39168
3 小売業以外の商業が占める面積の割合 indus 0.015151 0.383248
4 環状高速道路へのアクセスしやすさ rad 0.016183 0.464741
5 1940 年より前に建てられた物件の割合 age 0.016962 0.261515
まとめ
やらなかったこと
• Python版にあるpredict()とevaluate()の実装
• 予測はオリジナルのモデルでやればよいのでは。
• 線形回帰以外のモデル
所感など
• 適用対象が広い
• 適当な損失関数+罰則項の再最適化なので、適用対象がフレキシブル
• 元論文(Python版)には、ロジスティックロス関数で2値分類する実装も有り
• Scoreの順が変数間の相関と必ずしも一致しないので、Lassoの枠組みの中では、単純
に多重共線性を見るよりは良い?
• 重回帰分析の前処理をとしての多重共線性のチェックを、二次工程に回せるのでは?
発展版の続報が出てた
• Satoshi Hara and Takanori Maehara (2017): "Enumerate Lasso Solutions for Feature Selection",
in Proceedings of the 31st AAAI Conference on Artificial Intelligence (AAAI'17), San Francisco.
California, United States, February 4th--9th, 2017
• Python実装がすでに著者のGithubで公開中
参考文献
• 紹介した論文
• Satoshi Hara and Takanori Maehara (2016): "Finding Alternate Features in
Lasso", in NIPS 2016 workshop on Interpretable Machine Learning for
Complex Systems, December 10th, 2016.
• https://arxiv.org/abs/1611.05940
• 著者によるPython実装@Github:
• Binary classificationあり、predict()あり。
• https://github.com/sato9hara/LassoVariants/tree/master/AlternateLasso
• 著者らによる研究紹介
• http://www.prefield.com/commentary.html
• 実装時の参考
• Lassoの理論と実装 -スパースな解の推定アルゴリズム-
• http://qiita.com/hogefugabar/items/71916560f7efc6eededf

Introduction of "the alternate features search" using R