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

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

都道府県別の電子レンジ所有数量のデータの分析6 - tidymodelsの流れでLiner Regressionによる予測

www.crosshyou.info

の続きです。今回はtidymodelsのワークフローに沿った回帰分析による電子レンジ所有数量の予測をしてみます。はじめは一番簡単な線形回帰モデル、前回までのモデルと同じです。そのあとは、ランダムフォレストなど他のモデルも試してみます。

最初にtidymodelsパッケージの読み込みをします。

initial_split()関数を使ってトレーニング用データとテスト用データに分けます。

recipe()関数を使ってレシピを作成します。

普通の線形回帰では、前処理は文字列型の変数をダミー変数に処理します。

次はモデルを作成します。linear_reg()関数で、エンジンは"lm"です。

レシピとモデルを合体してワークフローを作ります。

ワークフローができたら、fit()関数で学習します。

predict()関数でテスト用のデータで予測します。

実際の値と一緒にしたデータフレームを作ります。

RMSEなどの評価値を算出します。metric()関数で自動的に算出できます。

RMSEは18.4でした。平均して、18.4台くらい誤差がある、ということですね。

次回以降、他のモデルでこの値を下回ることができるかどうかに注目です。

今回は以上です。

次回は

www.crosshyou.info

です。

はじめから読むには、

www.crosshyou.info

です。

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

#
# tidymodelsの読み込み
library(tidymodels)
#
#
# トレーニング用のデータとテスト用のデータ(全モデル共通)
set.seed(1234567890)
split <- initial_split(df, prop = 0.8)
train_data <- training(split)
test_data <- testing(split)
#
# レシピを作成(_rec)
lm_rec <- recipe(microwave ~ year + l_mitsudo + conve + single + income,
                 data = train_data) |> 
  step_dummy(all_nominal_predictors())
lm_rec
#
# モデルを作成(_mod)
lm_mod <- linear_reg() |> 
  set_engine("lm")
lm_mod
#
# ワークフローを作成(_wf)
lm_wf <- workflow() |> 
  add_recipe(lm_rec) |> 
  add_model(lm_mod)
lm_wf
#
# トレーニング用データで学習(_fit)
lm_fit <- fit(lm_wf, data = train_data)
#
# テスト用のデータで予想(_pred)
lm_pred <- predict(lm_fit, new_data = test_data)
#
# 実際の値と予測値(_result)
lm_result <- test_data |> 
  select(microwave) |> 
  bind_cols(lm_pred)
lm_result
#
# 評価(_metric)
lm_metric <- lm_result |> 
  metrics(truth = microwave, .pred) |> 
  mutate(model = "Linear_Regression")
lm_metric
#

 

(冒頭の画像は、Bing Image Creatorで生成しました。プロンプトはNice landscape of a bit old times wild flower garden, photoです。)