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

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

UCI Machine Learning Repository の Wine Quality のデータの分析7 - kknnパッケージで、k-Nearest-Neighborsで分類

www.crosshyou.info

の続きです。前回はglmnetパッケージでLASSO回帰で分類してみました。lm()関数によるOLSでの推計では53.9%、cv.glmnet()関数によるLASSOでの推計では54.7%と線形モデルではこれ以上の正解率の向上は見込めそうにないので、今回は線形モデルではなくて、k-Nearest-Neighborsで予測してみたいと思います。使うパッケージは、kknnパッケージを使います。

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

kknnではqualityをファクター型にしてほうがいいので、qualityをファクター型にしたデータフレームを用意します。

train.kknn()関数でモデルを学習します。

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

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

正解率を計算します。

62.8%です。OLS, LASSOの正解率よりも高くなりましたね。

今回は以上です。

次回は

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

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

#
# k-nearest-neighbors法で予測してみる
#
# kknnパッケージの読み込み
library(kknn)
#
# kknn用のデータフレームを作成(qualityをファクター型にする)
df_kknn <- df |> 
  mutate(quality = as.factor(quality))
summary(df_kknn)  
#
# モデルの学習
set.seed(269)
kknn_model <- train.kknn(
  quality ~ .,
  data = df_kknn[idx, ],
  kmax = 5,
  kernel = "rectangular"
)
#
# テスト用のデータで予測
kknn_pred <- predict(kknn_model, df_kknn[-idx, ])
head(kknn_pred)
#
# 実際の値と比較
table(kknn_pred, df_kknn$quality[-idx])
#
# 正解率
(13 + 420 + 584 + 186 + 22) / nrow(df_kknn[-idx, ])
#

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは Landscape of natural scenery of green grass field, deep blue lake, blight blue sky, close up of red lily flowers and yellow rose flowers, photo です。)