www.crosshyou.info

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

UCIのDry Bean Datasetのデータの分析5 - RのglmnetパッケージでElastic-Net回帰分析。lm()関数のOLSでの係数とは全く違うのに結果は似たようになった。

Bing Image Creatorで生成:Photo of a lot of beautiful real flowers on the tropical beach, in the night, aurora is shining in the night sky

www.crosshyou.info

の続きです。前回はRのrpartパッケージでregresstion treeをやってみました。結果はlm()関数での普通の重回帰分析よりも悪いMSE(Mean Squared Error)でした。

今回は、glmnetパッケージでElastic-Net回帰分析をしてみます。

まず、glmnet用にマトリックスを用意します。

次に最適なalphaをもとめるためにfor loopをまわします。

前々回のClassificationと違うところは、family = "gaussian"にしているところです。

最適なalphaを確認します。

この最適なalphaでcross validationをして最適なlambdaを求めます。

plot()関数で結果をみてみましょう。

最適なlambdaをみてみましょう。

こうして最適なalphaと最適なlambdaでモデルを推計します。

係数をみてみましょう。

同じ線形モデルでもだいぶ係数は違う結果となりました。

glmnetでのElastic-Netでは、

roundness = -2.58 + 5.70 * ShapeFactor2 + 0.357 * ShapeFactor3 + 3.25 * ShapeFactor4

lm()関数のOLSの線形回帰では、

roundness = -2.66 + 3.88 * ShapeFactor1 -8.66 * ShapeFactor2 + 0.45 * ShapeFactor3 + 3.26 * ShapeFactor4

です。

それではこの推定モデルで予測します。

classificationではtype = 'class'でしたが、今回はtype = 'response'です。

予測値と実際の値の散布図を描きます。

ついでにlm()関数の予測値とglmnetの予測値の散布図も描いてみます。

2つのモデルの係数はまったく違うのに、予測結果は驚くほど似ています。

MSEを計算します。

glmnetパッケージでのElastic-Net回帰のMSEが一番小さい値となりました。

今回は以上です。

初めから読むには、

www.crosshyou.info

です。