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

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

都道府県別の定期健康診断結果報告のデータの分析7 - 勾配ブースティングモデルでの回帰分析

www.crosshyou.info

の続きです。今回は勾配ブースティングモデルで所見率を回帰分析してみます。

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

説明変数(per_jushin, log_place, log_jushin)を行列に変換します。

shokenritsu を被説明変数として取り出します。

XGBoost用のDMatrixを作成します。

ハイパーパラメータの設定をします。

モデルの学習をします。

予測をします。

RMSEと相関係数を計算します。

さすが勾配ブースティングモデルですね。RMSEは三つのモデルの中で一番小さく、相関係数は一番大きいです。

変数の重要度を見てみます。

log_jushinのGainの値が 0.387で一番大きいので、log_jushinが一番重要ですね。

実際の値と予測値の散布図を描きます。

緑色のBが勾配ブースティングモデルでの結果です。散布図でもBが一番黒の直線に近いことがわかりますね。

今回は以上です。

肇から読むには、

www.crosshyou.info

です。

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

#
# 勾配ブースティング
# パッケージの読み込み
library(xgboost)
#
# 説明変数を行列に変換
X <- as.matrix(df[, c("per_jushin", "log_place", "log_jushin")])
#
# 被説明変数を取り出す
y <- df$shokenritsu
#
# XGBoost用のDMatrixを作成
dtrain <- xgb.DMatrix(data = X, label = y)
#
# ハイパーパラメータの設定
params <- list(
  objective = "reg:squarederror",
  max_depth = 1,      # 木の深さが1
  eta = 0.1,
  subsample = 0.8,
  colsample_bytree = 0.8
)
#
# モデルの学習
set.seed(1234)
xgb_mod <- xgb.train(
  params = params,
  data = dtrain,
  nrounds = 400 # 木の数は400本
)
#
# 予測
pred_xgb <- predict(xgb_mod, dtrain)
#
# RMSEとCorrelation
df_rmse <- df_rmse |> 
  rbind(
    tibble(
      Model = "Boosting",
      RMSE = sqrt(mean*1,
      Corr = cor(pred_xgb, df$shokenritsu) 
    )
  )
df_rmse
#
# 変数重要度
xgb.importance(model = xgb_mod)
#
# 実際の値と予測図のサンプル
x_range <- range(c(lm_pred, tree_pred, pred_xgb))
y_range <- range(df$shokenritsu)
plot(x_range, y_range, type = "n",
     xlab = "estimate", ylab = "actual",
     main = "Linear Model vs. Tree Model vs. Boosting")
points(predict(lm_mod4v5), df$shokenritsu, pch = "L", col = "red")
points(tree_pred, df$shokenritsu, pch = "T", col = "blue")
points(pred_xgb, df$shokenritsu, pch = "B", col = "green")
abline(0, 1, col = "black")
legend("topleft", c("Linear Model", "Tree Model","Boosting"),
       pch = c("L", "T", "B"), col = c("red", "blue", "green"), bty = "n")
#

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Natural landscape, small mountain is fully covered by red "Tsutsuji Flowers" under the blue sky, Photo です。)

 

*1:pred_xgb - df$shokenritsu)^2