我使用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,不针对脱字符,但我在初始化模型之前设置种子。 –