gpt4 book ai didi

python - Numpy.eig 和 PCA 中的方差百分比

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:24 25 4
gpt4 key购买 nike

Picking up from where we left...

所以我可以使用 linalg.eig 或 linalg.svd 来计算 PCA。当它们被输入相同的数据时,每个返回不同的主成分/特征向量和特征值(我目前正在使用 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() 返回的值,这是所有教程中使用的值,我可以从每个维度获得正确的变化百分比,但我想知道为什么返回值by 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com