首页 > 解决方案 > 如何在没有任何库的情况下计算特征值和特征向量

问题描述

我正在尝试使用纯 Python 代码实现 PCA。我有一个 CSV 文件我从 CSV 读取所有列和行并将其更改为矩阵形式然后我计算并找到矩阵的均值和协方差,现在我正在尝试编写一个函数来查找我的协方差矩阵的特征值和特征向量.

我的问题是如何解决这部分来找到特征值和特征向量?对于这一步,我有一个函数来查找矩阵的行列式,但问题是这里的 lambda 符号 (x) --- (A-λI)=0。

矩阵的平均值

24   24   25   26   26   

协方差矩阵 (sum(x-Xb) * (y - Yb))/n-1

175  151  162  173  172

151  185  177  177  177 

162  177  222  195  192 

173  177  195  234  200 

172  177  192  200  238 

身份矩阵

x    0    0    0    0   
0    x    0    0    0   
0    0    x    0    0   
0    0    0    x    0   
0    0    0    0    x   

175-x       151     162     173     172    
151       185-x   177     177     177    
162         177     222-x   195     192    
173         177     195     234-x   200

这是我的行列式代码,现在如何更改下面的代码来计算上面的(A-λI)矩阵?

def getCofactor(mat,temp, p,q,n):

    i = 0
    j = 0
    for row in range(n):
        for col in range(n):
            if (row != p and col != q):
                temp[i][j] = mat[row][col]
                j+=1
                if (j == n - 1):
                    j = 0
                    i+=1
    return temp


def determinantOfMatrix(mat,n):

    D = 0 # Initialize result 
    if (n == 1):
        return mat[0][0]
    temp = [[[] for x in range(n)] for y in range(n)]
    sign = 1; 
    for f in range(n):
        getCofactor(mat, temp, 0, f, n) 
        D += sign * mat[0][f] * determinantOfMatrix(temp, n - 1); 
        sign = -sign; 
    return D

标签: pythondata-sciencepcaeigenvalueeigenvector

解决方案


推荐阅读