为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中实现PCA(基于特征向量)

在Python中实现PCA(基于特征向量)

富国沪深 2021-03-28 11:35:19
我尝试在Python中实现PCA。我的目标是创建一个行为类似于Matlab的PCA实现的版本。但是,我认为我错过了一个关键点,因为我的测试部分产生了带有错误符号(+/-)的结果。您能找到算法错误吗?为什么有时标志不同?基于特征向量的PCA的实现:new_array_rank=4A_mean = np.mean(A, axis=0)    A = A - A_mean    covariance_matrix = np.cov(A.T)    eigen_values, eigen_vectors = np.linalg.eig(covariance_matrix)new_index = np.argsort(eigen_values)[::-1]eigen_vectors = eigen_vectors[:,new_index]eigen_values = eigen_values[new_index]eigen_vectors = eigen_vectors[:,:new_array_rank]return np.dot(eigen_vectors.T, A.T).T我的测试值:array([[ 0.13298325,  0.2896928 ,  0.53589224,  0.58164269,  0.66202221,     0.95414116,  0.03040784,  0.26290471,  0.40823539,  0.37783385],   [ 0.90521267,  0.86275498,  0.52696221,  0.15243867,  0.20894357,     0.19900414,  0.50607341,  0.53995902,  0.32014539,  0.98744942],   [ 0.87689087,  0.04307512,  0.45065793,  0.29415066,  0.04908066,     0.98635538,  0.52091338,  0.76291385,  0.97213094,  0.48815925],   [ 0.75136801,  0.85946751,  0.10508436,  0.04656418,  0.08164919,     0.88129981,  0.39666754,  0.86325704,  0.56718669,  0.76346602],   [ 0.93319721,  0.5897521 ,  0.75065047,  0.63916306,  0.78810679,     0.92909485,  0.23751963,  0.87552313,  0.37663086,  0.69010429],   [ 0.53189229,  0.68984247,  0.46164066,  0.29953259,  0.10826334,     0.47944168,  0.93935082,  0.40331874,  0.18541041,  0.35594587],   [ 0.36399075,  0.00698617,  0.61030608,  0.51136309,  0.54185601,     0.81383604,  0.50003674,  0.75414875,  0.54689801,  0.9957493 ],   [ 0.27815017,  0.65417397,  0.57207255,  0.54388744,  0.89128334,     0.3512483 ,  0.94441934,  0.05305929,  0.77389942,  0.93125228],   [ 0.80409485,  0.2749575 ,  0.22270875,  0.91869706,  0.54683128,     0.61501493,  0.7830902 ,  0.72055598,  0.09363186,  0.05103846],   [ 0.12357816,  0.29758902,  0.87807485,  0.94348706,  0.60896429,     0.33899019,  0.36310027,  0.02380186,  0.67207071,  0.28638936]])
查看完整描述

1 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

特征向量的符号和其他归一化选择是任意的。Matlab和numpy以相同的方式对特征向量进行规范,但是符号是任意的,并且可能取决于所使用的线性代数库的细节。

当我编写matlab的princomp的numpy等价物时,我在将本征向量与matlab的本征向量进行比较时就将其归一化了。


查看完整回答
反对 回复 2021-04-01
  • 1 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信