как вычислить собственное значение и собственный вектор без какой-либо библиотеки - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь реализовать PCA, используя чистый код Python. У меня есть файл CSV. Я читаю все столбцы и строки из CSV и изменяю его на матричную форму, затем вычисляю и нахожу среднее значение и ковариацию матрицы, теперь я пытаюсь написать функцию для поиска собственного значения и собственного вектора моей ковариационной матрицы. .

Мой вопрос: как решить эту часть, чтобы найти собственное значение и собственный вектор? Для этого шага у меня есть функция, чтобы найти определитель матрицы, но проблема с лямбда-символом здесь его (x) --- (A-λI) = 0.

Среднее Матрица

24   24   25   26   26   

Ковариационная матрица (сумма (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...