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