Sklearn PCA 自动设置 n_components
Sklearn PCA automatically set n_components
我正在尝试使用带有以下代码的 Sklearn PCA 将我的 5000-D 数据减少到 32-D
from sklearn.decomposition import PCA
import numpy as np
arr = np.random.randint(1,10,(10,5000)).astype(float)
pca = PCA(n_components=32)
newData = pca.fit_transform(arr)
print newData.shape
通过上面的代码,我得到了形状为 (10,10) 的新数据(10 维的 10 个样本)。我对 PCA 的理解是它应该产生形状为 (10,32) 的 newData 但这里不是这种情况。
将输入数据 (arr) 更改为具有 50 个样本,我得到了形状为 (50,32) 的新数据,这是我所期望的。
如果该值小于给定的 n_components(在本例中为 32),sklearn 似乎会自动将 n_components 设置为 min(num_samples,num_dimension)。
谁能告诉我这样做的目的是什么?
根本没有足够的数据来计算您要求的所有组件。
或者,换句话说:它们是任意的,并且它们的关联方差等于 0,因为特征协方差矩阵的等级最多为 10(您需要等级 32 才能获得 32 个分量)。
所以 scikit-learn 不会 return 它们。
我正在尝试使用带有以下代码的 Sklearn PCA 将我的 5000-D 数据减少到 32-D
from sklearn.decomposition import PCA
import numpy as np
arr = np.random.randint(1,10,(10,5000)).astype(float)
pca = PCA(n_components=32)
newData = pca.fit_transform(arr)
print newData.shape
通过上面的代码,我得到了形状为 (10,10) 的新数据(10 维的 10 个样本)。我对 PCA 的理解是它应该产生形状为 (10,32) 的 newData 但这里不是这种情况。 将输入数据 (arr) 更改为具有 50 个样本,我得到了形状为 (50,32) 的新数据,这是我所期望的。 如果该值小于给定的 n_components(在本例中为 32),sklearn 似乎会自动将 n_components 设置为 min(num_samples,num_dimension)。
谁能告诉我这样做的目的是什么?
根本没有足够的数据来计算您要求的所有组件。
或者,换句话说:它们是任意的,并且它们的关联方差等于 0,因为特征协方差矩阵的等级最多为 10(您需要等级 32 才能获得 32 个分量)。
所以 scikit-learn 不会 return 它们。