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

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

UCI Machine Learning Repository の Wine Quality のデータの分析4 - glmnetのロジスティクス回帰で赤ワインと白ワインを分類する。

www.crosshyou.info

の続きです。

今回は glmnet パッケージを使って、赤ワインと白ワインをロジスティクス回帰で分類する、ということをやってみましょう。

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

dfからglmnetで使えるようにマトリックスをつくります。makeX()関数を使います。

colorred, colorwhiteの2つの変数のうち、1つの変数があればよいので、colorredは削除して、colorwhiteの変数名をwhiteに変えましょう。

トレーニング用のインデックスを作成します。

glmnetパッケージの中にbigGlm()関数があります。これはペナルティ無の普通の回帰モデルを推計します。

係数をみてみます。

続いて、テスト用のデータをこのモデルで推計してみます。

実際の値と比べてみましょう。

これはなかなか良い結果だと思います。間違いは7つしかないですね。

正解率を計算します。

99.79%の正解率でした。

赤ワインと白ワインを判別するのは、今回のデータがあれば簡単なのですね。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# glmnet の読み込み
library(glmnet)
#
# dfからマトリックスを作成
mtx <- makeX(df)
#
# mtxを整える
mtx <- mtx[ , -1]
colnames(mtx)[1] <- "white"
head(mtx)
#
# トレーニング用のインデックスを作成
set.seed(1212)
idx <- sample(1:nrow(mtx), size = 0.7 * nrow(mtx),
              replace = FALSE)
#
# bigGlm()関数でモデル推計
logit_model <- bigGlm(
  x = mtx[idx, -1],
  y = mtx[idx, 1],
  family = "binomial"
)
#
# モデルの係数
coef(logit_model)
#
# テスト用のデータで予測
logit_pred <- predict(logit_model,
                      newx = mtx[-idx, -1],
                      type = "response") |> 
  round()
head(logit_pred)
#
#
# 実際の値との比較
table(logit_pred, mtx[-idx, 1])
#
# 正解率
(483 + 1460) / (483 + 1460 + 3 + 1)
#

 

(冒頭の画像は Bing Image Creator で生成しました。プロンプトは Fall season, trees with dropping leaves, flowering white Japanese Chrysanthemum flowers, blue sky, Photograph です。