Давайте выведем приближение Нистрома таким образом, чтобы ответы на ваши вопросы были более ясными.
Ключевое предположение в Nyström состоит в том, что функция ядра имеет ранг м . (На самом деле мы предполагаем, что он приблизительно имеет ранг м , но для простоты давайте теперь представим, что это точно ранг м .) Это означает, что любая матрица ядра будет иметь ранг не более м , и в частности
K=⎡⎣⎢⎢к (x1,x1)⋮к (xN,x1)...⋱...к (x1,xN)⋮к (xN,xN)⎤⎦⎥⎥,
это ранг
м. Следовательно, существует
мненулевых собственных значений, и мы можем записать собственное разложение
Kкак
K=UΛUT
с собственными векторами, сохраненными в
U, формы
n×mи собственными значениями, расположенными в
Λ,диагональной матрице
m×m.
Итак, давайте выберем элементов, обычно равномерно случайным образом, но, возможно, в соответствии с другими схемами - все, что имеет значение в этой упрощенной версии, это то, что K 11 будет иметь полный ранг. Как только мы это сделаем, просто пометьте точки так, чтобы мы получили матрицу ядра в блоках:
K = [ K 11 K T 21 K 21 K 22 ] ,
где мы оцениваем каждую запись в K 11 (которая равна m × m ) и К 21 ( ( н - м ) × мmK11
K=[K11K21KT21K22],
K11m×mK21(n−m)×m), но не хочу оценивать какие-либо записи в
.
K22
Теперь мы можем разделить собственное разложение и по этой блочной структуре:
гдеU1представляет собойm×m,аU2представляет собой(n-m)×m. Но обратите внимание, что теперь мы имеемK11=U1ΛU T 1 . Таким образом, мы можем найти
K=UΛUT=[U1U2]Λ[U1U2]T=[U1ΛUT1U2ΛUT1U1ΛUT2U2ΛUT2],
U1m×mU2(n−m)×mK11=U1ΛUT1 и
Λ путем собственного разложения известной матрицы
K 11 .
U1ΛK11
Также известно, что . Здесь мы знаем все в этом уравнении, за исключением U 2 , поэтому мы можем решить, для каких собственных значений это означает: умножим справа обе стороны на ( Λ U T 1 ) - 1 = U 1 Λ - 1, чтобы получить
U 2 = K 21 U 1 Λ - 1 .
Теперь у нас есть все, что нужно для оценки K 22 :
K 22K21=U2ΛUT1U2(ΛUT1)−1=U1Λ−1
U2=K21U1Λ−1.
K22K22=U2ΛUT2=(K21U1Λ−1)Λ(K21U1Λ−1)T=K21U1(Λ−1Λ)Λ−1UT1KT21=K21U1Λ−1UT1KT21=K21K−111KT21=(K21K−1211)(K21K−1211)T.(*)(**)
В (*) мы нашли версию встраивания Nyström, которую вы могли видеть просто как определение. Это говорит нам об эффективных значениях ядра, которые мы вменяем для блока .K22
В (**) мы видим, что матрица признаков , которая имеет форму(n-m)×m, соответствует этим вмененным значениям ядра. Если мы используемK1K21K−1211(n−m)×mдляточекmмы имеем множествоm-мерных признаков
Φ=[K 1K1211mm
Мы можем просто быстро проверить, чтоΦсоответствует правильной матрице ядра:
ΦΦT
Φ=⎡⎣⎢K1211K21K−1211⎤⎦⎥.
ΦΦΦT=⎡⎣⎢K1211K21K−1211⎤⎦⎥⎡⎣⎢K1211K21K−1211⎤⎦⎥T=⎡⎣⎢K1211K1211K21K−1211K1211K1211K−1211KT21K21K−1211K−1211KT21⎤⎦⎥=[K11K21KT21K21K−111KT21]=K.
mΦK
xΦ
ϕ(x)=[k(x,x1)…k(x,xm)]K−1211.
x[k(x,x1)…k(x,xm)]K21K21K−1211ϕ(x)K11K11K−1211=K1211ΦxnewΦtest=Ktest,1K−1211.
m[KtrainKtest,trainKtrain,testKtest]mKtestK22
KmKnи наши реконструкции
К21 или
Ктест , 1будут
близки к истинным значениям, но не точно так же. Они будут лучше реконструировать, чем ближе пространство
К11 добирается до того из
К в целом, именно поэтому выбор правильного
м очки важны на практике.
Обратите внимание, что если К11 has any zero eigenvalues, you can replace inverses with pseudoinverses and everything still works; you just replace K21 in the reconstruction with K21K†11K11.
You can use the SVD instead of the eigendecomposition if you'd like; since K is psd, they're the same thing, but the SVD might be a little more robust to slight numerical error in the kernel matrix and such, so that's what scikit-learn does. scikit-learn's actual implementation does this, though it uses max(λi,10−12) in the inverse instead of the pseudoinverse.