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

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

UCI Machine Learning Repository の Bike Sharing のデータの分析5 - Decision Tree Model による予測

Bing Image Creator で生成: Close up of gentiana scabra flowers, background is wild natural fields, photo

www.crosshyou.info

の続きです。

今回は、R の rpart パッケージを使って、決定木(Decision Tree) モデルで予測してみます。rpart パッケージを読み込みます。

rpart.plot パッケージも読み込みます。

rpart() 関数でモデルを作ります。

CP の表を確認します。

この表の xerror の値が一番小さいときの CP が一番いいそうです。

この best_cp でモデルを剪定します。

rpart.plot() 関数でモデルをグラフにします。

けっこう細かい決定木ですね。

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

df_results にこの予測値も追加します。

決定木モデルでの予測は、同じ値が何個も出てきますね。

予測値と実際の値のグラフを描きます。

そこそこ、あたっている感じですね。

RMSE を計算します。

RMSE は 1018 でした。線形回帰モデルの RMSE は 825、k-Nearest Neighbors は 1060 でしたので、その間ですね。

今回は以上です。

初めから読むには、

www.crosshyou.info

です。

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

#
# 予測モデル3: Decision Treeによる予測
# rpart パッケージの読み込み
library(rpart)
#
# rpart.plot パッケージの読み込み
library(rpart.plot)
#
# rpart() 関数でモデルを生成
set.seed(247)
fit_rpart <- rpart(cnt ~ ., data = df_train,
                   minsplit = 3, cp = 0)
#
# CP table 
head(fit_rpart$cptable)
#
# 最適なCP
minrow <- which.min(fit_rpart$cptable[ , "xerror"])
best_cp <- fit_rpart$cptable[minrow, "CP"]
best_cp
#
# 最適なCPでfit_rpartを剪定
fit_rpart <- prune(fit_rpart, cp = best_cp)
#
# rpart.plot() でグラフ
rpart.plot(fit_rpart, type = 1)
#
# fit_rpart で予測
pred_rpart <- predict(fit_rpart, newdata = df_test)
#
# df_results に追加
df_results <- df_results |> 
  mutate(rpart = pred_rpart)
df_results
#
# 予測値と実際の値のグラフ
df_results |> 
  ggplot(aes(x = time)) +
  geom_line(aes(y = rpart), color = "red") +
  geom_line(aes(y = jissai))
#
# RMSE の計算
rmse_rpart <- sqrt(mean*1
rmse_rpart
#

 

*1:pred_rpart - df_test$cnt)^2