【问题标题】:PCA plot with large dataframe具有大数据框的 PCA 图
【发布时间】:2021-06-21 14:15:42
【问题描述】:

我有一个包含以下列的大型数据框(约 1400 行):

    protein   IHD          CM         ARR         VD        CHD           CCD         VOO      
0   q9uku9  0.000000    0.039457    0.032901    0.014793    0.006614    0.006591    0.000000    
1   o75461  0.000000    0.005832    0.027698    0.000000    0.000000    0.006634    0.000000

等等

我想使用向量执行 PCA 分析和绘图,但我不确定如何处理如此庞大的数据集。有人有什么建议吗?

【问题讨论】:

    标签: pandas pca


    【解决方案1】:
    实际上,1400 x 8 dataframe在现代计算机上不是那么大。您可以使用scikit-learn在数据集上执行PCA。它相对简单:
    import pandas as pd
    import numpy as np
    from sklearn.decomposition import PCA
    cols = ['IHD', 'CM', 'ARR', 'VD', 'CHD', 'CCD', 'VOO']
    df = pd.DataFrame(np.random.random((1400, 7)), columns = cols)
    pca = PCA(n_components=2)
    pca.fit(df)
    print(pca.components_)
    print(pca.explained_variance_)
    
    # [[-0.38406974  0.02775874 -0.59754361 -0.55464116 -0.03878488
    #   -0.41944628 0.09795539]
    #  [-0.03181143 -0.52699813  0.14325425  0.02742668 -0.48571934 
    #   -0.33915335 0.590795  ]]
    # [0.0913989  0.08975106]
    

    您无法绘制主要组件,因为它们居住在7维空间中。只要您保留不到三个的组件数量,您可以做些什么,是绘制生成的数据集:

    df2 = pd.DataFrame(pca.transform(df), columns = ['first', 'second'])
    df2.plot.scatter(x = 'first', y = 'second')
    

    可以注意到,我没有考虑做PCA的柱蛋白。原因是PCA仅使用数字列正常工作。查看this discussion for一些提示来处理分类列。

    【讨论】:

    • 这是很多意义,但如何将各个类别的方差分开?就像我想要在情节中想要的8个不同的vectors? span>
    • 不确定我有问题。你想绘制主要成分吗? PCA是一种维度减少技术,这意味着它会减少数据集的维度数(即列数)。为此,它会在一些仔细选择的向量上投射数据,这些向量被称为主组件。通过识别最小化数据方差的方向来导出主组件。但是,您无法绘制主成分,因为它们居住在数据的原始空间维度中。 span>
    • askpython.com/python/examples/principal-component-analysis就像在这个例子中一样,似乎有多个组件绘制了?也许我正在解释它不正确的 span>
    • 是的,在第一个绘图中,有两个主组件与数据一起绘制。然而,观察到这可以完成,因为该点生活在二维空间中。因此,主成分也生活在二维空间中。在您的数据集中,而是原始数据在8维空间中生存。所以还有主成分生活在8维空间中,这是一个不能绘制的。 span>
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多