Сохраняют ли функции преобразования PCA / функции проекта из библиотек sklearn / opencv порядок исходного набора данных? - PullRequest
0 голосов
/ 12 января 2019

Мне было интересно, если transform() из sklearn.decomposition.PCA или project() из C ++ opencv переставят результаты из исходных данных.

pca.py:

import pandas as pd
from sklearn.decomposition import PCA

# read csv into dataframe
df = pd.read_csv('sample.csv')
columns=['x', 'y']

pca = PCA()
pca.fit(df)

t = pca.transform(df)
print(t)

sample.csv:

x,y
2.5,2.4
0.5,0.7
2.2,2.9
1.9,2.2
3.1,3.0
2.3,2.7
2,1.6
1,1.1
1.5,1.6
1.1,0.9

преобразованные данные:

[[-0.82797019 -0.17511531]
 [ 1.77758033  0.14285723]
 [-0.99219749  0.38437499]
 [-0.27421042  0.13041721]
 [-1.67580142 -0.20949846]
 [-0.9129491   0.17528244]
 [ 0.09910944 -0.3498247 ]
 [ 1.14457216  0.04641726]
 [ 0.43804614  0.01776463]
 [ 1.22382056 -0.16267529]]

Я хотел убедиться, что (2.5, 2.4) соответствует (-0.82797019, -0.17511531), (0.5,0.7) - (1.77758033,0.14285723) и так далее.

OpenCV PCA класса 'project() выводит то же самое. Но собственные значения, похоже, автоматически переупорядочиваются в порядке убывания из библиотеки OpenCV, поэтому мне было интересно, расположены ли эти преобразованные / спроецированные данные также соответствующим образом.

1 Ответ

0 голосов
/ 12 января 2019

Короче говоря, да, порядок выборок такой же, как и у проекций / преобразований. Собственные значения, с другой стороны, всегда сортируются в порядке убывания как sklearn, так и OpenCv и почти во всех реализациях PCA, поскольку в этом и заключается суть PCA: сохранять самые большие собственные значения.

...