Вы сказали:
«но он должен иметь длину 4095, чтобы я мог вычислить дисперсию каждого измерения, а не дисперсию каждой точки данных».
Нет. Это верно только в том случае, если вы оцениваете 4095 компонентов с помощью pca = PCA(n_components=4095)
.
С другой стороны, вы определяете:
pca = PCA() # this is actually PCA(n_components=None)
, поэтому n_components
устанавливается на None
.
Когда это происходит, мы имеем (см. Документацию здесь ):
n_components == min(n_samples, n_features)
Таким образом, в вашем случае у вас есть min(247, 4095) = 247
компонентов.
Итак, pca.explained_variance_.
будет вектором с формой 247, поскольку у вас есть размеры 247 P C.
Почему у нас n_components == min(n_samples, n_features)
?
Это связано с рангом ковариационной / корреляционной матрицы. Имея матрицу данных X
с формой [247,4095]
, ковариационная / корреляционная матрица будет [4095,4095]
с максимальным рангом = min (n_samples, n_features). Таким образом, у вас есть не более min (n_samples, n_features) значимых P C компонентов / размеров.