1

gbm予測回帰モデルの構築に使用しています。トレーニング セットとテスト セットがあります (事前に定義されており、ランダムに選択されていません)。以下は、コードの概要です。

トレーニング データには約 600 行、テスト データには 150 行あります。私はそれらが非常に少ないことを知っていますが、それでも.

train <- ....
test <- ....

set.seed(123)
model <- gbm(target ~., data = train,
                distribution = "gaussian",
                n.trees = 4000,
                interaction.depth = 2,
                n.minobsinnode = 5,
                shrinkage = 0.01,
                bag.fraction = 1,
                train.fraction = .95,
                verbose = TRUE
            )

best_iter <- gbm.perf(model)

set.seed(123)
predictions <- predict(model, newdata = test, n.trees = best_iter)

set.seed(123)
predictions <- predict(model, newdata = train, n.trees = best_iter)

どういうわけか、gbm モデルをまったく同じパラメーターで何度も実行すると、テスト セットで予測を再現できません。しかし同時に、私はいつでも電車のセットで予測を再現することができます. モデルを構築して予測を行う前にもシードを設定しています。誰かが何が起こっているのかを理解するのを手伝ってくれますか? トレーニングとテストのデータは常に同じままであることに注意してください。実行ごとに変更することはありません。

4

1 に答える 1

0

問題を理解したことがありますか?私はあなたとまったく同じモデルアプローチを行っていますが、私が見ることができるコードの唯一の違いは、予測への呼び出しです。トレーニングとテストのそれぞれについて、newdata から従属変数を削除してみてください。また、 n.trees を直接設定します。現在の方法で何が得られているかわかりません。そして予測を 2 つの別々のオブジェクトに保存します。

PredEst <- predict(model, newdata = train[-which(names(train) %in% as.character("target"))], n.trees = 4000)

PredVal <- predict(model, newdata = test[-which(names(test) %in% as.character("target"))], n.trees = 4000)
于 2016-10-28T18:47:28.157 に答える