我正在试图用Python实现PCA。 我的目标是创建行为与Matlab的PCA实现相似的版本。 但是,我觉得我错过了一个重点。 因为在我的测试部分出现了错误的符号(/- )的结果。 在
你能找出算法的错误吗? 为什么这些标记有时会不一样? 在
基于特征向量的PCA实现: new_array_rank=4
a_mean=NP.mean(a,axis=0) ) )。
A=A - A_mean
covariance_matrix=np.cov(A.T )
eigen_values,eigen _ vectors=NP.Lina LG.EIG (co variance _ matrix ) ) ) ) ) ) ) ) ) ) ) )。
new _ index=NP.arg sort (eigen _ values ) [:-1]
eigen _ vectors=eigen _ vectors [ :new_index]
eigen _ values=eigen _ values [ new _ index ]
eigen _ vectors=eigen _ vectors [ : new _ array _ rank ]
returnNP.dot(eigen_vectors.t,A.T ).t
我的测试值:
^{pr2}$
我的特征向量PCA结果: Array([5.09548931e-01,-3.97079651e-01,-1.47555867e-01,
-3.55343967e-02、-4.92125732e-01、-1.78191399e-01、
-3.29543974e-02、3.71406504e-03、1.06404170e-01、
-1.66533454e-16]、
[-5.15879041 e-01、6.40833419 e-01、-7.54601587e-02、
-2.00776798e-01、- 7.07247669 e-02、2.68582368 e-01,
-1.66124362e-01、1.03414828e-01、7.76738500e-02、
5.55111512e-17]、
[ -4.42659342e-01、-5.13297786e-01、-1.65477203e-01、
5.33670847e-01、2.00194213e-01、2.06176265e-01、
1.31558875e-01、- 2.81699724 e-02、6.19571305 e-02,
-8.32667268e-17]、
[-8.50397468 e-01,5.14319846 e-02,-1.46289906e-01,
6.51133920e-02、-2.83887201e-01、-1.90516618e-01、
1.45748370 e-01、9.49464768 e-02、-1.05989648e-01,
4.16333634e-17]、
[ -1.61040296e-01、-3.47929944e-01、-1.19871598e-01、
-6.48965493e-01、7.53188055e-02、1.31730340e-01、
1.33229858e-01、-1.43587499e-01、-2.20913989e-02、
-3.40005801e-16]、
[-1.70017435 e-01,4.22573148 e-01,4.81511942 e-01,
2.42170125e-01、-1.18575764e-01、-6.87250591e-02、
-1.20660307e-01、-2.22865482e-01、-1.73666882e-02、
-1.52655666e-16]、
[ 6.90841779e-02、-2.86233901e-01、-4.16612350e-01、
9.38935057 e-03、3.02325120 e-01、-1.61783482e-01、
- 3.55465509 e-01、1.15323059 e-02、-5.04619674e-02,
4.71844785e-16]、
[ 5.26189089 e-01、6.81324113 e-01、-2.89960115e-01、
2.01781673 e-02、3.03159463 e-01、-2.11777986e-01、
2.25937548e-01、- 5.49219872 e-05、3.66268329 e-02,
-1.11022302e-16]、
[ 6.68680313e-02、- 2.99715813 e-01、8.53428694 e-01、
- 1.30066853 e-01、2.31410283 e-01、-1.02860624e-01,
1.95449586e-02、1.30218425e-01、1.68059569e-02、
2.22044605e-16]、
[9.68303353e-01、4.80944309e-02、2.62865615e-02、
1.44821658e-01、- 1.47094421 e-01、3.07366196 e-01,
1.91849667 e-02、5.08517759 e-02、-1.03558238e-01,
1.38777878e-16]] )
使用Matlab的PCA函数对相同数据的测试结果: array ([-5.09548931 e-01,3.97079651 e-01,1.4755867 e-01,
3.55343967e-02、-4.92125732e-01、-1.78191399e-01、
-3.29543974e-02、-3.71406504e-03、-1.06404170e-01、
-0.00000000e 00],
[ 5.15879041e-01、- 6.40833419 e-01、7.54601587 e-02、
2.00776798e-01、- 7.07247669 e-02、2.68582368 e-01,
-1.66124362e-01、-1.03414828e-01、-7.76738500e-02、
-0.00000000e 00],
[4.42659342e-01、5.13297786e-01、1.65477203e-01、
-5.33670847e-01、2.00194213e-01、2.06176265e-01、
1.31558875 e-01、2.81699724 e-02、-6.19571305e-02、
-0.00000000e 00],
[ 8.50397468e-01、- 5.14319846 e-02、1.46289906 e-01、
-6.51133920e-02、-2.83887201e-01、-1.90516618e-01、
1.45748370e-01、- 9.49464768 e-02、1.05989648 e-01,
-0.00000000e 00],
[1.61040296e-01、3.47929944e-01、1.19871598e-01、
6.48965493e-01、7.53188055e-02、1.31730340e-01、
1.33229858e-01、1.43587499e-01、2.20913989e-02、
-0.00000000e 00],
[ 1.70017435e-01、-4.22573148e-01、-4.81511942e-01、
-2.42170125e-01、-1.18575764e-01、-6.87250591e-02、
-1.20660307e-01、2.22865482e-01、1.73666882e-02、
-0.00000000e 00],
[-6.90841779e-02、2.86233901e-01、4.16612350e-01、
- 9.38935057 e-03,3.02325120 e-01,-1.61783482e-01,
-3.55465509e-01、- 1.15323059 e-02、5.04619674 e-02,
-0.00000000e 00],
[ -5.26189089e-01,- 6.81324113 e-01,2.89960115 e-01,
- 2.01781673 e-02、3.03159463 e-01、-2.11777986e-01,
2.25937548 e-01、5.49219872 e-05、-3.66268329e-02,
-0.00000000e 00],
[-6.68680313 e-02,2.99715813 e-01,-8.53428694e-01,
1.30066853 e-01、2.31410283 e-01、-1.02860624e-01、
1.95449586e-02、-1.30218425e-01、-1.68059569e-02、
-0.00000000e 00],
[ -9.68303353e-01、-4.80944309e-02、-2.62865615e-02、
-1.44821658e-01,- 1.47094421 e-01,3.07366196 e-01,
1.91849667e-02、- 5.08517759 e-02、1.03558238 e-01,
-0.00000000e 00]] )