【问题标题】:Applying PCA on a specific column of a pandas Dataframe在熊猫数据框的特定列上应用 PCA
【发布时间】:2019-04-17 08:34:54
【问题描述】:

我正在尝试减少图像数据集的特征数量,以便更快地计算余弦相似度。

我有一个 pandas 数据框,它具有以下结构 ["url"、"cluster_id"、"features"] 并且包含 81 行。

我想在每行包含一个 DenseVector(准确地说是 2048 个元素)的“特征”列上应用 sklearn PCA。

问题是当我申请时

pca = skPCA(n_components = 1024) 
pca_pd = pca.fit(list(test_pd["features"].values))

我实际上减少了行数,而不是每行的特征数。

#Output
pca.components_
array([[-0.0232138 ,  0.01177754, -0.0022028 , ...,  0.00181739,
         0.00500531,  0.00900601],
       [ 0.02912731,  0.01187949,  0.00375974, ..., -0.00153819,
         0.0025645 ,  0.0210677 ],
       [ 0.00099789,  0.02129508,  0.00229157, ..., -0.0045913 ,
         0.00239336, -0.01231318],
       [-0.00134043,  0.01609966,  0.00277412, ..., -0.00944288,
         0.00907663, -0.04781827],
       [-0.01286403,  0.00666523, -0.00318833, ...,  0.00101012,
         0.0045756 , -0.0043937 ]])

你知道如何解决这个问题吗?

【问题讨论】:

    标签: python pandas pca dimensionality-reduction


    【解决方案1】:

    我认为最好不要使用列表,而是使用数据框或 numpy 数组。如果我没记错的话,DenseVector 是 Spark 的一种数据类型。

    要转换它:densevector.toArray()

    如果您使用的是 scikit-learn PCA,您还应该进行转换,而不仅仅是适合。

    喜欢,pca.fit_transform(array)

    【讨论】:

    • 没错,我正在使用 pyspark。由于我计算每个集群上的余弦相似度不是那么大(每个集群约 200 个项目),我认为使用 sklearn PCA 而不是 pyspark PCA 更有意义。谢谢你的回答,我去试试。
    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2021-03-21
    • 2018-08-03
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多