2016-04-09 23 views
-1

Rのマシン学習パッケージ/機能のほぼすべてが、モデルのトレーニング中に相互検証パフォーマンスメトリックを取得できます。私が言うことができるものから、クロスバリデーションされたモデルをxgboost(xgb.cv)でRでクロスバリデーションして保存することはできますか?

、xgboostと相互検証を行うための唯一の方法は、セットアップには、このようなxgb.cv文です:

clf <- xgb.cv(  params    = param, 
        data    = dtrain, 
        nrounds    = 1000, 
        verbose    = 1, 
        watchlist   = watchlist, 
        maximize   = FALSE, 
        nfold    = 2, 
        nthread    = 2, 
        prediction   = T 
) 

それでもprediction = Tのオプションで、あなたは単に予測を取得していますトレーニングデータの結果。 predictステートメントの結果オブジェクト(この例ではclf)を新しいデータで使用する方法はありません。

私の理解は正確であり、回避策はありますか?

+0

私は投稿をより良くすることができるようにdownvoteに関するコメントをいただければ幸いです。 –

+0

downvoterではありませんが、答えは 'xgb.save(bst、" xgboost.model ")'です。ここで、bstは 'xgb.train()'の結果であり、新しいデータセットをロードして予測しますか?相互検証の結果を保存することは、あなたの目標を理解するうえで有用ではないようです。 –

答えて

1

私はあなたの理解が正確であり、相互検証からモデルを保存する設定がないと考えています。私は、caretは、各CVモデルを保存するオプションを間違え欠けていない限り、

クロスバリデーションをより細かく制御するために、あなたはまだ

(ここではhttp://topepo.github.io/caret/training.htmltrainControl機能の詳細を参照してください)caretxgboostモデルを訓練することができます後で予測するために使用します(ただし、評価する指標を手動で指定することもできます)。 CVモデルを使用して新しいデータを予測する理由に応じて、1)最終モデルからCVモデルのインデックスを取得し、特定の1つのモデルを再検証する(クロス検証なしで、同じシードで)手動で作成したすべてのモデルを保存するためにlapplyforループと交差検証:(

> library(MASS) # For the Boston dataset 
> library(caret) 
> ctrl <- trainControl(method = "cv", number = 3, savePred=T) 
> mod <- train(medv~., data = Boston, method = "xgbLinear", trControl = ctrl) 
> str(mod$control$index) 

List of 3 
$ Fold1: int [1:336] 2 3 4 6 8 9 13 14 17 19 ... 
$ Fold2: int [1:338] 1 2 4 5 6 7 9 10 11 12 ... 
$ Fold3: int [1:338] 1 3 5 7 8 10 11 12 14 15 ... 

または2 carettrain関数によって生成されたオブジェクト内の$control$indexリストから)データのちょうどそのサブセット。 createFoldsファミリの関数caretは、クロスバリデーションフォールドを選択するのに便利なツールです。

+0

あなたの答えをありがとう。私は予測のために使うことができるモデルを得ようとしているだけで、特定のCVフォールドに固有のモデルではありません。私は訓練モデルを費やす時間を2倍にしたくありません。実際には 'キャレット 'ではほとんどのモデルタイプがこの機能を提供します。私がキャレットが解決策ではないと思ったのは、xgbを最後にチェックしたときには、機能が極端に限られていたからです。彼らは過去1年間にチューニング機能を大幅に改善したようだ。私はこれを確認してみましょう。私はこれを私が見つけたものに応じて答えとしてマークします。 –

関連する問題