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

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

東証の上場会社の資金調達額のデータの分析6 - 前回の機械学習のモデルの内容確認する。

www.crosshyou.info

の続きです。前回は株式公募の件数を予測するモデルを作成しました。線形モデル、Elastic-Netモデル、決定木モデル、ランダムフォレストモデルです。

今回はそのモデルの内容を確認します。extract_fit_engine()関数を使うとモデルをそのエンジンのモデルとして取り出すことができます。

線形モデルの係数を確認しましょう。モデルを取り出した後、summary()関数を使いました。

3月や12月ダミーが大きな係数なので、3月か12月か、ということが大きな影響があるとわかります。

次は、Elastic-Netモデルをみてみます。coef()関数を使います。

Elastic-Netモデルでも線形モデルと同じ変数が使われています。(全部の変数が使われています。)係数も線形モデルと同じような値ですね。

決定木モデルのグラフを描きます。rpart.plotパッケージのrpart.plot()関数を使います。

決定木モデルでは月のダミー変数は12月と3月が使われているだけですね。bond_numは使われていませんね。

最後はランダムフォレストモデルです。vipパッケージのvip()関数で特徴量の重要度をグラフにします。

あらら、エラーになってしまいました。これはランダムフォレストモデルのレシピを作成するときに、重要度を計算する設定にしていなかったのが原因です。

前回のコードを直して、再度重要度を計算した学習モデルを作ります。

これで、vip()関数を使います。

eqy_val, bond_val, bond_numの3つが重要度の上位です。決定木モデルやランダムフォレストモデルのようなツリーモデルは数値データを重要視して、線形モデルとElastic-Netモデルのような線形モデルは月のダミーを重要視している、という対照的な結果でしたね。同じデータでもモデルによって重要視する変数が違うのは面白いですね。

今回は以上です。

はじめから読むには、

www.crosshyou.info

です。

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

#
# lm_fitの係数の確認
lm_fit |> 
  extract_fit_engine() |> 
  summary()
#
# glmnet_fitの係数の確認
glmnet_fit |> 
  extract_fit_engine() |> 
  coef(s = glmnet_params$penalty)
#
# rpart_fitの決定木のグラフ
library(rpart.plot)
rpart_fit |> 
  extract_fit_engine() |> 
  rpart.plot(roundint = FALSE)
#
# ranger_fitの重要度
library(vip)
ranger_fit |> 
  extract_fit_engine() |> 
  vip()
#
# 3-4.B ランダムフォレストモデル(ranger)
# importanceを設定したバージョン
ranger_mod2 <- rand_forest(
  mtry = tune(),
  min_n = tune(),
  trees = 1000
) |> 
  set_engine("ranger", importance = "impurity") |> 
  set_mode("regression")
#
# 4-4.B ランダムフォレストモデル(ranger)
# importanceを設定したバージョン
ranger_wf2 <- workflow() |> 
  add_model(ranger_mod2) |> 
  add_recipe(rec)
#
# 7-4.B ランダムフォレストモデル(ranger)
# importanceを設定したバージョン
ranger_tuned2 <- tune_grid(
  ranger_wf2,
  resamples = folds,
  grid = ranger_grid,
  metrics = metric_set(rmse, rsq, mae),
  control = control_grid(save_pred = TRUE)
)
#
# 8-4.B ランダムフォレストモデル(ranger)
# importanceを設定したバージョン
ranger_params2 <- select_best(ranger_tuned2, metric = "rmse")
ranger_params2
#
# 9-4.B ランダムフォレストモデル(ranger)
# importtanceを設定したバージョン
ranger_wf_f2 <- finalize_workflow(ranger_wf2, ranger_params2)
#
# 10-4.B ランダムフォレストモデル(ranger)
# importtanceを設定したバージョン
ranger_fit2 <- fit(ranger_wf_f2, train_data)
#
# 特徴量の重要度
ranger_fit2 |> 
  extract_fit_engine() |> 
  vip() +
  theme_minimal()
#

 

(冒頭の画像は Bing Image Creator で生成しました。プロンプトは Landscape of winter season, natural wild fields, higher mountains in the far away, close up of white Begonia flowers, blue sky, Photo です。)