我正在尝试在尺寸为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
,其形状为n x nf。是否可以知道哪些功能已被丢弃或保留哪些功能?
由于
答案 0 :(得分:27)
PCA
对象在拟合期间确定的功能位于pca.components_
。与被pca.components_
跨越的向量空间正交的向量空间将被丢弃。
请注意,PCA不会"丢弃"或"保留"任何预定义的功能(由您指定的列编码)。它混合所有这些(通过加权和)来找到最大方差的正交方向。
如果这不是您正在寻找的行为,那么PCA维度降低不是可行的方法。对于一些简单的一般特征选择方法,您可以查看sklearn.feature_selection
答案 1 :(得分:2)
主要组件上的投影特征将保留重要信息(具有最大方差的轴)和具有小差异的下降轴。此行为类似于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
,但PCA删除了less important
信息。所以我们可以说X_rec
被去噪了。
在我看来,我可以说the noise
是丢弃的。
答案 2 :(得分:0)
上面标明的答案不正确。 sklearn站点明确指出components_ array已排序。所以它无法用于识别重要的特征。
components_:array,[n_components,n_features] 特征空间中的主轴,表示数据中最大方差的方向。组件按explain_variance _。
排序
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html