へちやぼらけのブログ

総PV数30万を達成!主にVtuber・VRの紹介記事などを執筆する。

VTuber大好きライター !
VTuber評論家として、気になったVTuberの魅力を日々記事にしてます。

【新規性あり!】Lasso回帰を「適切な変数予測」に適用することができるのではないか?

お疲れ様です。東京で仕事をしているものです。へちやぼらけと申します。(統計学機械学習に関する動画も投稿している、所謂YouTuberです。笑)

www.youtube.com

f:id:hetiyaborake:20191214002629p:plain

仕事の関係でLasso回帰を扱っていたのですが、『lassoの変数選択を利用して、「適切な変数予測」をしてみたら面白そう!』と思ったので実際にやってみました。完全なるコーヒーブレイクの記事です。気軽な気持ちで読んでください。

Lasso回帰を知らない方は以下の記事を参照。

ちなみにですが、線形重回帰は与えられたデータで目的変数yを予測する技術です。↓↓

f:id:hetiyaborake:20190512230152p:plain

一方、Lasso回帰はyの予測式を立てるだけでなく、不要な変数を0にしてくれます。↓↓

f:id:hetiyaborake:20190512230732p:plain

yの予測式+不要な変数の除外機能を持ったのがLasso回帰。

f:id:hetiyaborake:20190512230842p:plain

だ、このケースでは「説明変数と目的変数が比例(直線)の関係にある」という制約があります。

説明変数が「0⇒1」と増加した場合も、「100000⇒100001」と増加した場合も、等しく「b」分だけyに影響を与えます。(yとxが多変量正規分布に従うなら良さそうですけど、実データが多変量正規分布に従うケースは多くは無い。)

f:id:hetiyaborake:20190512231116p:plain

図の様にxの増加と共にyに与える影響が大きくなる様な説明変数・xの増加と共にyに与える影響が小さくなるような説明変数もあっても良くないですか?

結局、yの目的変数はどの形が適切なんですかね?

f:id:hetiyaborake:20190512231433p:plain

と、言うことで「その選択」をLassoにやってもらいました。目的変数に関する関数を書きまくってlassoにかけます。果たしてどうなるか?

f:id:hetiyaborake:20190512231609p:plain

当然、目的変数に関する関数同士には強い相関が発生します。よって、多重共線性が起こってしまいます。Lassoで求めたyのモデルにバラツキが出てしまう。

f:id:hetiyaborake:20190512231744p:plain

なので、集団学習を使ってyのモデルを求めます。学習用のデータを変えて学習させます。

f:id:hetiyaborake:20190512231919p:plain

 

◇実践

f:id:hetiyaborake:20190512232029p:plain

実際に解析してみました。使ったデータは「発電量と風速のデータ」です。

グラフを見る限り明らかに直線ではない。直線による回帰は当てはまりが悪そうですね。(風速5⇒6と増加した時と、風速9⇒10と増加した時で、発電量に与える結果が明らかに異なります。)

手始めに、直線で回帰直線を予測してみました。特筆したいのは、決定係数R2です。0.8745となりました。

f:id:hetiyaborake:20190512232258p:plain

次は、logによる回帰。決定係数0.9574です。直線の回帰よりは当てはまりが良いです。

f:id:hetiyaborake:20190512232546p:plain

次は、反比例の関係式で回帰しました。決定係数0.98と非常に高い値になりました。

f:id:hetiyaborake:20190512232645p:plain

なみに「この風速と発電量のデータ。教科書から引っ張て来たデータなんですが、教科書によると”1/WV”で回帰するのがベストとのこと。」

そっか、”1/WV”で回帰するのがベストなんだ・・・・。こんなの見つかる訳ねーだろw

◇Lassoでやってみた。

てな訳で本題です。Lassoで変数の選択をやってもらいます。どんな結果が返ってくるんでしょうね?

lassoでは、目的変数x(風速)に関わる関数を適当に並べてます。↓が解析結果です。(うおおおーーー、とりあえず、何でもぶち込んだれ~~~って感じ。半ば自暴自棄ですw)

際に変数の選択をLassoにやらせてみると結果はとても興味深い!!!

f:id:hetiyaborake:20190512235402p:plain
見にくいですが、下から0に近づく曲線が「1/WV」の式です。「1/WV」の係数は、1番遅く0になります。

何回かテストしてみましたが、いずれも「1/WV」の係数が1番遅く0になります。

f:id:hetiyaborake:20190512234200p:plain

 と、言うことで「DC = b*(1/WV)」と予測するのがベスト!という結果をLassoを使って、導くことができました。

あれ?なんか結構便利そう。