UPDATE: 2022-12-17 11:08:01
tidymodels
パッケージの使い方をいくつかのノートに分けてまとめている。tidymodels
パッケージは、統計モデルや機械学習モデルを構築するために必要なパッケージをコレクションしているパッケージで、非常に色んなパッケージがある。ここでは、今回はparsnip
というパッケージの使い方をまとめていく。モデルの数理的な側面や機械学習の用語などは、このノートでは扱わない。
下記の公式ドキュメントやtidymodels
パッケージに関する書籍を参考にしている。
parsnip
パッケージの目的parsnip
パッケージは、数多あるパッケージに含まれるモデリングのための関数の構文や引数を統一されたインターフェースを提供すること。
parsnip
パッケージの実行例公式サイトにある例をお借りすると、ランダムフォレストを異なるパッケージを利用して実行する場合、下記の通り統一感がない。引数名が異なっていたり、モデル構文が異なっている可能性もあるため、複数のモデルを作成する際には、注意が必要になる。
# # From randomForest
# rf_1 <- randomForest(
# y ~ .,
# data = dat,
# mtry = 10,
# ntree = 2000,
# importance = TRUE
# )
#
# # From ranger
# rf_2 <- ranger(
# y ~ .,
# data = dat,
# mtry = 10,
# num.trees = 2000,
# importance = "impurity"
# )
#
#
# # From sparklyr
# rf_3 <- ml_random_forest(
# dat,
# intercept = FALSE,
# response = "y",
# features = names(dat)[names(dat) != "y"],
# col.sample.rate = 10,
# num.trees = 2000
# )
こののランダムフォレストの例では、モデルはランダムフォレストではあるが、計算エンジンであるパッケージはrandomforest
、ranger
、sparklyr
と異なっており、mtry
引数名についてもcol.sample.rate
と異なっている。
この問題をparsnip
パッケージは解決してくれる。parsnip
パッケージでは、モデルのタイプ、計算エンジン、モデルのモードを選択することで、パッケージ間での違いを吸収し、スムーズに行き来できるようになっている。
下記の例では、ランダムフォレストをモデル(rand_forest
)として選択し、set_engine
関数でranger
パッケージを利用することを決めている。また、モデルのモード(set_mode
)は回帰を指定している。
library(parsnip)
rand_forest(mtry = 10, trees = 2000) %>%
set_engine("ranger", importance = "impurity") %>%
set_mode("regression")
## Random Forest Model Specification (regression)
##
## Main Arguments:
## mtry = 10
## trees = 2000
##
## Engine-Specific Arguments:
## importance = impurity
##
## Computational engine: ranger
ランダムフォレストはそのままで、計算エンジンをsparklyr
パッケージに変更したいときは、set_engine
関数でspark
と指定すれば変更ができる。また、モデルのモードを回帰から分類に変更したければ、set_mode
関数でclassification
を指定すれば良い。
rand_forest(mtry = 10, trees = 2000) %>%
set_engine("spark") %>%
set_mode("regression")
## Random Forest Model Specification (regression)
##
## Main Arguments:
## mtry = 10
## trees = 2000
##
## Computational engine: spark
この学習ルールを決定した後は、fit
関数でそのままモデルを学習できたりもする。
rand_forest(mtry = 10, trees = 2000) %>%
set_engine("randomForest") %>%
set_mode("regression") %>%
fit(mpg ~ ., data = mtcars)
## parsnip model object
##
##
## Call:
## randomForest(x = maybe_data_frame(x), y = y, ntree = ~2000, mtry = min_cols(~10, x))
## Type of random forest: regression
## Number of trees: 2000
## No. of variables tried at each split: 10
##
## Mean of squared residuals: 5.843942
## % Var explained: 83.39
%>%
演算子を使わない指定方法もあるので、その場合、パイプでつなげている部分をまとめて記述すればOK。
rand_forest(
mode = "regression",
engine = "ranger",
mtry = 10,
trees = 2000,
min_n = 10
)
## Random Forest Model Specification (regression)
##
## Main Arguments:
## mtry = 10
## trees = 2000
## min_n = 10
##
## Computational engine: ranger
モデルタイプに関する実装例は下記の公式サイトに沢山記述されているので、そちらを参照。
一般的なモデルタイプであれば、下記の通り、豊富に用意されている。
linear_reg()
models
lm
engineglm
engineglmnet
enginekeras
enginestan
enginelogistic_reg()
models
glm
engineglmnet
enginekeras
engineLiblineaR
enginestan
enginerand_forest()
models
ranger
enginerandomForest
engineboost_tree()
models
xgboost
engineC5.0
engine