scikit-learn 1.9 è uscito a giugno 2026, e la release di bug fix 1.9.1 è arrivata a settembre. È la libreria dietro la maggior parte del machine learning classico in Python: regressione, classificazione, clustering e le pipeline intorno. Questa release riguarda meno i nuovi algoritmi e più l'esperienza d'uso: finalmente puoi seguire l'avanzamento dell'addestramento, più modelli girano su GPU e diversi difetti storici sono corretti. Inoltre fa partire il conto alla rovescia per una serie di deprecazioni che diventeranno errori nella 1.11.
Le tappe
scikit-learn 1.9.0
Nuove funzioni e deprecazioni.
scikit-learn 1.9.1
Bug fix, incluso il metadata routing nelle pipeline.
Deprecazioni rimosseIn arrivo
Gli avvisi della 1.9 diventano errori.
pip install --upgrade scikit-learnCallback: guarda i tuoi modelli mentre si addestrano
Una grid search lunga era una scatola nera: la avviavi e aspettavi. scikit-learn 1.9 aggiunge un'API di callback sperimentale, così gli estimator possono comunicare cosa stanno facendo durante fit. Include due callback pronte, sklearn.callback.ProgressBar e sklearn.callback.ScoringMonitor, e supporta l'avanzamento annidato, anche quando il lavoro gira in parallelo.
Dove funzionano le callback nella 1.9
- LogisticRegression
- Solo con solver="lbfgs".
- GridSearchCV e RandomizedSearchCV
- Più HalvingGridSearchCV e HalvingRandomSearchCV.
- Pipeline
- Avanzamento attraverso ogni passo.
- StandardScaler
- Il primo transformer a supportarle.
Sparse array al posto delle matrici sparse
SciPy sta passando dalle matrici sparse agli array sparsi, che si comportano più come gli array di NumPy (per esempio * significa moltiplicazione elemento per elemento, non prodotto tra matrici). scikit-learn ora può restituire entrambi. Il default è ancora "spmatrix" e il piano è passare a "sparray" tra qualche release, quindi conviene provarlo già adesso:
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"Modelli più veloci e più accurati
Velocità e memoria
Novità- LogisticRegression con lbfgs calcola in float32 quando i dati sono float32, usando meno memoria
- RidgeCV e RidgeClassifierCV sono più veloci e più stabili
- SpectralEmbedding è più veloce
- Lo screening gap safe accelera i regressori sparsi con perdita quadratica
Correttezza
Corretto- Pesi dei campioni gestiti correttamente in HistGradientBoosting, RandomForest ed ExtraTrees
- Corretto il criterio friedman_mse di GradientBoosting (il parametro criterion è deprecato)
- Il metodo yeo-johnson di PowerTransformer è numericamente più stabile
- Alcuni punteggi e valori stimati possono cambiare leggermente dopo l'upgrade
Nuovi strumenti
Aggiunti- metrics.metric_at_thresholds calcola una metrica a ogni soglia
- PrecisionRecallDisplay.from_cv_results disegna le curve da cross_validate
- RandomForestRegressor gestisce i valori mancanti con l'errore assoluto
- MiniBatchKMeans accetta i pesi dei campioni
Altre novità: la visualizzazione degli estimator addestrati nei notebook ora mostra gli attributi stimati, e la vista di ColumnTransformer mostra come vengono assemblate le colonne in uscita. narwhals è ora una dipendenza e gestisce l'output in dataframe, quindi set_output(transform="polars") e l'output pandas funzionano in modo più coerente.
Più scikit-learn gira su GPU
Grazie allo standard array API, scikit-learn può eseguire alcuni estimator direttamente su array PyTorch o CuPy, su GPU, senza convertirli in NumPy. La 1.9 aggiunge LogisticRegression e PoissonRegressor (con il solver lbfgs), Nystroem, FeatureUnion quando tutti i suoi passi lo supportano, e altre metriche come l'average precision.
Deprecazioni da sistemare prima della 1.11
Queste generano avvisi nella 1.9 e smetteranno di funzionare nella 1.11. Ognuna ha una soluzione semplice:
# 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))Altre deprecazioni e modifiche
- lasso_path ed enet_path
- n_alphas è deprecato. Passa alphas come intero o come lista.
- GradientBoosting
- Il parametro criterion è deprecato.
- confusion_matrix_at_thresholds
- Passa pos_label e sample_weight come argomenti con nome.
- Metriche con testo
- accuracy_score, confusion_matrix e altre ora danno errore quando y_true è testo e y_pred è numerico.
Un upgrade sicuro in quattro passi
- 1
Fissa le versioni e crea un branch
Fai l'upgrade in un ambiente o branch separato, non in produzione.
- 2
Esegui con gli avvisi visibili
Lancia i test con python -W error::FutureWarning per trovare ogni deprecazione.
- 3
Confronta i punteggi
Riaddestra i modelli principali e confronta le metriche; le correzioni su pesi e binning possono spostare un po' i risultati.
- 4
Passa alla 1.9.1
Corregge il metadata routing nelle pipeline, quindi preferiscila alla 1.9.0.
Verifica cosa hai capito
1/3Quali callback sono incluse in scikit-learn 1.9?
Entrambe stanno in sklearn.callback e l'API è sperimentale.
2/3Cosa sostituisce SVC(probability=True)?
Il parametro probability è deprecato perché non è thread-safe.
3/3Cosa cambia sparse_interface="sparray"?
Il default è ancora spmatrix, con un cambio previsto più avanti.
Hai risposto correttamente a 0 domande su 3.
Stai aggiornando il tuo stack Python quest'autunno? Leggi la guida all'upgrade a pandas 3.0, le novità di Python 3.15 e prepara ambienti puliti con uv.
Fonti: il blog di scikit-learn "release 1.9" (12 giugno 2026) e le note di rilascio di scikit-learn 1.9, inclusa la 1.9.1 (settembre 2026).
