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 rankSVD
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·colunasExercício 1
Encontre os autovalores de A = [[2, 0], [0, 3]].
Exercício 2
Por que o PageRank usa o fator de amortecimento d?