Python 使用np.linalg.svd()查找特征向量和特征值?
我试图找到PCA协方差矩阵的特征向量和特征值 我的代码:Python 使用np.linalg.svd()查找特征向量和特征值?,python,python-3.x,numpy,Python,Python 3.x,Numpy,我试图找到PCA协方差矩阵的特征向量和特征值 我的代码: values, vectors = np.linalg.eigh(covariance_matrix) 这是输出: Eigen Vectors: [[ 0.26199559 0.72101681 -0.37231836 0.52237162] [-0.12413481 -0.24203288 -0.92555649 -0.26335492] [-0.80115427 -0.14089226 -0.02109478 0.581
values, vectors = np.linalg.eigh(covariance_matrix)
这是输出:
Eigen Vectors:
[[ 0.26199559 0.72101681 -0.37231836 0.52237162]
[-0.12413481 -0.24203288 -0.92555649 -0.26335492]
[-0.80115427 -0.14089226 -0.02109478 0.58125401]
[ 0.52354627 -0.6338014 -0.06541577 0.56561105]]
Eigen Values:
[0.02074601 0.14834223 0.92740362 2.93035378]
然后我发现np.linalg.svd()
也返回相同的值
U, S, V = np.linalg.svd(standardized_x.T)
print(U)
print(S)
print(V)
[[-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]]
[20.89551896 11.75513248 4.7013819 1.75816839]
[[ 1.08374515e-01 9.98503796e-02 1.13323362e-01 ... -7.27833114e-02
-6.58701606e-02 -4.59092965e-02]
[-4.30198387e-02 5.57547718e-02 2.70926177e-02 ... -2.26960075e-02
-8.64611208e-02 1.89567788e-03]
[ 2.59377669e-02 4.83370288e-02 -1.09498919e-02 ... -3.81328738e-02
-1.98113038e-01 -1.12476331e-01]
...
[ 5.42576376e-02 5.32189412e-03 2.76010922e-02 ... 9.89545817e-01
-1.40226565e-02 -7.86338250e-04]
[ 1.60581494e-03 8.56651825e-02 1.78415121e-01 ... -1.24233079e-02
9.52228601e-01 -2.19591161e-02]
[ 2.27770498e-03 6.44405862e-03 1.49430370e-01 ... -6.58105858e-04
-2.32385318e-02 9.77215825e-01]]
结果U(本征向量)
对于np.linalg.eigh()
和svd()
都是相同的,但是S(方差/本征值)
值不相同
我错过什么了吗?
有谁能解释一下,在np.linalg.svd()函数中,U、S和V代表什么??特征向量并不完全相同;
eigh
的最后一个结果是svd
@user8408080的第一个结果的负数,谢谢。我没有完全注意到。有什么原因吗?我对这些功能不是很熟悉;它可能只是一个实现细节;两种解决方案都是正确的