私はscikit-learnとcaretを使って同じ入力データでF1スコアを大幅に上げています。ここでは、それぞれについてGBMモデルを実行しています。scikit-learnとcaret GBMの結果の違いは?
scikit-学ぶ(F1はデフォルトの出力である)
est = GradientBoostingClassifier(n_estimators = 4000, learning_rate = 0.1, max_depth = 5, max_features = 'log2', random_state = 0)
cv = StratifiedKFold(y = labels, n_folds = 10, shuffle = True, random_state = 0)
scores = cross_val_score(est, data, labels, scoring = 'f1', cv, n_jobs = -1)
キャレット(F1を定義して呼び出さなければなりません):
f1 <- function(data, lev = NULL, model = NULL) {
f1_val <- F1_Score(y_pred = data$pred, y_true = data$obs, positive = lev[1])
c("F1" = f1_val)
}
set.seed(0)
gbm <- train(label ~ .,
data = data,
method = "gbm",
trControl = trainControl(method = "repeatedcv", number = 10, repeats = 3,
summaryFunction = f1, classProbs = TRUE),
metric = "F1",
verbose = FALSE)
上記のコードから、私は〜0.8のF1のスコアを取得Scikit-Learnを使用し、キャレットを使用して〜0.25を使用します。小さな違いはアルゴリズムの違いに起因する可能性がありますが、私はここで見ている大きな違いを得るために、キャレットモデリングに何か間違ったことをしているに違いありません。私は自分のデータセットを投稿したくないので、コードから問題を診断できることを願っています。どんな助けでも大歓迎です。
キャレットに指定するランダムな状態パラメータはありますか? – blacksite
@blacksite、キャレットに固有のものではありませんが、モデルを初期化する前にシードを設定します。 –