
の続きです。前回までで8つのモデルのワークフローを作成しました。今回はパラメータのチューニングをします。
まず、クロスバリデーションのデータを生成します。

grid_regular()関数でチューニング・グリッドを生成していきます。

線形モデルはチューニングは不要なので、ペナルティ付き線形モデル(glmnet)以降のモデルのチューニング・グリッドを作成していきます。
まず、ペナルティ付き線形モデル(glmnet)ですが、penaltyは正則化の強さを表すパラメータで、値が大きいほどモデルの係数が小さくなりシンプルになります。10^-4 から10^0, までの範囲にしています。mixtureはL1(LASSO)とL2(Ridge)の比率です。今回は0.2(Ridgeより)から0.8(LASSOより)にしてみました。
決定木モデルのパラメータについては、cost_complexityは枝を剪定する強さで、値が大きいと剪定をいっぱいして木が単純になります。tree_depthは木の階層数です。値が大きいと階層がいっぱいの複雑な木になります。min_nは枝分かれするための最小サイズで値が小さいほど細かく分割します。
ランダムフォレストモデル以下のチューニング・グリッドを作成していきます。


ランダムフォレストモデルのmtryは各ノードの分かれ目で、何個の説明変数を使うかです。値が小さいと多様性が増えて過学習しにくくなりますが、精度は落ちます。min_nは決定木モデルと同じです。値が大きいと単純な木になり過学習はしにくくなります。
サポートベクター回帰(SVR)モデルのcostは誤分類に対するペナルティの強さを表します。値が大きいと誤分類を許さなくて過学習しやすくなります。rbf_sigmaはRBFカーネルの広がりを表します。値が大きいと境界が細かく曲がり過学習しやすくなります。
k-NN回帰モデル(kknn)のneighborsは予測するときに参照する近いデータの点の数です。値が小さいと過学習しやすくなり、値が大きいと滑らかになります。
ニューラルネットワークモデル(nnet)のhidden_unitsは隠れ層のユニット数です。値が大きいとモデルが複雑になります。penaltyは正則化の重みです。値が大きいと強い正則化になります。epochsは学習エポック数です。データを何回繰り返して学習するかです。値が小さいと学習不足、大きいと過学習になりやすいです。
勾配ブースティング回帰モデル(xgboost)のmtryはランダムフォレストモデルのmtryと同じで使う特徴量の数です。大きいと過学習しやすいです。min_nは分割する際の最小サンプル数です。小さいと木が細かく分割されて複雑になります。tree_depthは木の深さです。深いと複雑な関係をとらえることができますが、過学習になりやすいです。lean_rateは学習率で小さいと学習がゆっくり進みます。loss_reductionはノードを分割するために必要は最小損失減少量です。小さいと分割がたくさんになり複雑な木になります。sample_sizeは各木を作るときに使うサンプルの割合です。大きいと多くのデータを使うので精度は上がりやすいですが、過学習になりやすいです。
これでチューニング・グリッドの作成は終わりました。
今回は以上です。
次回は
です。
はじめから読むには、
です。
今回のコードは以下になります。
#
# 4. クロスバリデーションの設定
set.seed(888)
folds <- vfold_cv(train_data, v = 10)
#
# 5. チューニング・グリッドの設定
# 5-1. 線形モデル(lm)
# 線形モデルは不要
#
# 5-2. ペナルティ付き線形モデル(glmnet)
glmnet_grid <- grid_regular(
penalty(range = c(-4, 0)),
mixture(range = c(0.2, 0.8)),
levels = c(30, 7)
)
#
# 5-3. 決定木モデル(rpart)
rpart_grid <- grid_regular(
cost_complexity(range = c(-4, -1)),
tree_depth(range = c(1L, 8L)),
min_n(range = c(2L, 20L)),
levels = c(5, 8, 5)
)
#
# 5-4. ランダムフォレストモデル(ranger)
ranger_grid <- grid_regular(
mtry(range = c(1L, 8L)),
min_n(range = c(2L, 20L)),
levels = c(8, 5)
)
#
# 5-5. サポートベクター回帰(SVR)モデル(kernlab)
kernlab_grid <- grid_regular(
cost(range = c(-5, 5)),
rbf_sigma(range = c(-5, 1)),
levels = c(11, 7)
)
#
# 5-6. k-NN回帰モデル(kknn)
kknn_grid <- grid_regular(
neighbors(range = c(1L, 40L)),
levels = 15
)
#
# 5-7. ニューラルネットワークモデル(nnet)
nnet_grid <- grid_regular(
hidden_units(range = c(2L, 15L)),
penalty(range = c(-4, 0)),
epochs(range = c(50L, 300L)),
levels = c(10, 5, 5)
)
#
# 5-8. 勾配ブースティング回帰モデル(xgboost)
xgboost_grid <- grid_regular(
mtry(range = c(1L, 8L)),
min_n(range = c(2L, 20L)),
tree_depth(range = c(2L, 8L)),
learn_rate(range = c(-2, -1)),
loss_reduction(range = c(-1, 1)),
sample_size(range = c(0, 1)),
levels = c(2, 2, 2, 2, 2, 2)
)
#
(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Natural scene landscape, winter season, close up of red tulip flowers, photo です。)