PCA начинается с центрирования данных: вычитая среднее из всех наблюдений.В этом случае центрирование выполняется с помощью
centered_data = data3d - data3d.mean(axis=0)
Усреднение по оси = 0 (строки) означает, что останется только одна строка с тремя компонентами среднего значения.После центрирования умножьте данные на компоненты PCA;но вместо того, чтобы выписывать умножение матриц вручную, я бы использовал .dot
:
my_transformed2d = pca.components_.dot(centered_data[sample_index])
Наконец, проверка.Не используйте ==
между числами с плавающей точкой;точное равенство редко.Крошечные несоответствия появляются из-за другого порядка операций где-то: например,
0.1 + 0.2 - 0.3 == 0.1 - 0.3 + 0.2
является False.Вот почему у нас есть np.allclose
, который говорит, что «они достаточно близки».
if np.allclose(my_transformed2d, pca_transformed2d[sample_index]):
print("My transformation is correct!")
else:
print("My transformation is not correct...")