我正试图在维度为m x n的矩阵上运行PCA,其中m是特征数量,n是样本数量。
假设我想保留具有最大方差的nf
特征。有了scikit-learn
,我可以这样做:
from sklearn.decomposition import PCA
nf = 100
pca = PCA(n_components=nf)
# X is the matrix transposed (n samples on the rows, m features on the columns)
pca.fit(X)
X_new = pca.transform(X)
现在,我得到了一个新的矩阵X_new
,它的形状是nxnf。有可能知道哪些特征被丢弃了还是保留了吗?
感谢
PCA
对象在拟合过程中确定的特征在pca.components_
中。与CCD_ 6所跨越的向量空间正交的向量空间被丢弃。
请注意,PCA不会"放弃"或"保留"您的任何预定义功能(由您指定的列编码)。它混合所有这些(通过加权和)以找到最大方差的正交方向。
如果这不是你想要的行为,那么PCA降维就不是一条路。对于一些简单的通用特性选择方法,您可以查看sklearn.feature_selection
投影到主分量上的特征将保留重要信息(方差最大的轴),并丢弃方差较小的轴。此行为类似于compression
(不丢弃)。
X_proj
是X_new
的更好的名称,因为它是X
在principal components
上的投影
您可以将X_rec
重建为
X_rec = pca.inverse_transform(X_proj) # X_proj is originally X_new
这里,X_rec
接近X
,但是less important
信息被PCA丢弃。所以我们可以说X_rec
是去噪的。
在我看来,我可以说the noise
是废弃的。
上面标记的答案不正确。sklearn站点明确表示components_数组已排序。因此它不能用于识别重要特征。
components_:数组,[n_components,n_features]特征空间中的主轴,表示数据中最大方差的方向。组件按explained_variance_进行排序。
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html