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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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