Scikit-learn中PCA实现是否保留输入样本顺序?
Understanding PCA Sample Correspondence in scikit-learn
Question
我用sklearn.decomposition.PCA实现了PCA降维,代码如下:
def doPCA(arr): scaler = StandardScaler() scaler.fit(arr) arr = scaler.transform(arr) pca = PCA(n_components=2) X = pca.fit_transform(arr) return X
我知道输出数组的长度和输入数组一样,但每个样本的维度降到了2。我想确认一下,原数组arr里的样本经过PCA处理后,是不是可以认为X[i]和arr[i]是一一对应的?
Answer
绝对没问题!你完全可以放心认定X[i]就是原数组中arr[i]这个样本经过标准化+PCA降维后的对应结果。
原因很直观:scikit-learn里的所有transform类方法(包括StandardScaler.transform和PCA.fit_transform)都是严格按照输入样本的顺序依次处理的,全程不会打乱样本的排列顺序。
具体到你的代码流程:
- 第一步,
scaler.transform(arr)会逐个处理arr里的样本,标准化后的数组里第i个元素,依然对应原arr[i]; - 第二步,
pca.fit_transform接收标准化后的数组,同样按顺序对每个样本执行降维计算,最终得到的X[i]自然就和原arr[i]一一对应。
举个小例子验证:假设你的arr第一个样本是[1, 2, 3],经过标准化后变成[a, b, c],再经过PCA降维得到[x, y],那X[0]就等于[x, y],完全对应原arr[0]。
所以整个处理流程中,样本的索引对应关系是完全保留的,不用怕顺序被搞混~
内容的提问来源于stack exchange,提问作者zython
相关产品推荐
相关产品推荐

