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

2024-04-26 23:16:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用sklearn.decomposition.PCA对机器学习模型的一些训练数据进行预处理。使用pandascsv文件导入的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,但这并没有改变输出。我也尝试过在PCA函数的参数中更改n_components,但坚持认为只能有247个维度

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


Tags: csv数据testimportdatanptrainingtransform
1条回答
网友
1楼 · 发布于 2024-04-26 23:16:59

你说:

" but it should have length 4095 so that I can work out the variance of each dimension, not the variance of each data point."

否。只有当您使用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],最大秩=最小(n个样本,n个特征)。因此,您最多有min(n_样本,n_功能)有意义的PC组件/尺寸

相关问题 更多 >