Utilities für Entwickler#

Scikit-learn enthält eine Reihe von Hilfsprogrammen zur Unterstützung der Entwicklung. Diese befinden sich in sklearn.utils und umfassen Werkzeuge in verschiedenen Kategorien. Alle folgenden Funktionen und Klassen befinden sich im Modul sklearn.utils.

Warnung

Diese Hilfsprogramme sind für die interne Verwendung innerhalb des scikit-learn-Pakets bestimmt. Ihre Stabilität zwischen den Versionen von scikit-learn wird nicht garantiert. Insbesondere Backports werden entfernt, wenn sich die scikit-learn-Abhängigkeiten weiterentwickeln.

Validierungswerkzeuge#

Dies sind Werkzeuge zur Überprüfung und Validierung von Eingaben. Wenn Sie eine Funktion schreiben, die Arrays, Matrizen oder dünne Matrizen als Argumente akzeptiert, sollten die folgenden Werkzeuge, wo zutreffend, verwendet werden.

  • assert_all_finite: Löst einen Fehler aus, wenn das Array NaNs oder Infs enthält.

  • as_float_array: Konvertiert die Eingabe in ein Array von Gleitkommazahlen. Wenn eine dünne Matrix übergeben wird, wird eine dünne Matrix zurückgegeben.

  • check_array: Überprüft, ob die Eingabe ein 2D-Array ist, und löst bei dünnen Matrizen einen Fehler aus. Erlaubte Formate für dünne Matrizen können optional angegeben werden, ebenso wie die Zulassung von 1D- oder N-dimensionalen Arrays. Ruft standardmäßig assert_all_finite auf.

  • check_X_y: Überprüft, ob X und y konsistente Längen haben, ruft check_array für X und column_or_1d für y auf. Für Multilabel-Klassifizierung oder Multitarget-Regression geben Sie multi_output=True an, in diesem Fall wird check_array für y aufgerufen.

  • indexable: Überprüft, ob alle Eingabearrays konsistente Längen haben und sicher geschnitten oder indiziert werden können. Dies wird zur Validierung der Eingabe für die Kreuzvalidierung verwendet.

  • validation.check_memory prüft, ob die Eingabe joblib.Memory-ähnlich ist, was bedeutet, dass sie in eine sklearn.utils.Memory-Instanz (typischerweise ein String, der das cachedir angibt) konvertiert werden kann oder die gleiche Schnittstelle hat.

Wenn Ihr Code auf einen Zufallszahlengenerator angewiesen ist, sollten Sie niemals Funktionen wie numpy.random.random oder numpy.random.normal verwenden. Dieser Ansatz kann zu Wiederholbarkeitsproblemen in Unit-Tests führen. Stattdessen sollte ein numpy.random.RandomState-Objekt verwendet werden, das aus einem random_state-Argument erstellt wird, das an die Klasse oder Funktion übergeben wird. Die Funktion check_random_state kann dann verwendet werden, um ein Zufallszahlengeneratorobjekt zu erstellen.

  • check_random_state: Erstellt ein np.random.RandomState-Objekt aus einem Parameter random_state.

    • Wenn random_state None oder np.random ist, wird ein zufällig initialisiertes RandomState-Objekt zurückgegeben.

    • Wenn random_state eine Ganzzahl ist, wird sie zum Seed eines neuen RandomState-Objekts verwendet.

    • Wenn random_state ein RandomState-Objekt ist, wird es weitergereicht.

Zum Beispiel

>>> from sklearn.utils import check_random_state
>>> random_state = 0
>>> random_state = check_random_state(random_state)
>>> random_state.rand(4)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])

Bei der Entwicklung Ihres eigenen scikit-learn-kompatiblen Schätzers stehen Ihnen die folgenden Helfer zur Verfügung.

  • validation.check_is_fitted: Überprüft, ob der Schätzer vor dem Aufruf von transform, predict oder ähnlichen Methoden trainiert wurde. Dieser Helfer ermöglicht die Ausgabe einer standardisierten Fehlermeldung über Schätzer hinweg.

  • validation.has_fit_parameter: Überprüft, ob ein bestimmter Parameter in der fit-Methode eines gegebenen Schätzers unterstützt wird.

Effiziente lineare Algebra & Array-Operationen#

  • extmath.randomized_range_finder: Erstellt eine orthonormale Matrix, deren Bereich den Bereich der Eingabe approximiert. Dies wird in extmath.randomized_svd, unten, verwendet.

  • extmath.randomized_svd: Berechnet die k-trunkierte randomisierte SVD. Dieser Algorithmus findet die exakte trunkierte Singulärwertzerlegung unter Verwendung von Randomisierung zur Beschleunigung der Berechnungen. Er ist besonders schnell auf großen Matrizen, bei denen Sie nur wenige Komponenten extrahieren möchten.

  • arrayfuncs.cholesky_delete: (verwendet in lars_path) Entfernt ein Element aus einer Cholesky-Faktorisierung.

  • arrayfuncs.min_pos: (verwendet in sklearn.linear_model.least_angle) Findet das Minimum der positiven Werte in einem Array.

  • extmath.fast_logdet: Berechnet effizient den Logarithmus der Determinante einer Matrix.

  • extmath.density: Berechnet effizient die Dichte eines dünnen Vektors

  • extmath.safe_sparse_dot: Skalarprodukt, das scipy.sparse-Eingaben korrekt behandelt. Wenn die Eingaben dicht sind, ist es äquivalent zu numpy.dot.

  • extmath.weighted_mode: eine Erweiterung von scipy.stats.mode, die es jedem Element erlaubt, ein reellwertiges Gewicht zu haben.

  • resample: Arrays oder dünne Matrizen auf konsistente Weise neu abtasten. Wird in shuffle, unten, verwendet.

  • shuffle: Arrays oder dünne Matrizen auf konsistente Weise mischen. Wird in k_means verwendet.

Effizientes Zufälliges Abtasten#

  • random.sample_without_replacement: Implementiert effiziente Algorithmen zum Ziehen von n_samples ganzen Zahlen aus einer Grundgesamtheit der Größe n_population ohne Zurücklegen.

Effiziente Routinen für dünne Matrizen#

Das Cython-Modul sklearn.utils.sparsefuncs enthält kompilierte Erweiterungen zur effizienten Verarbeitung von scipy.sparse-Daten.

Graph-Routinen#

  • graph.single_source_shortest_path_length: (derzeit nicht in scikit-learn verwendet) Gibt den kürzesten Pfad von einer einzelnen Quelle zu allen verbundenen Knoten in einem Graphen zurück. Der Code ist von networkx adaptiert. Wenn dies jemals wieder benötigt wird, wäre es weitaus schneller, eine einzelne Iteration des Dijkstra-Algorithmus von graph_shortest_path zu verwenden.

Testfunktionen#

  • discovery.all_estimators: Gibt eine Liste aller Schätzer in scikit-learn zurück, um konsistentes Verhalten und Schnittstellen zu testen.

  • discovery.all_displays: Gibt eine Liste aller Anzeigen (bezogen auf die Plotting-API) in scikit-learn zurück, um konsistentes Verhalten und Schnittstellen zu testen.

  • discovery.all_functions: Gibt eine Liste aller Funktionen in scikit-learn zurück, um konsistentes Verhalten und Schnittstellen zu testen.

Hilfsfunktion für Mehrklassen und Mehrlabels#

  • multiclass.is_multilabel: Hilfsfunktion zur Überprüfung, ob die Aufgabe eine Mehrklassenklassifizierung ist.

  • multiclass.unique_labels: Hilfsfunktion zur Extraktion eines geordneten Arrays eindeutiger Labels aus verschiedenen Zielformaten.

Hilfsfunktionen#

  • gen_even_slices: Generator zur Erstellung von n-er Gruppen von Slices bis zu n. Wird in dict_learning und k_means verwendet.

  • gen_batches: Generator zur Erstellung von Slices, die Batch-Größen-Elemente von 0 bis n enthalten

  • safe_mask: Hilfsfunktion zur Konvertierung einer Maske in das Format, das von dem Numpy-Array oder der dünnen SciPy-Matrix erwartet wird, auf der sie verwendet werden soll (dünne Matrizen unterstützen nur Ganzzahlindizes, während Numpy-Arrays sowohl boolesche Masken als auch Ganzzahlindizes unterstützen).

  • safe_sqr: Hilfsfunktion für die einheitliche Quadrierung (**2) von Array-ähnlichen Objekten, Matrizen und dünnen Matrizen.

Hash-Funktionen#

  • murmurhash3_32 stellt einen Python-Wrapper für die nicht kryptografische Hash-Funktion MurmurHash3_x86_32 C++ bereit. Diese Hash-Funktion eignet sich für die Implementierung von Lookup-Tabellen, Bloom-Filtern, Count Min Sketch, Feature-Hashing und implizit definierten dünnen Zufallsprojektionen.

    >>> from sklearn.utils import murmurhash3_32
    >>> murmurhash3_32("some feature", seed=0) == -384616559
    True
    
    >>> murmurhash3_32("some feature", seed=0, positive=True) == 3910350737
    True
    

    Das Modul sklearn.utils.murmurhash kann auch von anderen Cython-Modulen „cimportiert“ werden, um von der hohen Leistung von MurmurHash zu profitieren und gleichzeitig den Overhead des Python-Interpreters zu umgehen.

Warnungen und Ausnahmen#

  • deprecated: Dekorator zum Markieren einer Funktion oder Klasse als veraltet.

  • ConvergenceWarning: Benutzerdefinierte Warnung zum Abfangen von Konvergenzproblemen. Wird in sklearn.covariance.graphical_lasso verwendet.