Я использую sklearn GridSearch, чтобы найти лучшие параметры для случайной классификации леса, используя предопределенный набор проверки.Баллы от лучшего оценщика, возвращенного GridSearch, не совпадают с баллами, полученными путем обучения отдельного классификатора с теми же параметрами.
Определение разделения данных
X = pd.concat([X_train, X_devel])
y = pd.concat([y_train, y_devel])
test_fold = -X.index.str.contains('train').astype(int)
ps = PredefinedSplit(test_fold)
Определение GridSearch
n_estimators = [10]
max_depth = [4]
grid = {'n_estimators': n_estimators, 'max_depth': max_depth}
rf = RandomForestClassifier(random_state=0)
rf_grid = GridSearchCV(estimator = rf, param_grid = grid, cv = ps, scoring='recall_macro')
rf_grid.fit(X, y)
Определение классификатора
clf = RandomForestClassifier(n_estimators=10, max_depth=4, random_state=0)
clf.fit(X_train, y_train)
Отзыв был вычислен явно с использованием sklearn.metrics.recall_score
y_pred_train = clf.predict(X_train)
y_pred_devel = clf.predict(X_devel)
uar_train = recall_score(y_pred_train, y_train, average='macro')
uar_devel = recall_score(y_pred_devel, y_devel, average='macro')
GridSearch
uar train: 0.32189884516029466
uar devel: 0.3328299259976279
Случайный лес:
uar train: 0.483040291148839
uar devel: 0.40706644557392435
В чем причина такого несоответствия?