Release Highlights für scikit-learn 1.6#

Wir freuen uns, die Veröffentlichung von scikit-learn 1.6 bekannt zu geben! Viele Fehlerbehebungen und Verbesserungen wurden hinzugefügt, ebenso wie einige wichtige neue Funktionen. Nachfolgend beschreiben wir die Highlights dieser Version. Für eine vollständige Liste aller Änderungen siehe die Release Notes.

Um die neueste Version zu installieren (mit pip)

pip install --upgrade scikit-learn

oder mit conda

conda install -c conda-forge scikit-learn

FrozenEstimator: Einfrieren eines Estimators#

Dieser Meta-Estimator erlaubt es Ihnen, einen Estimator zu nehmen und seine fit-Methode einzufrieren, was bedeutet, dass der Aufruf von fit keine Operationen durchführt; außerdem rufen fit_predict und fit_transform predict bzw. transform auf, ohne fit aufzurufen. Die anderen Methoden und Eigenschaften des ursprünglichen Estimators bleiben unverändert. Ein interessanter Anwendungsfall hierfür ist die Verwendung eines vortrainierten Modells als Transformationsschritt in einer Pipeline oder die Übergabe eines vortrainierten Modells an einige der Meta-Estimators. Hier ist ein kurzes Beispiel

import time

from sklearn.datasets import make_classification
from sklearn.frozen import FrozenEstimator
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import FixedThresholdClassifier

X, y = make_classification(n_samples=1000, random_state=0)

start = time.time()
classifier = SGDClassifier().fit(X, y)
print(f"Fitting the classifier took {(time.time() - start) * 1_000:.2f} milliseconds")

start = time.time()
threshold_classifier = FixedThresholdClassifier(
    estimator=FrozenEstimator(classifier), threshold=0.9
).fit(X, y)
print(
    f"Fitting the threshold classifier took {(time.time() - start) * 1_000:.2f} "
    "milliseconds"
)
Fitting the classifier took 4.11 milliseconds
Fitting the threshold classifier took 0.53 milliseconds

Das Trainieren des Threshold-Klassifikators hat das Trainieren des inneren SGDClassifier übersprungen. Weitere Details finden Sie im Beispiel Beispiele zur Verwendung von FrozenEstimator.

Transformation von Daten, die nicht X sind, in einer Pipeline#

Die Pipeline unterstützt nun die Transformation von übergebenen Daten, die nicht X sind, falls erforderlich. Dies kann durch Setzen des neuen Parameters transform_input erreicht werden. Dies ist besonders nützlich, wenn ein Validierungsdatensatz durch die Pipeline übergeben wird.

Stellen Sie sich zum Beispiel vor, EstimatorWithValidationSet ist ein Estimator, der einen Validierungsdatensatz akzeptiert. Wir können jetzt eine Pipeline haben, die den Validierungsdatensatz transformiert und ihn an den Estimator übergibt.

with sklearn.config_context(enable_metadata_routing=True):
    est_gs = GridSearchCV(
        Pipeline(
            (
                StandardScaler(),
                EstimatorWithValidationSet(...).set_fit_request(X_val=True, y_val=True),
            ),
            # telling pipeline to transform these inputs up to the step which is
            # requesting them.
            transform_input=["X_val"],
        ),
        param_grid={"estimatorwithvalidationset__param_to_optimize": list(range(5))},
        cv=5,
    ).fit(X, y, X_val=X_val, y_val=y_val)

Im obigen Code sind die entscheidenden Teile der Aufruf von set_fit_request, um anzugeben, dass X_val und y_val von der EstimatorWithValidationSet.fit-Methode benötigt werden, und der Parameter transform_input, um der Pipeline mitzuteilen, dass X_val transformiert werden soll, bevor es an EstimatorWithValidationSet.fit übergeben wird.

Beachten Sie, dass scikit-learn-Estimators derzeit noch nicht erweitert wurden, um benutzerdefinierte Validierungsdatensätze zu akzeptieren. Diese Funktion wird frühzeitig veröffentlicht, um Feedback von Drittanbieterbibliotheken zu erhalten, die davon profitieren könnten.

Multiclass-Unterstützung für LogisticRegression(solver="newton-cholesky")#

Der Solver "newton-cholesky" (ursprünglich in scikit-learn Version 1.2 eingeführt) war bisher auf binäre LogisticRegression und einige andere verallgemeinerte lineare Regressionsschätzer (nämlich PoissonRegressor, GammaRegressor und TweedieRegressor) beschränkt.

Diese neue Version enthält Unterstützung für Multiclass (multinomial) LogisticRegression.

Dieser Solver ist besonders nützlich, wenn die Anzahl der Features klein bis mittelgroß ist. Es wurde empirisch gezeigt, dass er bei einigen mittelgroßen Datensätzen mit One-Hot-kodierten kategorialen Features zuverlässiger und schneller konvergiert als andere Solver, wie in den Benchmark-Ergebnissen des Pull-Requests zu sehen ist.

Fehlende Werteunterstützung für Extra Trees#

Die Klassen ensemble.ExtraTreesClassifier und ensemble.ExtraTreesRegressor unterstützen nun fehlende Werte. Weitere Details finden Sie im Benutzerhandbuch.

import numpy as np

from sklearn.ensemble import ExtraTreesClassifier

X = np.array([0, 1, 6, np.nan]).reshape(-1, 1)
y = [0, 0, 1, 1]

forest = ExtraTreesClassifier(random_state=0).fit(X, y)
forest.predict(X)
array([0, 0, 1, 1])

Jeden Datensatz aus dem Web herunterladen#

Die Funktion datasets.fetch_file ermöglicht das Herunterladen einer Datei von jeder beliebigen URL. Diese praktische Funktion bietet integriertes Caching auf der lokalen Festplatte, eine SHA256-Prüfsummenintegritätsprüfung und einen automatisierten Wiederholungsmechanismus bei Netzwerkfehlern.

Das Ziel ist es, die gleiche Benutzerfreundlichkeit und Zuverlässigkeit wie bei Dataset-Fetchern zu bieten und gleichzeitig die Flexibilität zu ermöglichen, mit Daten aus beliebigen Online-Quellen und Dateiformaten zu arbeiten.

Die heruntergeladene Datei kann dann mit generischen oder domänenspezifischen Funktionen wie pandas.read_csv, pandas.read_parquet usw. geladen werden.

Array API-Unterstützung#

Viele weitere Estimators und Funktionen wurden seit Version 1.5 aktualisiert, um Array API-kompatible Eingaben zu unterstützen, insbesondere die Meta-Estimators für Hyperparameter-Tuning aus dem Modul sklearn.model_selection und die Metriken aus dem Modul sklearn.metrics.

Weitere Anweisungen zur Verwendung von scikit-learn mit Array API-kompatiblen Bibliotheken wie PyTorch oder CuPy finden Sie auf der Seite Array API-Unterstützung.

Fast vollständige Unterstützung für Metadata Routing#

Die Unterstützung für das Routing von Metadaten wurde zu allen verbleibenden Estimators und Funktionen hinzugefügt, mit Ausnahme von AdaBoost. Weitere Details finden Sie im Benutzerhandbuch für Metadata Routing.

Unterstützung für free-threaded CPython 3.13#

scikit-learn bietet vorläufige Unterstützung für free-threaded CPython. Insbesondere sind für alle unsere unterstützten Plattformen free-threaded Wheels verfügbar.

Free-threaded (auch bekannt als nogil) CPython 3.13 ist eine experimentelle Version von CPython 3.13, die darauf abzielt, effiziente Multi-Threading-Anwendungsfälle durch die Entfernung des Global Interpreter Lock (GIL) zu ermöglichen.

Weitere Details zu free-threaded CPython finden Sie in der py-free-threading Dokumentation, insbesondere wie Sie ein free-threaded CPython installieren und Ecosystem-Kompatibilität-Tracking.

Probieren Sie free-threaded CPython gerne in Ihrem Anwendungsfall aus und melden Sie alle Probleme!

Verbesserungen an der Entwickler-API für Drittanbieterbibliotheken#

Wir haben an der Verbesserung der Entwickler-API für Drittanbieterbibliotheken gearbeitet. Dies ist noch in Arbeit, aber in dieser Version wurde eine ganze Menge Arbeit geleistet. Diese Version beinhaltet

  • sklearn.utils.validation.validate_data wird eingeführt und ersetzt die bisher private Methode BaseEstimator._validate_data. Diese Funktion erweitert check_array und fügt Unterstützung für das Speichern von Eingabemerkmalanzahlen und -namen hinzu.

  • Estimator-Tags sind nun überarbeitet und Teil der öffentlichen API über sklearn.utils.Tags. Estimators sollten nun die Methode BaseEstimator.__sklearn_tags__ überschreiben, anstatt eine Methode _more_tags zu implementieren. Wenn Sie mehrere scikit-learn-Versionen unterstützen möchten, können Sie beide Methoden in Ihrer Klasse implementieren.

  • Als Konsequenz der Entwicklung einer öffentlichen Tag-API haben wir den Tag _xfail_checks entfernt und Tests, die voraussichtlich fehlschlagen, werden direkt an check_estimator und parametrize_with_checks übergeben. Siehe die entsprechenden API-Dokumente für weitere Details.

  • Viele Tests in der gemeinsamen Test-Suite wurden aktualisiert und geben hilfreichere Fehlermeldungen aus. Wir haben auch einige neue Tests hinzugefügt, die Ihnen helfen sollten, potenzielle Probleme mit Ihren Estimators einfacher zu beheben.

Eine aktualisierte Version unseres Leitfadens zur Entwicklung von scikit-learn-Estimators ist ebenfalls verfügbar, dessen Lektüre wir Ihnen empfehlen.

Gesamtlaufzeit des Skripts: (0 Minuten 0,098 Sekunden)

Verwandte Beispiele

Release Highlights für scikit-learn 1.8

Release Highlights für scikit-learn 1.8

Release Highlights für scikit-learn 1.7

Release Highlights für scikit-learn 1.7

Release Highlights für scikit-learn 1.2

Release Highlights für scikit-learn 1.2

Release Highlights für scikit-learn 1.3

Release Highlights für scikit-learn 1.3

Galerie generiert von Sphinx-Gallery