关于python:执行PCA之前和之后的数据维度

Dimension of data before and after performing PCA

我正在尝试使用Python和scikit-learn进行kaggle.com的数字识别器竞赛。

从训练数据中删除标签后,我将CSV中的每一行添加到这样的列表中:

1
2
for row in csv:
    train_data.append(np.array(np.int64(row)))

我对测试数据也是如此。

我用PCA预处理了这些数据,以进行尺寸缩减(以及特征提取?):

1
2
3
4
5
6
7
8
9
10
def preprocess(train_data, test_data, pca_components=100):
    # convert to matrix
    train_data = np.mat(train_data)

    # reduce both train and test data
    pca = decomposition.PCA(n_components=pca_components).fit(train_data)
    X_train = pca.transform(train_data)
    X_test = pca.transform(test_data)

    return (X_train, X_test)

然后,我创建一个kNN分类器并将其与X_train数据拟合,并使用X_test数据进行预测。

使用这种方法,我可以获得大约97%的精度。

我的问题是关于执行PCA之前和之后的数据维数

train_dataX_train的尺寸是多少?

组件的数量如何影响输出的尺寸? 它们是一样的吗?


PCA算法找到数据协方差矩阵的特征向量。什么是特征向量?没有人知道,也没有人在乎(开玩笑!)。重要的是,第一个特征向量是平行于数据最大方差方向的向量(直觉上是:扩展)。第二个代表最大散布方面的第二好方向,依此类推。另一个重要的事实是这些向量彼此正交,因此它们构成了基础。

pca_components参数告诉算法您对多少个最佳基向量感兴趣。因此,如果传递100,则意味着您要获取描述(统计学家会说:说明)大多数方差的100基向量。您的数据。

transform函数将数据从原始基础转换(srsly ?;)到由所选PCA组件(在本示例中为第一个最佳100向量)形成的基础。您可以将其可视化为旋转的点云并忽略其某些尺寸。正如Jaime在评论中正确指出的那样,这等同于将数据投影到新的基础上。

对于3D情况,如果要获得由第一个2特征向量形成的基础,则3D点云将再次旋转,因此最大方差将平行于坐标轴。然后,方差最小的轴将被丢弃,剩下2D数据。

因此,直接回答您的问题:是的,所需PCA组件的数量是输出数据的维数(转换后)。