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)[source]

Генерация матрицы расстояний по частям с опциональным сокращением.

В случаях, когда не вся матрица парных расстояний должна храниться сразу, это используется для расчета парных расстояний в кусках размером working_memory. Если reduce_func задано, оно выполняется для каждого куска, и его значения возвращаются в списки, массивы или разреженные матрицы.

Параметры:
X{array-like, sparse matrix} формы (n_samples_X, n_samples_X) или (n_samples_X, n_features)

Массив парных расстояний между образцами или массив признаков. Форма массива должна быть (n_samples_X, n_samples_X), если metric=’precomputed’, и (n_samples_X, n_features) в противном случае.

Y{array-like, sparse matrix} формы (n_samples_Y, n_features), по умолчанию=None

Дополнительный второй массив признаков. Допускается только если metric != “precomputed”.

reduce_funccallable, по умолчанию=None

Функция, применяемая к каждому куску матрицы расстояний, сводя его к необходимым значениям. reduce_func(D_chunk, start) вызывается многократно, где D_chunk — это непрерывный вертикальный срез матрицы парных расстояний, начинающийся с строки start. Он должен возвращать одно из: None; массив, список или разреженную матрицу длиной D_chunk.shape[0]; или кортеж таких объектов. Возвращение None полезно для операций на месте, а не для сокращений.

Если None, pairwise_distances_chunked возвращает генератор вертикальных кусков матрицы расстояний.

metricстрока или вызываемая функция, по умолчанию=’euclidean’

Метрика, используемая при расчете расстояния между экземплярами в массиве признаков. Если 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, sparse matrix}

Непрерывный срез матрицы расстояний, необязательно обработанный 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.29..., 0.41..., 0.19..., 0.57...],
       [0.29..., 0.  ..., 0.57..., 0.41..., 0.76...],
       [0.41..., 0.57..., 0.  ..., 0.44..., 0.90...],
       [0.19..., 0.41..., 0.44..., 0.  ..., 0.51...],
       [0.57..., 0.76..., 0.90..., 0.51..., 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–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/modules/generated/sklearn.metrics.pairwise_distances_chunked.html

Spec-Zone.ru

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