R
のgbm
が欠損値を処理する方法を知っていますか?私はgoogleを使用して説明を見つけることができないようです。欠損値のR gbm処理
答えて
gbmが予測子がないことを説明するには、最初にgbmオブジェクトの単一のツリーを視覚化しましょう。
gbmオブジェクトmygbmがあるとします。例えば、あなたがmygbmに最初のツリーを可視化することができますpretty.gbm.tree(mygbm, i.tree=1)
を使用する:
SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction
0 46 1.629728e+01 1 5 9 26.462908 1585 -4.396393e-06
1 45 1.850000e+01 2 3 4 11.363868 939 -4.370936e-04
2 -1 2.602236e-04 -1 -1 -1 0.000000 271 2.602236e-04
3 -1 -7.199873e-04 -1 -1 -1 0.000000 668 -7.199873e-04
4 -1 -4.370936e-04 -1 -1 -1 0.000000 939 -4.370936e-04
5 20 0.000000e+00 6 7 8 8.638042 646 6.245552e-04
6 -1 3.533436e-04 -1 -1 -1 0.000000 483 3.533436e-04
7 -1 1.428207e-03 -1 -1 -1 0.000000 163 1.428207e-03
8 -1 6.245552e-04 -1 -1 -1 0.000000 646 6.245552e-04
9 -1 -4.396393e-06 -1 -1 -1 0.000000 1585 -4.396393e-06
詳細については、GBMのマニュアルを参照してください。各行はノードに対応し、最初の(名前のない)列はノード番号です。各ノードには左右のノードがあります(ノードがリーフの場合は-1に設定されています)。また、各ノードにはMissingNode
が関連付けられています。
観測を実行するには、ノード0から開始します。観測値にSplitVar
= 46の値がない場合は、ノードMissingNode
= 9に送信されます。ツリーの予測このような観測のためには、ノードゼロに分割される前にツリーが有する予測と同じ予測であるSplitCodePred
= -4.396393e-06となる(ノード0についてはPrediction
= -4.396393e-06)。
この手順は他のノードと分割変数でも同様です。
ソースコードから始めます。ただ、コンソールでgbm
を入力すると、あなたのソースコードを示しています。
function (formula = formula(data), distribution = "bernoulli",
data = list(), weights, var.monotone = NULL, n.trees = 100,
interaction.depth = 1, n.minobsinnode = 10, shrinkage = 0.001,
bag.fraction = 0.5, train.fraction = 1, cv.folds = 0, keep.data = TRUE,
verbose = TRUE)
{
mf <- match.call(expand.dots = FALSE)
m <- match(c("formula", "data", "weights", "offset"), names(mf),
0)
mf <- mf[c(1, m)]
mf$drop.unused.levels <- TRUE
mf$na.action <- na.pass
mf[[1]] <- as.name("model.frame")
mf <- eval(mf, parent.frame())
Terms <- attr(mf, "terms")
y <- model.response(mf, "numeric")
w <- model.weights(mf)
offset <- model.offset(mf)
var.names <- attributes(Terms)$term.labels
x <- model.frame(terms(reformulate(var.names)), data, na.action = na.pass)
response.name <- as.character(formula[[2]])
if (is.character(distribution))
distribution <- list(name = distribution)
cv.error <- NULL
if (cv.folds > 1) {
if (distribution$name == "coxph")
i.train <- 1:floor(train.fraction * nrow(y))
else i.train <- 1:floor(train.fraction * length(y))
cv.group <- sample(rep(1:cv.folds, length = length(i.train)))
cv.error <- rep(0, n.trees)
for (i.cv in 1:cv.folds) {
if (verbose)
cat("CV:", i.cv, "\n")
i <- order(cv.group == i.cv)
gbm.obj <- gbm.fit(x[i.train, , drop = FALSE][i,
, drop = FALSE], y[i.train][i], offset = offset[i.train][i],
distribution = distribution, w = ifelse(w ==
NULL, NULL, w[i.train][i]), var.monotone = var.monotone,
n.trees = n.trees, interaction.depth = interaction.depth,
n.minobsinnode = n.minobsinnode, shrinkage = shrinkage,
bag.fraction = bag.fraction, train.fraction = mean(cv.group !=
i.cv), keep.data = FALSE, verbose = verbose,
var.names = var.names, response.name = response.name)
cv.error <- cv.error + gbm.obj$valid.error * sum(cv.group ==
i.cv)
}
cv.error <- cv.error/length(i.train)
}
gbm.obj <- gbm.fit(x, y, offset = offset, distribution = distribution,
w = w, var.monotone = var.monotone, n.trees = n.trees,
interaction.depth = interaction.depth, n.minobsinnode = n.minobsinnode,
shrinkage = shrinkage, bag.fraction = bag.fraction, train.fraction = train.fraction,
keep.data = keep.data, verbose = verbose, var.names = var.names,
response.name = response.name)
gbm.obj$Terms <- Terms
gbm.obj$cv.error <- cv.error
gbm.obj$cv.folds <- cv.folds
return(gbm.obj)
}
<environment: namespace:gbm>
を素早く読み取り、データがモデルの枠に入れていることを示唆しているとNAのは、それがどのように見えるので、順番に、?na.pass
読書、というna.pass
で処理されますそれは何も特別なことはしませんが、長期的にはそれが何を意味するのかを見るためには、おそらく全体のフィッティングプロセスを読む必要があります。あなたはgbm.fit
のコードを見なければならないかもしれないように見えます。
official guide to gbmsは、テストデータに欠損値を導入するため、欠損値を処理するようにコーディングされていると想定します。
各ツリー内の別々のノードに欠損値を送信するように見えます。 "mygbm"と呼ばれるgbmオブジェクトがある場合、ツリーの各分割には、LeftNodeにRightNodeとMissingNodeがあることを「pretty.gbm.tree(mygbm、i.tree = 1)」と入力すると表示されます。これは、あなたにinteraction.depth = 1があると仮定すると、各ツリーは3つの終端ノード(分割の各側に1つと予測子が欠落している場所に1つ)を持つことを意味します。
特に、gbmパッケージは、次のようにNAs(欠損値)を扱います。このアルゴリズムは、分類ツリーまたは回帰ツリーを構築し、直列に組み合わせることによって機能します。所謂基礎学習木は、左と右の分割(@ user2332165が正しい)への観察を分割することによって構築される。 gbmにはMissingという別のノードタイプもあります。行または観測値にその変数の値がない場合、アルゴリズムは代理分割メソッドを適用します。
サロゲート分割をよりよく理解したい場合は、package rpart vignetteを読むことをおすすめします。
- 1. sp Rパッケージと欠損値
- 2. SASで欠損値をゼロとして処理するwhere節
- 3. ラベルエンコーダのエンコーディングの欠損値
- 4. R- "欠損値変数"を生成する
- 5. R gbmロジスティック回帰
- 6. RのポアソンGLM回帰の欠損値の予測/代入?
- 7. Rのテーブルに欠損値を作成するには?
- 8. ExcelまたはR:欠損値の時系列をマージ
- 9. キャレットによる欠損値
- 10. Rランダムフォレストの処理Posix値
- 11. テーブルに欠損値を含めると結果はR
- 12. GBMからモデルをR
- 13. パネルデータセットからの欠損値のクリア
- 14. 数値フィルタと欠損値(Weka)
- 15. OpenBUGS:ベルヌーイ分布の欠損値
- 16. MySQLの欠損値の検索/検索
- 17. 欠落値は、RのLME
- 18. LEFT JOIN右テーブルの欠損値
- 19. Google Earthの標高プロファイルと欠損値
- 20. 欠損値の入力ファイルを扱う
- 21. Python + GNU Plot:欠損値の扱い
- 22. データセットの欠損値を求めるソリューション
- 23. Pythonで欠損値を代入する
- 24. Reg Free COMリファレンス - 欠損値 '(デフォルト)'
- 25. Cocoaスクリプティング:「null」と「欠損値」を返す
- 26. GroovyのJSONでnullキーまたは欠損キー/値のペアを処理する方法
- 27. Mathematica:欠損値を持つリストの操作
- 28. SASの欠損値を置き換えます
- 29. Rの文字ベクトルを比較して一意の値や欠損値を見つける
- 30. Java 8の欠損パラメータ::
正確な詳細は何ですか? '?gbm'のヘルプページは、欠損値を処理できることを示しています。他に何かを知りたいのですか? –
@BryanHanson:私はそれがそれらを扱うことができることを知っている、私はちょうどそれが行われた方法の説明を探しています。 – screechOwl