pairwise_distances_chunked#

sklearn.metrics.pairwise_distances_chunked(X, Y=None, *, reduce_func=None, metric='euclidean', n_jobs=None, working_memory=None, **kwds)[Quelle]#

Generiere eine Distanzmatrix Block für Block mit optionaler Reduktion.

In Fällen, in denen nicht die gesamte paarweise Distanzmatrix auf einmal gespeichert werden muss, wird diese Funktion verwendet, um paarweise Distanzen in Blöcken der Größe working_memory zu berechnen. Wenn reduce_func gegeben ist, wird diese auf jeden Block angewendet und ihre Rückgabewerte werden zu Listen, Arrays oder sparsen Matrizen verkettet.

Parameter:
X{array-artig, sparsen Matrix} von Form (n_samples_X, n_samples_X) oder (n_samples_X, n_features)

Array von paarweisen Distanzen zwischen Stichproben oder ein Merkmalsarray. Die Form des Arrays sollte (n_samples_X, n_samples_X) sein, wenn metric=’precomputed’ und andernfalls (n_samples_X, n_features).

Y{array-like, sparse matrix} der Form (n_samples_Y, n_features), Standard=None

Ein optionales zweites Merkmalsarray. Nur erlaubt, wenn metric != „precomputed“.

reduce_funcaufrufbar, Standard=None

Die Funktion, die auf jeden Block der Distanzmatrix angewendet wird und diese auf benötigte Werte reduziert. reduce_func(D_chunk, start) wird wiederholt aufgerufen, wobei D_chunk ein zusammenhängender vertikaler Ausschnitt der paarweisen Distanzmatrix ab Zeile start ist. Sie sollte eines der folgenden zurückgeben: None; ein Array, eine Liste oder eine sparsen Matrix der Länge D_chunk.shape[0]; oder ein Tupel solcher Objekte. Die Rückgabe von None ist nützlich für In-Place-Operationen anstelle von Reduktionen.

Wenn None, gibt pairwise_distances_chunked einen Generator vertikaler Blöcke der Distanzmatrix zurück.

metricstr oder callable, Standard=’euclidean’

Die Metrik, die bei der Berechnung der Distanz zwischen Instanzen in einem Merkmalsarray verwendet wird. Wenn metric eine Zeichenkette ist, muss sie eine der Optionen sein, die von scipy.spatial.distance.pdist für seinen metric-Parameter zugelassen sind, oder eine Metrik, die in pairwise.PAIRWISE_DISTANCE_FUNCTIONS aufgeführt ist. Wenn metric „precomputed“ ist, wird davon ausgegangen, dass X eine Distanzmatrix ist. Alternativ, wenn metric eine aufrufbare Funktion ist, wird sie für jedes Paar von Instanzen (Zeilen) aufgerufen und der resultierende Wert aufgezeichnet. Die aufrufbare Funktion sollte zwei Arrays aus X als Eingabe nehmen und einen Wert zurückgeben, der die Distanz zwischen ihnen angibt.

n_jobsint, default=None

Die Anzahl der Jobs, die für die Berechnung verwendet werden sollen. Dies geschieht, indem die paarweise Matrix in n_jobs gleichmäßige Scheiben unterteilt und diese parallel berechnet werden.

None bedeutet 1, außer in einem joblib.parallel_backend Kontext. -1 bedeutet die Verwendung aller Prozessoren. Siehe Glossar für weitere Details.

working_memoryFloat, Standard=None

Der gesuchte maximale Speicher für temporäre Distanzmatrix-Blöcke. Wenn None (Standard), wird der Wert von sklearn.get_config()['working_memory'] verwendet.

**kwdsoptionale Schlüsselwortparameter

Alle weiteren Parameter werden direkt an die Distanzfunktion weitergegeben. Bei Verwendung einer scipy.spatial.distance-Metrik sind die Parameter immer noch metrikabhängig. Sehen Sie die SciPy-Dokumentation für Anwendungsbeispiele.

Gibt:
D_chunk{ndarray, sparsen Matrix}

Ein zusammenhängender Ausschnitt der Distanzmatrix, optional verarbeitet von reduce_func.

Beispiele

Ohne reduce_func

>>> import numpy as np
>>> from sklearn.metrics import pairwise_distances_chunked
>>> X = np.random.RandomState(0).rand(5, 3)
>>> D_chunk = next(pairwise_distances_chunked(X))
>>> D_chunk
array([[0.   , 0.295, 0.417, 0.197, 0.572],
       [0.295, 0.   , 0.576, 0.419, 0.764],
       [0.417, 0.576, 0.   , 0.449, 0.903],
       [0.197, 0.419, 0.449, 0.   , 0.512],
       [0.572, 0.764, 0.903, 0.512, 0.   ]])

Alle Nachbarn abrufen und die durchschnittliche Entfernung innerhalb des Radius r

>>> r = .2
>>> def reduce_func(D_chunk, start):
...     neigh = [np.flatnonzero(d < r) for d in D_chunk]
...     avg_dist = (D_chunk * (D_chunk < r)).mean(axis=1)
...     return neigh, avg_dist
>>> gen = pairwise_distances_chunked(X, reduce_func=reduce_func)
>>> neigh, avg_dist = next(gen)
>>> neigh
[array([0, 3]), array([1]), array([2]), array([0, 3]), array([4])]
>>> avg_dist
array([0.039, 0.        , 0.        , 0.039, 0.        ])

Wenn r pro Stichprobe definiert ist, müssen wir start verwenden

>>> r = [.2, .4, .4, .3, .1]
>>> def reduce_func(D_chunk, start):
...     neigh = [np.flatnonzero(d < r[i])
...              for i, d in enumerate(D_chunk, start)]
...     return neigh
>>> neigh = next(pairwise_distances_chunked(X, reduce_func=reduce_func))
>>> neigh
[array([0, 3]), array([0, 1]), array([2]), array([0, 3]), array([4])]

Erzwingen der zeilenweisen Generierung durch Reduzierung von working_memory

>>> gen = pairwise_distances_chunked(X, reduce_func=reduce_func,
...                                  working_memory=0)
>>> next(gen)
[array([0, 3])]
>>> next(gen)
[array([0, 1])]