sklearn 的 PCA 实现是否保留输入顺序?
Does sklearn's implementation of PCA preserve order of input?
假设这就是我使用 sklearns 进行 PCA 的方式 sklearn.decomposition.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]
吗?
您获得的 X
,即 U[:, :n_components]*S[:n_components]
,在您的代码中是第一个 n_components
上的 PCA 加载。要理解为什么 X[i]
应该对应 arr[i]
,让我们看看 loadings 是什么意思。
加载
将特征向量想象成新维度阶数的基向量 n_components
。载荷有助于定义每个数据点在这个新维度上的位置 space。换句话说,原始数据点从完整特征 space 投影到降维 space。这些是线性组合 (np.dot(X, n_components)
) 中的系数,通过(标准化的)组件预测原始的全套特征。
所以你可以假设X[i]
对应于arr[i]
。
假设这就是我使用 sklearns 进行 PCA 的方式 sklearn.decomposition.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]
吗?
您获得的 X
,即 U[:, :n_components]*S[:n_components]
,在您的代码中是第一个 n_components
上的 PCA 加载。要理解为什么 X[i]
应该对应 arr[i]
,让我们看看 loadings 是什么意思。
加载
将特征向量想象成新维度阶数的基向量 n_components
。载荷有助于定义每个数据点在这个新维度上的位置 space。换句话说,原始数据点从完整特征 space 投影到降维 space。这些是线性组合 (np.dot(X, n_components)
) 中的系数,通过(标准化的)组件预测原始的全套特征。
所以你可以假设X[i]
对应于arr[i]
。