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_memoryzu berechnen. Wennreduce_funcgegeben 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, wobeiD_chunkein zusammenhängender vertikaler Ausschnitt der paarweisen Distanzmatrix ab Zeilestartist. Sie sollte eines der folgenden zurückgeben: None; ein Array, eine Liste oder eine sparsen Matrix der LängeD_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.pdistfü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.
Nonebedeutet 1, außer in einemjoblib.parallel_backendKontext.-1bedeutet 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
startverwenden>>> 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])]