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_procrustesscipy.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