PCA().fit() 使用错误的轴进行数据输入
PCA().fit() is using the wrong axis for data input
我正在使用 sklearn.decomposition.PCA
为机器学习模型预处理一些训练数据。有 4095 个维度的 247 个数据点,使用 pandas
从 csv
文件导入。然后我缩放数据
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 个维度。
这可能是个愚蠢的问题,但我对这种数据处理还很陌生。谢谢。
你说:
" 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)
?
这与covariance/correlation矩阵的秩有关。具有形状为 [247,4095]
的数据矩阵 X
,covariance/correlation 矩阵将是 [4095,4095]
,最大秩 = min(n_samples,n_features)。因此,您最多有 min(n_samples, n_features) 有意义的 PC components/dimensions.
我正在使用 sklearn.decomposition.PCA
为机器学习模型预处理一些训练数据。有 4095 个维度的 247 个数据点,使用 pandas
从 csv
文件导入。然后我缩放数据
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 个维度。
这可能是个愚蠢的问题,但我对这种数据处理还很陌生。谢谢。
你说:
" 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)
.
另一方面,您定义:
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)
?
这与covariance/correlation矩阵的秩有关。具有形状为 [247,4095]
的数据矩阵 X
,covariance/correlation 矩阵将是 [4095,4095]
,最大秩 = min(n_samples,n_features)。因此,您最多有 min(n_samples, n_features) 有意义的 PC components/dimensions.