【问题标题】:PCA: resultant matrix n-1 rowsPCA:结果矩阵 n-1 行
【发布时间】:2017-10-01 23:46:58
【问题描述】:

我在 Python 中使用 PCA 来减少我拥有的数据的维度。当前数据有768行10列。

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

import numpy as np
from sklearn import decomposition

demo_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。

为什么数据中缺少一行?

【问题讨论】:

    标签: python machine-learning scikit-learn pca


    【解决方案1】:

    是的,您的理解是正确的。但是在将 demo_df 传递给 PCA 之前检查它的形状。它的长度必须为 767。PCA 不会从您的数据中删除任何样本。

    区别在于read_csv()的使用。请查看documentation of pandas.read_csv()。它有一个参数header,其描述如下:

    header : int 或 int 列表,默认为'infer'

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

    如果没有通过使用另一个参数 names 显式提供这些标题,则默认情况下使用 文件的第一行作为列标题。

    因此,如果您不想将文件的第一行用作列标题,则应在 read_csv() 中传递 header = None,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      相关资源
      最近更新 更多