Метод Нистроема для аппроксимации ядра


12

Я читал о методе Nyström для апроксимации ядра низкого ранга. Этот метод реализован в scikit-learn [1] как метод проецирования выборок данных в низкосортное приближение отображения характеристик ядра.

Насколько мне известно, данный учебный набор и функция ядра, она генерирует низкокачественного приближение ядро матрицы , применяя SVD к и . n × n K W C{xi}i=1nn×nKWC

C = [ W K 21 ]K=[WK21TK21K22] C=[WK21] ,WRl×l

Тем не менее, я не понимаю, как низкое ранговое приближение матрицы ядра можно использовать для проецирования новых выборок в аппроксимированное пространство признаков ядра . Работы, которые я нашел (например, [2]), не очень помогают, потому что они мало дидактичны.

Кроме того, мне любопытно вычислительная сложность этого метода как на этапах обучения, так и на этапе тестирования.

[1] http://scikit-learn.org/stable/modules/kernel_approximation.html#nystroem-kernel-approx

[2] http://www.jmlr.org/papers/volume13/kumar12a/kumar12a.pdf

Ответы:


15

Давайте выведем приближение Нистрома таким образом, чтобы ответы на ваши вопросы были более ясными.

Ключевое предположение в Nyström состоит в том, что функция ядра имеет ранг m . (На самом деле мы предполагаем, что он приблизительно имеет ранг m , но для простоты давайте теперь представим, что это точно ранг m .) Это означает, что любая матрица ядра будет иметь ранг не более m , и в частности

Kзнак равно[К(Икс1,Икс1)...К(Икс1,ИксN)К(ИксN,Икс1)...К(ИксN,ИксN)],
это рангм. Следовательно, существуетмненулевых собственных значений, и мы можем записать собственное разложениеКкак
Кзнак равноUΛUT
с собственными векторами, сохраненными вU, формыN×ми собственными значениями, расположенными вΛ,диагональной матрицем×м.

Итак, давайте выберем элементов, обычно равномерно случайным образом, но, возможно, в соответствии с другими схемами - все, что имеет значение в этой упрощенной версии, это то, что K 11 будет иметь полный ранг. Как только мы это сделаем, просто пометьте точки так, чтобы мы получили матрицу ядра в блоках: K = [ K 11 K T 21 K 21 K 22 ] , где мы оцениваем каждую запись в K 11 (которая равна m × m ) и К 21 ( ( н - м ) × ммК11

Кзнак равно[К11К21TК21К22],
К11м×мК21(N-м)×м), но не хочу оценивать какие-либо записи в .К22

Теперь мы можем разделить собственное разложение и по этой блочной структуре: гдеU1представляет собойm×m,аU2представляет собой(n-m)×m. Но обратите внимание, что теперь мы имеемK11=U1ΛU T 1 . Таким образом, мы можем найти

K=UΛUT=[U1U2]Λ[U1U2]T=[U1ΛU1TU1ΛU2TU2ΛU1TU2ΛU2T],
U1m×mU2(nm)×mK11=U1ΛU1T и Λ путем собственного разложения известной матрицы 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ΛU1TU2(ΛU1T)1=U1Λ1

U2=K21U1Λ1.
K22
K22=U2ΛU2T=(K21U1Λ1)Λ(K21U1Λ1)T=K21U1(Λ1Λ)Λ1U1TK21T=K21U1Λ1U1TK21T(*)=K21K111K21T(**)=(K21K1112)(K21K1112)T.

В (*) мы нашли версию встраивания Nyström, которую вы могли видеть просто как определение. Это говорит нам об эффективных значениях ядра, которые мы вменяем для блока .K22

В (**) мы видим, что матрица признаков , которая имеет форму(n-m)×m, соответствует этим вмененным значениям ядра. Если мы используемK1K21K1112(nm)×mдляточекmмы имеем множествоm-мерных признаков Φ=[K 1K1112mm Мы можем просто быстро проверить, чтоΦсоответствует правильной матрице ядра: ΦΦT

Φ=[K1112K21K1112].
Φ
ΦΦT=[K1112K21K1112][K1112K21K1112]T=[K1112K1112K1112K1112K21TK21K1112K1112K21K1112K1112K21T]=[K11K21TK21K21K111K21T]=K.

mΦK

xΦ

ϕ(x)=[k(x,x1)k(x,xm)]K1112.
x[k(x,x1)k(x,xm)]K21K21K1112ϕ(x)K11K11K1112=K1112Φxnew
Φtest=Ktest,1K1112.
m[KtrainKtrain,testKtest,trainKtest]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 K21K11K11.

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,1012) in the inverse instead of the pseudoinverse.


1
When A is positive semidefinite, the eigendecomposition UΛUT coincides with the SVD. scikit-learn, because due to numerical error A might be slightly non-psd, instead computes UΣVT, and uses A12=VΣ12VT, so that A's features become AVΣ12VT=UΣVTVΣ12VT=UΣ12VT=A12. It's the same thing, basically.
Дугал

1
Whoops, sorry, yeah they use UΣ12VT=K12. It all doesn't really matter since UV, but since they do the transpose the features for K11 end up as UΣVTVΣ12UT=UΣ12UT.
Дугал

1
Raising a diagonal matrix to a power is the same as raising each element to a power, and x12=1/x. In numpy broadcasting notation, elementwise multiplication by a vector is the same as right-multiplying by a diagonal matrix. Also, that code uses V to mean what I was calling VT.
Дугал

1
Whoops, sorry, that should only be up to xm (in the re-labeled ordering, so that those are the Nyström basis points). Will fix.
Дугал

1
x is a data point, its dimension isn't specified here. x might be in Rd, or it might be a string or something; just say that xX, so that k:X×XR. Then ϕ:XRm just stacks up k(x,xi) for m different inputs.
Дугал
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.