PCA: 结果矩阵的行数为n-1

我在Python中使用PCA来降低数据的维度。当前数据有768行和10列。

我使用以下代码来实现PCA:

import numpy as npfrom sklearn import decompositiondemo_df = pd.read_csv('data.csv')pca = decomposition.PCA(n_components=4)comps = pca.fit(demo_df).transform(demo_df)np.savetxt('data_reduced.csv', comps, delimiter=',')

根据我的理解,结果文件应该包含768行和4列(因为n_components=4)。

但结果数据的行数是n-1,即767行。

为什么数据中少了一行?


回答:

是的,你的理解是正确的。但在将demo_df传递给PCA之前,请检查一下它的形状。它应该是767的长度。PCA不会从你的数据中删除任何样本。

差异来源于read_csv()的使用。请查看pandas.read_csv()的文档。它有一个参数header,其描述如下:

header : int或int列表,默认值为’infer’

用作列名的行号,以及数据的开始位置。如果未传递名称,默认行为如同设置为0,否则为None。显式传递header=0可以替换现有名称。header可以是一个整数列表,用于指定列上的多索引的行位置,例如[0,1,3]。未指定的中间行将被跳过(例如,在此示例中2被跳过)。请注意,如果skip_blank_lines=True,此参数将忽略注释行和空行,因此header=0表示数据的第一行而不是文件的第一行。

它默认使用文件的第一行作为列标题,如果未通过另一个参数names明确提供这些标题的话。

所以,如果你不想使用文件的第一行作为列标题,你应该在read_csv()中传递header = None,如下所示:

demo_df = pd.read_csv('data.csv', header = None)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注