Spec-Zone.ru › scikit-learn

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API