Обычно метод # 4, показанный в статье, реализуется с помощью классификатора того же типа.Похоже, вы хотите попробовать VotingClassifier
на каждом примере набора данных.
Эта методология уже реализована в imblearn.ensemble.BalancedBaggingClassifier , который является расширением подхода Sklearn Bagging.,
Вы можете подать оценку как VotingClassifier
, а количество оценок - как количество раз, которое вы хотите выполнить выборку набора данных.Используйте параметр sampling_strategy
, чтобы указать пропорцию понижающей дискретизации, которую вы хотите получить в классе Majority.
Рабочий пример:
from collections import Counter
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.ensemble import RandomForestClassifier
import xgboost as xgb
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from imblearn.ensemble import BalancedBaggingClassifier # doctest: +NORMALIZE_WHITESPACE
X, y = make_classification(n_classes=2, class_sep=2,
weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)
print('Original dataset shape %s' % Counter(y))
X_train, X_test, y_train, y_test = train_test_split(X, y,
random_state=0)
rnd_clf_1 = RandomForestClassifier()
xgb_clf_1 = xgb.XGBClassifier()
voting_clf_1 = VotingClassifier(
estimators = [
('rf', rnd_clf_1),
('xgb', xgb_clf_1),
],
voting='soft'
)
bbc = BalancedBaggingClassifier(base_estimator=voting_clf_1, random_state=42)
bbc.fit(X_train, y_train) # doctest: +ELLIPSIS
y_pred = bbc.predict(X_test)
print(confusion_matrix(y_test, y_pred))
Если вы хотите заставить вас работать с sklearn для классификатора Voting для агрегирования проб.Смотрите здесь .Возможно, вы сможете повторно использовать функции _predict_proba()
и _collect_probas()
после подбора оценок вручную.