Python Sklearn稀疏PCA:计算PC的方差时出了问题



我正在尝试使用sklearn.decomposition.sparsepca进行n*p矩阵x的主组件。

n表示样品的数量,p表示特征的数量。

然后,我遵循本文(https://www.cc.gatech.edu/~isbell/Reading/papers/sparsepc.pdf)来计算每个主要组件的调整后方差。

>

在纸张中,我使用QR分解对修改后的PC,然后按(R[j][j])^2进行调整后的方差。

但是结果(修饰PC的方差)并非单调减小。如下,第三pc的方差大于第二个PC之一:

PC的差异:

[ 1.          0.59902395  0.64761414  0.64657846  0.50450935  0.59905398 0.45242596  0.42738204]

PC的Variance_ratio:

[ 0.20506141  0.1228367   0.13280067  0.13258829  0.1034554   0.12284286
  0.09277511  0.08763956]

是因为sklearn.decomposition.sparsepca.transform whithith Order whithout whithout whithout whithout whithout whithout of PCS或我的代码有问题吗?

如果有人可以解决我的问题,我会很感激。

以下是我的代码:

    # read n*p matrix X( n = 1043, p = 20 )
    cluster_data = input_cluster_data('./data/km_results_1.csv')
    # train spca
    model = decomposition.SparsePCA( n_components=8 )
    model.fit( cluster_data )
    cluster_data_projection = model.transform( cluster_data )
    # QR decomposition of modified PCs
    cluster_data_projection_qr = np.linalg.qr( cluster_data_projection )
    q = cluster_data_projection_qr[0]
    r = cluster_data_projection_qr[1]
    # compute adjusted variance
    variance = []
    for i in range(8):
        variance.append( np.square(r[i][i]) )
    variance = np.array(variance)

    # compute variance_ratio
    sum = np.sum( variance )
    variance_ratio = variance / sum

使用np.trace(np.dot(R.T,R))np.trace(np.dot(R,R.T)),具体取决于您如何组织数据。

我相信这是由于以下事实:通过弹性净回归获得的PC(Scikit Learn中使用的方法)不是不相关的,也不是正交的,因此可能没有与PC相同的属性来自PCA

相关内容

  • 没有找到相关文章

最新更新