我使用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)
從上面的代碼,我得到的F1得分〜0.8使用scikit-learn和〜0.25使用脫字符號。一個小的差異可能歸因於算法的差異,但是我必須在插入符號模型上做一些錯誤來獲得我在這裏看到的巨大差異。我不想發佈我的數據集,所以希望可以通過代碼來診斷問題。任何幫助將非常感激。
是否存在您在插入符號中指定的隨機狀態參數? – blacksite
@blacksite,不針對脫字符,但我在初始化模型之前設置種子。 –