Módulo 4 · Álgebra linear

Autovalores, PageRank e SVD

Aula 4.3 · cerca de 25 minutos

Um autovetor de A é uma direção que A apenas estica, sem girar. O fator de esticamento é o autovalor:

A v = λ v,   v ≠ 0

PageRank

Modele a web como uma cadeia de Markov: um navegador aleatório segue links. A matriz de transição M tem colunas que somam 1. O PageRank é a distribuição estacionária, o autovetor de autovalor 1:

r = M r

O método da potência encontra esse vetor: comece com qualquer distribuição e multiplique por M até estabilizar.

import numpy as np

# links[i] = páginas para onde i aponta
links = {0: [1, 2], 1: [2], 2: [0], 3: [2]}
n, d = 4, 0.85                        # d = fator de amortecimento
M = np.zeros((n, n))
for i, alvos in links.items():
    for j in alvos:
        M[j, i] = 1 / len(alvos)

r = np.ones(n) / n
for _ in range(100):
    r = (1 - d) / n + d * M @ r
print(r.round(3))                     # a página 2 recebe mais links → maior rank

SVD

A = U Σ Vᵀ     (U e V ortogonais, Σ diagonal com valores singulares σ₁ ≥ σ₂ ≥ … ≥ 0)

Toda matriz se decompõe em rotação, escala e rotação. Manter só os k maiores valores singulares dá a melhor aproximação de posto k (teorema de Eckart–Young). Daí vêm a compressão de imagens, o PCA, os sistemas de recomendação e o LoRA no ajuste fino de LLMs.

U, S, Vt = np.linalg.svd(imagem, full_matrices=False)
k = 20
aprox = U[:, :k] @ np.diag(S[:k]) @ Vt[:k]
# guarda k·(linhas + colunas + 1) números em vez de linhas·colunas

Exercício 1

Encontre os autovalores de A = [[2, 0], [0, 3]].

Exercício 2

Por que o PageRank usa o fator de amortecimento d?