Я использую imbalanced-learn для пересмотра моих данных.Я хочу знать, сколько записей в каждом классе есть после использования метода передискретизации.Этот код прекрасно работает:
import imblearn.over_sampling import SMOTE
from collections import Counter
def oversample(x_values, y_values):
oversampler = SMOTE(random_state=42, n_jobs=-1)
x_oversampled, y_oversampled = oversampler.fit_resample(x_values, y_values)
print("Oversampling training set from {0} to {1} using {2}".format(dict(Counter(y_values)), dict(Counter(y_over_sampled)), oversampling_method))
return x_oversampled, y_oversampled
Но я переключился на использование конвейера, чтобы я мог использовать GridSearchCV, чтобы найти лучший метод передискретизации (из ADASYN, SMOTE и BorderlineSMOTE).Поэтому я никогда не вызываю fit_resample самостоятельно и теряю вывод, используя что-то вроде этого:
from imblearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import RandomForestClassifier
pipe = Pipeline([('scaler', MinMaxScaler()), ('sampler', SMOTE(random_state=42, n_jobs=-1)), ('estimator', RandomForestClassifier())])
pipe.fit(x_values, y_values)
Повышение частоты дискретизации работает, но я теряю вывод о том, сколько записей для каждого класса имеется в обучающем наборе.
Есть ли способ получить результат, аналогичный первому примеру, использующий конвейер?