scikit-learn 1.9 est sorti en juin 2026, et la version corrective 1.9.1 a suivi en septembre. C'est la bibliothèque derrière l'essentiel du machine learning classique en Python : régression, classification, clustering et les pipelines qui les entourent. Cette version porte moins sur de nouveaux algorithmes que sur l'expérience d'utilisation : vous pouvez enfin suivre la progression de l'entraînement, plus de modèles tournent sur GPU et plusieurs défauts de longue date sont corrigés. Elle lance aussi le compte à rebours d'une série de dépréciations qui deviendront des erreurs en 1.11.
Calendrier des versions
scikit-learn 1.9.0
Nouvelles fonctionnalités et dépréciations.
scikit-learn 1.9.1
Corrections, dont le routage des métadonnées dans les pipelines.
Dépréciations suppriméesÀ venir
Les avertissements de la 1.9 deviennent des erreurs.
pip install --upgrade scikit-learnCallbacks : voyez vos modèles s'entraîner
Une longue recherche par grille était une boîte noire : on la lançait et on attendait. scikit-learn 1.9 ajoute une API de callbacks expérimentale, pour que les estimateurs indiquent ce qu'ils font pendant fit. Elle est livrée avec deux callbacks, sklearn.callback.ProgressBar et sklearn.callback.ScoringMonitor, et gère la progression imbriquée, même quand le travail tourne en parallèle.
Où fonctionnent les callbacks en 1.9
- LogisticRegression
- Uniquement avec solver="lbfgs".
- GridSearchCV et RandomizedSearchCV
- Plus HalvingGridSearchCV et HalvingRandomSearchCV.
- Pipeline
- Progression à travers chaque étape.
- StandardScaler
- Le premier transformateur à les prendre en charge.
Des tableaux creux au lieu des matrices creuses
SciPy passe des matrices creuses aux tableaux creux, qui se comportent davantage comme des tableaux NumPy (par exemple, * signifie multiplication élément par élément, pas produit matriciel). scikit-learn peut désormais renvoyer l'un ou l'autre. La valeur par défaut reste "spmatrix", et le passage à "sparray" est prévu dans quelques versions : autant l'essayer dès maintenant.
import sklearn
sklearn.set_config(sparse_interface="sparray")
# From here on, scikit-learn returns SciPy sparse arrays
# (for example csr_array) wherever it supports the new setting.
print(sklearn.get_config()["sparse_interface"]) # "sparray"Des modèles plus rapides et plus justes
Vitesse et mémoire
Nouveau- LogisticRegression avec lbfgs calcule en float32 quand vos données sont en float32, et consomme moins de mémoire
- RidgeCV et RidgeClassifierCV sont plus rapides et plus stables
- SpectralEmbedding est plus rapide
- Le gap safe screening accélère les régresseurs creux à perte quadratique
Exactitude
Corrigé- Poids d'échantillons correctement gérés dans HistGradientBoosting, RandomForest et ExtraTrees
- Critère friedman_mse de GradientBoosting corrigé (le paramètre criterion est déprécié)
- La méthode yeo-johnson de PowerTransformer est plus stable numériquement
- Certains scores et valeurs ajustées peuvent légèrement bouger après la mise à jour
Nouveaux outils
Ajouté- metrics.metric_at_thresholds calcule une métrique à chaque seuil
- PrecisionRecallDisplay.from_cv_results trace des courbes depuis cross_validate
- RandomForestRegressor gère les valeurs manquantes avec l'erreur absolue
- MiniBatchKMeans accepte les poids d'échantillons
Autres nouveautés : l'affichage des estimateurs entraînés dans les notebooks montre désormais les attributs ajustés, et la vue de ColumnTransformer montre comment les colonnes de sortie sont assemblées. narwhals devient une dépendance et gère la sortie en dataframe, si bien que set_output(transform="polars") et la sortie pandas sont plus cohérentes.
Davantage de scikit-learn sur GPU
Grâce au standard array API, scikit-learn peut exécuter certains estimateurs directement sur des tableaux PyTorch ou CuPy, sur GPU, sans conversion vers NumPy. La 1.9 ajoute LogisticRegression et PoissonRegressor (avec le solveur lbfgs), Nystroem, FeatureUnion quand toutes ses étapes le permettent, et d'autres métriques comme l'average precision.
Dépréciations à corriger avant la 1.11
Elles génèrent des avertissements en 1.9 et cesseront de fonctionner en 1.11. Chacune se corrige simplement :
# Deprecated: SVC(probability=True) is not thread-safe
from sklearn.svm import SVC
from sklearn.calibration import CalibratedClassifierCV
clf = CalibratedClassifierCV(SVC(), ensemble=False)
clf.fit(X_train, y_train)
proba = clf.predict_proba(X_test)from sklearn.metrics import log_loss
# Deprecated: log_loss(y_test, proba) via y_pred
score = log_loss(y_test, y_proba=proba)from sklearn.linear_model import LogisticRegressionCV
# The default scoring changes from accuracy to "neg_log_loss" in 1.11.
# Set it explicitly to keep today's behaviour and silence the warning.
model = LogisticRegressionCV(scoring="accuracy")from sklearn.preprocessing import TargetEncoder
from sklearn.model_selection import KFold
# shuffle and random_state are deprecated: pass a CV splitter instead
enc = TargetEncoder(cv=KFold(n_splits=5, shuffle=True, random_state=0))Autres dépréciations et changements
- lasso_path et enet_path
- n_alphas est déprécié. Passez alphas sous forme d'entier ou de liste.
- GradientBoosting
- Le paramètre criterion est déprécié.
- confusion_matrix_at_thresholds
- Passez pos_label et sample_weight comme arguments nommés.
- Métriques avec du texte
- accuracy_score, confusion_matrix et d'autres renvoient une erreur quand y_true est du texte et y_pred numérique.
Une mise à jour sûre en quatre étapes
- 1
Figez et créez une branche
Mettez à jour dans un environnement ou une branche à part, pas en production.
- 2
Rendez les avertissements visibles
Lancez vos tests avec python -W error::FutureWarning pour trouver chaque dépréciation.
- 3
Comparez les scores
Réentraînez les modèles clés et comparez les métriques ; les corrections de poids et de discrétisation peuvent légèrement décaler les résultats.
- 4
Passez à la 1.9.1
Elle corrige le routage des métadonnées dans les pipelines : préférez-la à la 1.9.0.
Testez vos connaissances
1/3Quels callbacks sont fournis avec scikit-learn 1.9 ?
Les deux se trouvent dans sklearn.callback, et l'API est expérimentale.
2/3Qu'est-ce qui remplace SVC(probability=True) ?
Le paramètre probability est déprécié car il n'est pas thread-safe.
3/3Que change sparse_interface="sparray" ?
La valeur par défaut reste spmatrix, avec un changement prévu plus tard.
Vous avez 0 bonne(s) réponse(s) sur 3.
Vous mettez à jour votre stack Python cet automne ? Lisez le guide de migration vers pandas 3.0, les nouveautés de Python 3.15 et préparez des environnements propres avec uv.
Sources : le blog scikit-learn « release 1.9 » (12 juin 2026) et les notes de version de scikit-learn 1.9, y compris la 1.9.1 (septembre 2026).
