Picking up from where we left...
所以我可以使用linalg.eig或linalg.svd来计算主成分分析。每一个都返回不同的主成分/特征向量和特征值,当它们被输入相同的数据时(我目前正在使用iris数据集)。
查看here或任何其他将pca应用于iris数据集的教程,我会发现特征值是[2.9108 0.9212 0.1474 0.0206]eig方法给了我一组不同的特征值/向量,我不介意,除了这些特征值,一旦求和,等于维数(4),可以用来找出每个分量对总方差的贡献。
linalg.eig返回的特征值,我不能这么做。例如,返回的值是[9206.53059607 314.10307292 12.03601935 3.53031167]在这种情况下,方差的比例将是[0.96542969 0.03293797 0.00126214 0.0003702]This other page说(“由一个分量解释的变化的比例只是它的特征值除以特征值之和。”)
因为每个维度解释的方差应该是恒定的(我认为),所以这些比例是错误的。所以,如果我使用svd()返回的值,这是所有教程中使用的值,我可以从每个维度获得正确的变化百分比,但我想知道为什么eig返回的值不能像这样使用。
我假设返回的结果仍然是投影变量的有效方法,那么是否有方法对它们进行转换,以便得到每个变量解释的正确方差比例换言之,我是否可以使用eig方法并且仍然拥有每个变量的方差比例?另外,这个映射可以只在特征值上做吗,这样我就可以同时得到实特征值和规范化特征值?
对不起,顺便说一句,这是一个已经走了这么远的问题假设你不只是读了这句话。

最佳答案

Doug's answer to your previous question并实现以下两个功能,得到如下输出:

def pca_eig(orig_data):
    data = array(orig_data)
    data = (data - data.mean(axis=0)) / data.std(axis=0)
    C = corrcoef(data, rowvar=0)
    w, v = linalg.eig(C)
    print "Using numpy.linalg.eig"
    print w
    print v

def pca_svd(orig_data):
    data = array(orig_data)
    data = (data - data.mean(axis=0)) / data.std(axis=0)
    C = corrcoef(data, rowvar=0)
    u, s, v = linalg.svd(C)
    print "Using numpy.linalg.svd"
    print u
    print s
    print v

输出:
Using numpy.linalg.eig
[ 2.91081808  0.92122093  0.14735328  0.02060771]
[[ 0.52237162 -0.37231836 -0.72101681  0.26199559]
 [-0.26335492 -0.92555649  0.24203288 -0.12413481]
 [ 0.58125401 -0.02109478  0.14089226 -0.80115427]
 [ 0.56561105 -0.06541577  0.6338014   0.52354627]]

Using numpy.linalg.svd
[[-0.52237162 -0.37231836  0.72101681  0.26199559]
 [ 0.26335492 -0.92555649 -0.24203288 -0.12413481]
 [-0.58125401 -0.02109478 -0.14089226 -0.80115427]
 [-0.56561105 -0.06541577 -0.6338014   0.52354627]]
[ 2.91081808  0.92122093  0.14735328  0.02060771]
[[-0.52237162  0.26335492 -0.58125401 -0.56561105]
 [-0.37231836 -0.92555649 -0.02109478 -0.06541577]
 [ 0.72101681 -0.24203288 -0.14089226 -0.6338014 ]
 [ 0.26199559 -0.12413481 -0.80115427  0.52354627]]

在这两种情况下,我都得到了期望的特征值。

关于python - Numpy.eig和PCA中的方差百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4823223/

10-09 01:48