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

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

UCI Machine Learning Repository の Wine Quality のデータの分析6 - glmnetパッケージを使ってクオリティを推計

www.crosshyou.info

前回は lm()関数でクオリティを推計してみました。今回はglmnetパッケージを使ってクオリティを推計してみます。lm()関数での正解率は53.9%でしたので、この正解率を上回って欲しいです。

glmnetパッケージのcv.glmnet()関数でLASSO回帰で、family="multinomial"にしてモデルを生成します。

11件の警告があるようです。

warnings()関数で警告を見てみます。

意味はよくわからないので、Copilotに聞いてみました。

どうやら、分類対象のクラスのうち、1つ以上が8件未満で極端に少ないようです。

再度、クオリティの度数を確認してみます。

9が5つしかないですね。9を8にしてしまいましょう。

3のクオリティもトレーニングデータには8個以下かもしれないので、確認します。

3は20個あるので大丈夫でした。

それでは、もういちどモデルを推定しなおします。

今度は警告がでませんでした。

plot()関数を使って、lasso_modelのプロットを描いてみます。

coef()関数でモデルの係数を確認します。

LASSO回帰では、重要でない変数の係数は0になりますが、今回はどの変数もモデルに採用されました。

predict()関数でトレーニングデータで予測します。

実際の値との比較してみます。

モデルの予測では、4、5、6、7しか予測しないで、3と8はありませんでした。

正解率は、(2 + 379 + 612 + 73) / 1950 = 54.7% でした。

lm()関数でのモデルの正解率は53.9%でしたので、少し良くなりましたが、誤差の範囲のような気がします。今回は以上です。

次回は、

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

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

#
# LASSO回帰によるMultinominal Model
set.seed(199)
lasso_model <- cv.glmnet(
  x = mtx[idx, -13],
  y = mtx[idx, 13],
  family = "multinomial",
  type.multinomial = "grouped",
  alpha = 1
)
#
# 警告の確認
warnings()
#
# qualityの度数の確認
mtx[ , "quality"] |> table()
#
# 9を8にする
nine_index <- mtx[ , "quality"] == 9
mtx[nine_index, "quality"] <- 8
mtx[ , "quality"] |> table()
#
# トレーニングデータでのqualityの度数
mtx[idx, "quality"] |> table()
#
# 再度モデルを推定
set.seed(223)
lasso_model <- cv.glmnet(
  x = mtx[idx, -13],
  y = mtx[idx, 13],
  alpha = 1,
  family = "multinomial",
  type.multinomial = "grouped"
)
#
# lasso_modelのプロット
plot(lasso_model)
#
# lasso_modelの係数
coef(lasso_model, s = "lambda.min")
#
# トレーニングデータで予測
lasso_pred <- predict(lasso_model,
                      newx = mtx[-idx, -13],
                      type = "class",
                      s = "lambda.min")
head(lasso_pred)
#
# 実際の値と比較
table(
  lasso_pred,
  mtx[-idx, "quality"]
)
#
# 正解率の計算
(2 + 379 + 612 + 73) / nrow(mtx[-idx, ])
#

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは natural grass field, small river, tender daylight, close up of dandelion flowers, photo です。)