www.crosshyou.info

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

UCI の Breast Cancer Wisconsin (Diagnostic) のデータ分析2 - ロジスティクス回帰と LASSO 回帰で判別

Bing Image Creator で生成: Early Spring in rural area, peaceful landscape, photo

 

www.crosshyou.info

の続きです。前回はデータを R に読み込んで、分析のための前処理をしました。

今回は実際に予測をしてみます。

はじめに、データの様子を見るためにグラフに描いてみます。

boxplot() 関数で箱ひげ図を描いてみましょう。

M = 1 のほうが全体的に大きな値のように見えます。

ggcorrplot ライブラリの ggcorrplot() 関数で相関マトリックスを描いてみます。

各変数同士は正の相関のものが多いようです。

M との相関を見ると、0.7 以上の相関の変数もいくつかあります。

それでは、判別をしてみます。

まずは、トレーニング用、テスト用のデータにわけます。

t.test() 関数で、df_train と df_test の M の平均値を比較して、統計的に有意な違いが無いことを確認しておきます。

df_train のほうは、M の割合は 0.378, df_test のほうは、0.351 です。p-value が 0.59 なので、両者の比率に統計的に有意な違いはありません。

はじめに、glm() 関数でロジスティクス回帰分析で判別してみましょう。

正解率は、94.7% でした。

続いて、LASSO 回帰で判別してみます。

glmnet パッケージを読み込みします。

glmnet はデータフレームではなくて、マトリックスで動かしますので、df_train, df_test からマトリックスを作成します。

cv.glmnet() 関数で LASSO 回帰を実行します。

fit_lasso をプロットしてみます。

モデルの係数を coef() 関数でみてみましょう。

LASSO 回帰では、モデルで使わない変数の係数は . になります。

predict() 関数で予測します。

正解率を計算しましょう。

96.5% の正解率でした。

LASSO 回帰のほうが正解率は高いですが、glm() 関数では、M = 1 のものを 1 つしか誤って 0 と判別しなかったのに対して、glmnet での LASSO 回帰では、4 つも 0 と判別しています。

本当は悪性腫瘍(M = 1)なのに、0 と見逃してしまったのが 4 つもあるので、glm() でのロジスティクス回帰のほうが実用的かもしれないです。

今回は以上です。

 

次回は、

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。