pairwise_distances_chunked
- sklearn.metrics.pairwise_distances_chunked(X, Y=None, *, reduce_func=None, metric='euclidean', n_jobs=None, working_memory=None, **kwds)[исходный код]
-
Создает матрицу расстояний по частям с возможностью редукции.
Если нет необходимости одновременно хранить всю матрицу попарных расстояний, эта функция используется для вычисления попарных расстояний блоками размером
working_memory. Если заданreduce_func, он применяется к каждому блоку, а возвращаемые им значения объединяются в списки, массивы или разреженные матрицы.- Параметры:
-
- X{массивоподобный объект, разреженная матрица} формы (n_samples_X, n_samples_X) или (n_samples_X, n_features)
-
Массив попарных расстояний между образцами или массив признаков. Если metric=’precomputed’, форма массива должна быть (n_samples_X, n_samples_X), а в остальных случаях — (n_samples_X, n_features).
- Y{массивоподобный объект, разреженная матрица} формы (n_samples_Y, n_features), по умолчанию None
-
Необязательный второй массив признаков. Допустим только при metric != “precomputed”.
- reduce_funcвызываемый объект, по умолчанию None
-
Функция, применяемая к каждому блоку матрицы расстояний для извлечения необходимых значений.
reduce_func(D_chunk, start)вызывается многократно, гдеD_chunk— непрерывный вертикальный срез матрицы попарных расстояний, начинающийся со строкиstart. Функция должна возвращать одно из следующего: None; массив, список или разреженную матрицу длиныD_chunk.shape[0]; либо кортеж из таких объектов. Возврат None полезен для операций на месте, а не для редукции.Если значение равно None, pairwise_distances_chunked возвращает генератор вертикальных блоков матрицы расстояний.
- metricстрока или вызываемый объект, по умолчанию ’euclidean’
-
Метрика, используемая для вычисления расстояния между экземплярами в массиве признаков. Если metric — строка, она должна быть одной из метрик, допустимых для параметра metric в
scipy.spatial.distance.pdist, либо метрикой из pairwise.PAIRWISE_DISTANCE_FUNCTIONS. Если metric равно “precomputed”, предполагается, что X — это матрица расстояний. В качестве альтернативы, если metric — вызываемая функция, она вызывается для каждой пары экземпляров (строк), а полученное значение записывается. Функция должна принимать на вход два массива из X и возвращать значение, указывающее расстояние между ними. - n_jobsint, по умолчанию None
-
Количество заданий для вычисления. Матрица попарных расстояний разбивается на n_jobs равных частей, которые вычисляются параллельно.
Noneозначает 1, если только не используется контекстjoblib.parallel_backend.-1означает использование всех процессоров. Подробнее см. в глоссарии. - working_memoryfloat, по умолчанию None
-
Желаемый максимальный объем памяти для временных блоков матрицы расстояний. Если значение равно None (по умолчанию), используется значение
sklearn.get_config()['working_memory']. - **kwdsнеобязательные именованные параметры
-
Все дополнительные параметры передаются непосредственно функции расстояния. Если используется метрика
scipy.spatial.distance, параметры также зависят от метрики. Примеры использования см. в документации scipy.
- Возвращает:
-
- D_chunk{ndarray, разреженная матрица}
-
Непрерывный срез матрицы расстояний, при необходимости обработанный с помощью
reduce_func.
Примеры
Без 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. ]])Получение всех соседей и среднего расстояния в пределах радиуса 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. ])
Если для каждого образца задано свое значение r, необходимо использовать
start:>>> 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])]
Принудительная генерация по строкам путем редукции
working_memory:>>> gen = pairwise_distances_chunked(X, reduce_func=reduce_func, ... working_memory=0) >>> next(gen) [array([0, 3])] >>> next(gen) [array([0, 1])]
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/generated/sklearn.metrics.pairwise_distances_chunked.html