Хорошо, я нашел решение. X - это мой фрейм данных функций, а y - метки. f1_score(y_test, y_pred, average=None)
дает оценку F1 для каждого класса без агрегирования. Таким образом, мы обучаем модель каждой из складок и пробуем ее на тестовом наборе.
from sklearn.model_selection import KFold
cv = KFold(n_splits=5, shuffle=False)
for train_index, test_index in cv.split(X):
X_train, X_test = X.iloc[train_index], X.iloc[test_index]
y_train, y_test = y.iloc[train_index], y.iloc[test_index]
clf = clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f1_score(y_test, y_pred, average=None))
Тогда результат будет:
[0.99320793 0.79749478 0.34782609 0.44243792]
[0.99352309 0.82583622 0.34615385 0.48873874]
[0.99294785 0.78794403 0.28571429 0.42403628]
[0.99324611 0.79236813 0.31654676 0.43778802]
[0.99327615 0.79136691 0.32704403 0.42410197]
, где каждая строка имеет F1 оценки для каждой складки, и каждое значение представляет собой оценку F1 каждого класса.
Если есть более короткое и простое решение, пожалуйста, не стесняйтесь опубликовать его.