PCA()。fit()使用错误的数据输入轴

问题描述 投票:0回答:1

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

training_data = StandardScaler().fit_transform(training[:,1:4096])

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

pca = PCA(n_components)

pca.fit(training_data)

输出是一个长度为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_data的转置,但这并没有改变输出。我也尝试过在n_components函数的参数中更改PCA,但坚持认为只能有247个维度。

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

python scikit-learn pca
1个回答
1
投票

您说:

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

没有仅当您要使用pca = PCA(n_components=4095)估算4095个组件时,这才是正确的。


另一方面,您定义:

pca = PCA() # this is actually PCA(n_components=None)

所以n_components被设置为None


发生这种情况时(请参阅documentation here):

n_components == min(n_samples, n_features)

因此,在您的情况下,您具有min(247, 4095) = 247组件。

因此,pca.explained_variance_.将是形状为247的向量,因为您有247个PC尺寸。


我们为什么有n_components == min(n_samples, n_features)

这与协方差/相关矩阵的等级有关。具有形状为X的数据矩阵[247,4095],协方差/相关矩阵将为[4095,4095],最大秩= min(n_samples,n_features)。因此,您最多只有min(n_samples,n_features)个有意义的PC组件/尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.