我已将PCA相关的matlab代码转换为python代码,我怎么能纠正python的最后一行代码?

问题描述 投票:0回答:1

我在python中制作了与PCA相关的代码,它从Matlab代码转换为python代码,但最后一行代码不起作用。

我怎么能纠正它?

MatLAB代码:

    [coeff,score,~,~,explained] = pca(train);            
    sm = 0;
    no_components = 0;
    for k = 1:size(explained,1)
        sm = sm+explained(k);
        if sm <= 99.4029
           no_components= no_components+1;
        end
    end
    m = mean(train,1);
    mat1 = score(:,1:no_components);

Python代码:

参考:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA.score

    import numpy as np
    import cv2
    import os
    from sklearn.decomposition import PCA
    [x,y] = trainData.shape

    pca = PCA(n_components=(x-1))
    varPca = pca.fit(trainData)

    explainedVariance = pca.explained_variance_ratio_*100

    sm = 0
    no_components = 0
    for k in range(0, x-1):
        sm = sm+explainedVariance[k]
        if sm <= 99.4029:
            no_components= no_components+1
    print(no_components)

    m = trainData.mean()
    print(m)
    mat1 = score(trainData[:,0:no_components])

这里得分功能表现不佳。

我怎么能纠正它?

python matlab pycharm
1个回答
0
投票

score是类PCA()的方法。因此,它只能在PCA()对象上调用。

在你的情况下,pca是类PCA()的对象。因此你可以打电话给pca.score()

然而,调用score()本身假设这是一个函数score()在某处定义,但事实并非如此。这就是为什么你得到一个NameError

© www.soinside.com 2019 - 2024. All rights reserved.