我正在使用sklearn.decomposition.PCA
对机器学习模型的一些训练数据进行预处理。使用pandas
从csv
文件导入的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个维度
这可能是一个愚蠢的问题,但我对这种数据处理非常陌生。多谢各位
你说:
否。只有当您使用
pca = PCA(n_components=4095)
估计4095个组件时,这才是正确的另一方面,您定义:
因此
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组件/尺寸相关问题 更多 >
编程相关推荐