Przyjmijmy przybliżenie Nyström w taki sposób, aby wyjaśnić odpowiedzi na pytania.
Kluczowym założeniem w Nyström jest to, że funkcja jądra ma rangę . (Naprawdę zakładamy, że ma w przybliżeniu rangę , ale dla uproszczenia udajmy, że na razie ma dokładnie rangę .) Oznacza to, że każda macierz jądra będzie miała najwyżej , a w szczególności
jest rangammmm
K=⎡⎣⎢⎢k(x1,x1)⋮k(xn,x1)…⋱…k(x1,xn)⋮k(xn,xn)⎤⎦⎥⎥,
m . Dlatego są
m niezerowe wartości własne i możemy napisać składową eigend
K tak jak
K=UΛUT
z wektorami własnymi przechowywanymi w
U, o kształcie
n×moraz wartości własne ułożone w
Λ, an
m×m macierz diagonalna.
Wybierzmy m elementy, zwykle jednolicie losowe, ale możliwe, że według innych schematów - w tej uproszczonej wersji liczy się tylko to K11mieć pełną rangę. Kiedy to zrobimy, po prostu ponownie oznakuj punkty, aby otrzymać blok jądra w blokach:
K=[K11K21KT21K22],
gdzie oceniamy każdy wpis w
K11 (który jest
m×m) i
K21 (
(n−m)×m), ale nie chcę oceniać żadnych wpisów w
K22.
Teraz możemy podzielić skład eigend według tej struktury bloku:
K=UΛUT=[U1U2]Λ[U1U2]T=[U1ΛUT1U2ΛUT1U1ΛUT2U2ΛUT2],
gdzie
U1 jest
m×m i
U2 jest
(n−m)×m. Ale zauważ, że teraz mamy
K11=U1ΛUT1. Więc możemy znaleźć
U1 i
Λ poprzez składanie znanej matrycy
K11.
My też to wiemy K21=U2ΛUT1. Tutaj wiemy wszystko w tym równaniu opróczU2, abyśmy mogli rozwiązać, co implikuje wartość własna: pomnóż przez prawo obie strony (ΛUT1)−1=U1Λ−1 dostać
U2=K21U1Λ−1.
Teraz mamy wszystko, co musimy ocenić
K22:
K22=U2ΛUT2=(K21U1Λ−1)Λ(K21U1Λ−1)T=K21U1(Λ−1Λ)Λ−1UT1KT21=K21U1Λ−1UT1KT21=K21K−111KT21=(K21K−1211)(K21K−1211)T.(*)(**)
W (*) znaleźliśmy wersję osadzania Nyström, którą mogłeś zobaczyć jako definicję. To mówi nam o efektywnych wartościach jądra, które przypisujemy blokowiK22.
W (**) widzimy, że macierz funkcji K21K−1211, który jest kształtem (n−m)×m, odpowiada tym przypisanym wartościom jądra. Jeśli użyjemyK1211 dla m punktów, mamy zestaw mcechy wymiarowe
Φ=⎡⎣⎢K1211K21K−1211⎤⎦⎥.
Możemy to szybko zweryfikować
Φ odpowiada poprawnej macierzy jądra:
ΦΦT=⎡⎣⎢K1211K21K−1211⎤⎦⎥⎡⎣⎢K1211K21K−1211⎤⎦⎥T=⎡⎣⎢K1211K1211K21K−1211K1211K1211K−1211KT21K21K−1211K−1211KT21⎤⎦⎥=[K11K21KT21K21K−111KT21]=K.
Więc wszystko, co musimy zrobić, to trenować nasz regularny model uczenia się z mcechy wymiarowe Φ. Będzie to dokładnie to samo (przy założonych przez nas założeniach), jak wersja jądra problemu uczenia sięK.
Teraz dla pojedynczego punktu danych x, funkcje w Φ odpowiada
ϕ(x)=[k(x,x1)…k(x,xm)]K−1211.
Za punkt
x w partycji 2 wektor
[k(x,x1)…k(x,xm)] to tylko odpowiedni wiersz
K21, dzięki czemu zestawienie ich daje nam
K21K−1211 - więc
ϕ(x) zgadza się na punkty w partycji 2. Działa również w partycji 1: tam wektor jest rzędem
K11, więc układanie ich w stos robi się
K11K−1211=K1211, ponownie zgadzając się z
Φ. Więc ... to nadal dotyczy punktu testowego, którego nie widać na szkoleniu
xnew. Po prostu robisz to samo:
Φtest=Ktest,1K−1211.
Ponieważ założyliśmy, że jądro ma rangę
m, macierz
[KtrainKtest,trainKtrain,testKtest] ma również rangę
moraz rekonstrukcję
Ktest jest wciąż dokładnie taka sama logika jak dla
K22.
Powyżej przyjęliśmy, że macierz jądra
Kbył
dokładnie w randze
m. Zazwyczaj tak się nie dzieje; na przykład dla jądra Gaussa,
Kma
zawsze rangę
n, ale te ostatnie wartości własne zwykle spadają dość szybko, więc będzie
zbliżona do macierzy rangi
moraz nasze rekonstrukcje
K21 lub
Ktest,1będą
zbliżone do prawdziwych wartości, ale nie dokładnie takie same. Będą lepsze rekonstrukcje, im bliżej własnej przestrzeni
K11 dojdzie do tego
K ogólnie rzecz biorąc, dlatego wybór właściwego
m punkty są ważne w praktyce.
Zauważ też, że jeśli K11ma dowolne zerowe wartości własne, możesz zamienić odwrotne na pseudoinwersyjne i wszystko nadal działa; po prostu wymieniaszK21 w rekonstrukcji z K21K†11K11.
Możesz użyć SVD zamiast eigendecomposition, jeśli chcesz; odKjest psd, są tym samym, ale SVD może być nieco bardziej odporny na niewielki błąd numeryczny w macierzy jądra i tym podobne, więc to właśnie robi scikit-learn. Rzeczywista implementacja scikit-learn to robi, chociaż wykorzystujemax(λi,10−12) w odwrotnym zamiast pseudoinwersyjnym.