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

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

UCI Machine Learning Repository の Wholesale customers のデータの分析5 - ニューラルネットワーク、サポートベクターマシーンで分類

(Bing Image Creator で生成: Closeup of purple iris and pink iris flowers, background is blue sky, photo)

www.crosshyou.info

の続きです。

今回はニューラルネットワークとサポートベクターマシーンで分類してみます。

まず、ニューラルネットワークから。nnet パッケージを読み込みます。

nnet() 関数でニューラルネットワークモデルを推定します。

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

結果を table() 関数で確認します。

正解率は

56%でした。

続いて、サポートベクターマシーンで分類します。

ます、kernlab パッケージを読み込みました。

ksvm() でモデルを推定します。

predict() 関数で df_2testの Lisbon を予測します。

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

正解率は

52% でした。

いままでの予測結果を統合しましょう。

この5つの予測の多数決で最終的な予測を決めます。

結果をみてみます。

正解率は

54% でした。

今回は以上です。

初めから読むには、

www.crosshyou.info

です。

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

#
# nnet パッケージを読み込む
library(nnet)
#
# ニューラルネットワークモデルの生成
nnet_mod <- nnet(as.factor(Lisbon) ~ ., data = df_2train,
                 size = 3, decay = 0.1)
#
# 予測
nnet_pred <- predict(nnet_mod, df_2test,
                     type = "class")
#
# 結果
table(nnet_pred, df_2test$Lisbon)
#
# 正解率
(10 + 18) / nrow(df_2test)
#
# kernlab パッケージを読み込む
library(kernlab)
#
# サポートベクターマシーンモデルの生成
set.seed(274)
svm_mod <- ksvm(factor(Lisbon) ~ ., data = df_2train,
                cross = 3) 
svm_mod
#
# 予測
svm_pred <- predict(svm_mod, df_2test)
#
# 結果
table(svm_pred, df_2test$Lisbon)
#
# 正解率
(3 + 23) / nrow(df_2test)
#
# いままでの予測の統合
predictions <- tibble(
  logit = logit_pred, 
  logit2 = logit_pred2, 
  tree = pruned_pred, 
  nnet = nnet_pred, 
  svm = svm_pred
)
predictions
#
# predictions の多数決
predictions <- predictions |> 
  mutate(tree = as.numeric(tree) - 1,
         nnet = as.numeric(nnet),
         svm = as.numeric(svm) - 1)
predictions
final_pred <- rowMeans(predictions) |> 
  round(0)
final_pred
#
# 最終結果
table(final_pred, df_2test$Lisbon)
#
# 正解率
(10 + 17) / nrow(df_2test)
#