scipy.spatial.

procrustes#

scipy.spatial.procrustes(data1, data2)[источник]#

Анализ Прокруста, тест на подобие двух наборов данных.

Каждая входная матрица представляет собой набор точек или векторов (строки матрицы). Размерность пространства — это количество столбцов каждой матрицы. Для двух матриц одинакового размера прокруст стандартизирует обе так, чтобы:

  • \(tr(AA^{T}) = 1\).

  • Оба набора точек центрированы относительно начала координат.

Процесс ([1], [2]) затем применяет оптимальное преобразование ко второй матрице (включая масштабирование/дилатацию, вращения и отражения) для минимизации \(M^{2}=\sum(data1-data2)^{2}\), или сумма квадратов поточечных разностей между двумя входными наборами данных.

Эта функция не предназначена для работы с наборами данных с разным количеством точек данных (строк). Если два набора данных имеют разную размерность (разное количество столбцов), просто добавьте столбцы нулей к меньшему из двух.

Параметры:
data1array_like

Матрица, n строк представляют точки в k (столбцы) пространстве data1 это эталонные данные, после их стандартизации, данные из data2 будет преобразован для соответствия шаблону в data1 (должно иметь >1 уникальных точек).

data2array_like

n строк данных в k-пространстве для подгонки к data1. Должен быть той же формы (numrows, numcols) как data1 (должно иметь >1 уникальных точек).

Возвращает:
mtx1array_like

Стандартизированная версия data1.

mtx2array_like

Ориентация data2 который лучше всего соответствует data1. Центрировано, но не обязательно \(tr(AA^{T}) = 1\).

диспаритетfloat

\(M^{2}\) как определено выше.

Вызывает:
ValueError

Если входные массивы не двумерные. Если форма входных массивов различна. Если входные массивы имеют нулевые столбцы или строки.

Смотрите также

scipy.linalg.orthogonal_procrustes
scipy.spatial.distance.directed_hausdorff

Ещё один тест на схожесть для двух наборов данных

Примечания

  • Расхождение не должно зависеть от порядка входных матриц, но выходные матрицы будут зависеть, так как гарантируется, что только первая выходная матрица масштабирована так, что \(tr(AA^{T}) = 1\).

  • Дублирующие точки данных обычно допустимы, дублирование точки данных увеличит ее влияние на подгонку Прокруста.

  • Несоответствие масштабируется пропорционально количеству точек на входную матрицу.

Ссылки

[1]

Krzanowski, W. J. (2000). “Principles of Multivariate analysis”.

[2]

Gower, J. C. (1975). “Generalized procrustes analysis”.

Примеры

>>> import numpy as np
>>> from scipy.spatial import procrustes

Матрица b является повёрнутой, сдвинутой, масштабированной и зеркальной версией a здесь:

>>> a = np.array([[1, 3], [1, 2], [1, 1], [2, 1]], 'd')
>>> b = np.array([[4, -2], [4, -4], [4, -6], [2, -6]], 'd')
>>> mtx1, mtx2, disparity = procrustes(a, b)
>>> round(disparity)
0