sklearn / opencv库中的PCA转换/项目功能是否保留原始数据集的顺序?

时间:2019-01-11 22:27:52

标签: opencv scikit-learn pca

我想知道来自sklearn.decomposition.PCAtransform()还是来自C++ opencvproject()从原始数据重新排列结果。

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 :(得分:1)

简而言之,是的,样本的顺序与投影/变换的顺序相同。另一方面,特征值在sklearnOpenCv以及几乎所有PCA实现中总是按降序排序,因为这就是PCA的要旨:保留最大的特征值。