执行 PCA 之前和之后的数据维度



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

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

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

我对测试数据做同样的事情。

我用PCA预处理这些数据,以便执行降维(和特征提取?

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的尺寸是多少?

分量的数量如何影响输出的维数?它们是一回事吗?

TL;DR:是的,所需PCA分量的数量是输出数据的维度(转换后)。

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

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

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

对于 3D 情况,如果要获得由前 2 个特征向量形成的基础,那么同样,3D 点云将首先旋转,因此最大方差将平行于坐标轴。然后,方差最小的轴将被丢弃,留下 2D 数据。

相关内容

  • 没有找到相关文章

最新更新