Python PCA().fit()使用错误的轴进行数据输入

Python PCA().fit()使用错误的轴进行数据输入,python,scikit-learn,pca,decomposition,Python,Scikit Learn,Pca,Decomposition,我正在使用sklearn.decomposition.PCA对机器学习模型的一些训练数据进行预处理。使用pandas从csv文件导入247个数据点,尺寸为4095。然后我缩放数据 training\u data=StandardScaler().fit\u变换(training[:,1:4096]) 调用PCA算法以获取每个维度的方差之前 pca=pca(n\u组件) pca.fit(训练数据) 输出是一个长度为247的向量,但它的长度应该是4095,这样我就可以计算出每个维度的方差,而不是每个

我正在使用
sklearn.decomposition.PCA
对机器学习模型的一些训练数据进行预处理。使用
pandas
csv
文件导入247个数据点,尺寸为4095。然后我缩放数据

training\u data=StandardScaler().fit\u变换(training[:,1:4096])

调用
PCA
算法以获取每个维度的方差之前

pca=pca(n\u组件)

pca.fit(训练数据)

输出是一个长度为247的向量,但它的长度应该是4095,这样我就可以计算出每个维度的方差,而不是每个数据点的方差

我的代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

test = np.array(pd.read_csv("testing.csv", sep=','))
training = np.array(pd.read_csv("training.csv", sep=','))
# ID Number = [0]
# features = [1:4096]

training_data = StandardScaler().fit_transform(training[:,1:4096])
test_data = StandardScaler().fit_transform(test[:,1:4096])
training_labels = training[:,4609]

pca = PCA()
pca.fit(training_data)
pca_variance = pca.explained_variance_.
我曾尝试将
training\u data
转置,但这并没有改变输出。我也尝试过在
PCA
函数的参数中更改
n_组件
,但坚持只能有247个维度

这可能是一个愚蠢的问题,但我对这种数据处理非常陌生。谢谢。

你说:

“但它的长度应该是4095,这样我就可以计算出 每个维度,而不是每个数据点的方差。”

不可以。只有当您使用
pca=pca(n_components=4095)
估计4095个组件时,这才是正确的


另一方面,您定义:

pca = PCA() # this is actually PCA(n_components=None)
因此
n_components
被设置为
None


发生这种情况时,我们有(请参阅):

n\u组件==min(n\u样本,n\u特征)

因此,在您的例子中,您有
min(2474095)=247个组件

因此,
pca.explained\u variance.
将是一个形状为247的向量,因为您有247个PC维度


为什么我们有
n\u组件==min(n\u样本,n\u功能)


这与协方差/相关矩阵的秩有关。如果数据矩阵
X
具有形状
[2474095]
,协方差/相关矩阵将是
[40954095]
,最大秩=最小(n个样本,n个特征)。因此,您最多有min(n个样本,n个功能)有意义的PC组件/尺寸。

您的数据有问题。
打印什么(training_data.shape)
返回?@seralouk返回
(2474095)
。请看我的答案,我想我明白了。非常感谢。