私は、米国のいくつかの市場で家庭の売上高に関して比較的大きなデータセットを持っています。各市場について、Gradient Boosting回帰モデルを構築して、セールスプライス。私の独立変数(機能)のほとんどは、caret
でgbm
Rのgbmの欠落データと層別k倍交差検証
R.
でgbm
アルゴリズムがハイパー(
n.trees
、
shrinkage
、
interaction.depth
、
n.minobsinnode
、など)の値を指定する必要がありますため問題ないはずの値が欠落しています。私はハイパーパラメータの最良のセットを選択するクロスバリデーションと一緒にグリッドサーチをしたい:
# -------- A function to drop variables that are more than 80% missing or have no variance
Drop_Useless_Vars <- function(datan) {
n = nrow(datan)
p = ncol(datan)
na = is.na(datan)
n_na = apply(X = na, MARGIN = 2, FUN = sum)
n_unique = apply(X = datan, MARGIN = 2, function(x) length(na.omit((unique(x)))))
return(as.data.frame(datan[, -which(n_na > 0.8*n | n_unique < 2)]))
}
# -------- load libraries
library(gbm)
library(caret)
# -------- prepare training scheme
control = trainControl(method = "cv", number = 5)
# -------- design the parameter tuning grid
grid = expand.grid(n.trees = 10000,
interaction.depth = seq(2, 10, 1),
n.minobsinnode = c(3, 4, 5),
shrinkage = c(0.1, 0.01, 0.001))
# -------- tune the parameters
tuner = train(log(saleprice) ~ ., data = Drop_Useless_Vars(df), method = "gbm", distribution = "gaussian",
trControl = control, verbose = FALSE, tuneGrid = grid, metric = "RMSE")
# -------- get the best combo
n_trees = tuner$bestTune$n.trees
interaction_depth = tuner$bestTune$interaction.depth
shrinkage = tuner$bestTune$shrinkage
n_minobsinnode = tuner$bestTune$n.minobsinnode
上記のコードは、欠損値がはるかに頻繁にいくつかの市場を除き、正常に動作します。私は以下のようにエラーを取得しています:
Error in checkForRemoteErrors(val) :
4 nodes produced errors; first error: variable 26: assessor_full_baths has only missing values.
assessor_full_baths
は私のモデルの機能の一つです。そこで起こっていることは、アルゴリズムがクロスバリデーションを行うためにデータをサンプリングしているときに、1つ以上のフォールドが完全に欠落している変数を持つことです。
caret
で使用されているサンプリング方式を階層化するにはどうすればよいですか?つまり、どのようにして、各折り目を欠損値に関して同じ分布にすることができますか?また、皆さんは、gbm
関数で、どの変数を指定しなくても完全に欠けている変数を無視する方法を知っていますか?
ご提供いただけるご支援に感謝いたします。
なぜハイパーパラメータは「いわゆる」ですか?どのようにして、アルゴリズムは、クロスバリデーションの1倍だけで欠損値をすべて含むフィーチャを除外できますか? –
私の昔の教授の一人は、ベイジアン設定のハイパーパラメータについて話すとき、頻繁に「いわゆる」と言っていました。私はそれが私の頭に詰まっていると思います。また、私は、これらのパラメータを正則化パラメータと呼んでいる論文を読んで、それは私にとって意味があります。 –