我嘗試在Python中實(shí)現(xiàn)PCA。我的目標(biāo)是創(chuàng)建一個(gè)行為類(lèi)似于Matlab的PCA實(shí)現(xiàn)的版本。但是,我認(rèn)為我錯(cuò)過(guò)了一個(gè)關(guān)鍵點(diǎn),因?yàn)槲业臏y(cè)試部分產(chǎn)生了帶有錯(cuò)誤符號(hào)(+/-)的結(jié)果。您能找到算法錯(cuò)誤嗎?為什么有時(shí)標(biāo)志不同?基于特征向量的PCA的實(shí)現(xiàn):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我的測(cè)試值: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貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
特征向量的符號(hào)和其他歸一化選擇是任意的。Matlab和numpy以相同的方式對(duì)特征向量進(jìn)行規(guī)范,但是符號(hào)是任意的,并且可能取決于所使用的線(xiàn)性代數(shù)庫(kù)的細(xì)節(jié)。
當(dāng)我編寫(xiě)matlab的princomp的numpy等價(jià)物時(shí),我在將本征向量與matlab的本征向量進(jìn)行比較時(shí)就將其歸一化了。
添加回答
舉報(bào)
0/150
提交
取消