Solution officielle
import numpy as np
from sklearn.ensemble import StackingClassifier, RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
def stacking_classifiers(X_train, y_train, X_test, y_test):
estimators = [
('rf', RandomForestClassifier(n_estimators=50, random_state=42)),
('lr', LogisticRegression(max_iter=1000, random_state=42)),
('knn', KNeighborsClassifier(n_neighbors=5)),
]
# Accuracy de chaque modèle seul
accuracy_par_modele = {}
for name, model in estimators:
model.fit(X_train, y_train)
accuracy_par_modele[name] = float(accuracy_score(y_test, model.predict(X_test)))
# Stacking
stacking = StackingClassifier(
estimators=[
('rf', RandomForestClassifier(n_estimators=50, random_state=42)),
('lr', LogisticRegression(max_iter=1000, random_state=42)),
('knn', KNeighborsClassifier(n_neighbors=5)),
],
final_estimator=LogisticRegression(max_iter=1000, random_state=42),
)
stacking.fit(X_train, y_train)
return {
'accuracy': float(accuracy_score(y_test, stacking.predict(X_test))),
'accuracy_par_modele': accuracy_par_modele,
}