Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

UCI の Adult データの分析4- R の glmnet パッケージを使って、 LASSO, Ridge, Elastic-Net Regression で income の分類に挑戦

Generated by Bing Image Creator: Photo of old times, beautiful mountains scenery, blue sky and white clouds, cheerful flowers 

www.crosshyou.info

の続きです。前回は、 glmnet パッケージで income の分類をするための前準備でした。今回は、実際に分類してみます。

まずは、LASSO Regression です。alpha = 1 にします。今回は、 >50K か <=50K かという 2値の分類なので、family = "binomial" とします。parallel = TRUE で並列処理をしています。

fit_lasso を plot() 関数で処理してみます。

モデルの係数をみます。

Japanの係数が 0.63 なので、他の変数が全て同じならば、native country が日本の人のほうが、そうでない人よりも >50K の確率は高いです。

predict() 関数でテスト用データの予測をします。

実際のデータとどれだけあっているかみてみましょう。

正解率は、(6903 + 1417) / (6903 + 924 + 525 + 1417) = 85.2% でした。

けっこういい正解率なのではないでしょうか?

仮に トレーニング用の >50K の比率で、デタラメにテスト用の予想をしたらどのくらいでしょうか?

デタラメ予想だと、63% の正解率なので、LASSO Regression で予測したほうがいいですね。

同じように、alpha = 0 だとRidge Regression になります。

plot() 関数で fit_ridge のグラフを描いてみます。

係数は Japanのところだけみてみましょう。

0.55 とプラスの係数でした。

テスト用のデータで予測してみましょう。

Ridge Regression での正解率は、84.4% でした。 

Elastic-Net Regression は alpha が 0 ~ 1 のあいだの値です。どのくらいの alpha の水準がいいのかは、いろいろな alpha 水準を試してみないとわかりません。

for loop でいろいろと試してみます。

上の for loop のコードですが、計算が終わるのに 10分以上かかりました。

mse_box の中身をグラフにしてみてみます。

mse_box の値が一番小さなところが最適な alpha の水準です。

この alpha の水準で ELastic-Net Regression をします。

fit_elnet を plot() でグラフにしてみます。

係数の確認は割愛して、予測とその結果をみてみます。

正解率は、85.2% でした。LASSO よりも少しだけ良い結果でした。

3つの正解率をまとめて表示してみます。

今回は以上です。

次回は

www.crosshyou.info

です。

初めから読むには、

www.crosshyou.info

です。