커널 근사에 대한 Nystroem 방법


12

나는 낮은 순위의 커널 aproximation을위한 Nyström 방법에 대해 읽었습니다. 이 방법은 scikit-learn [1]에서 구현되어 커널 기능 매핑의 낮은 순위에 데이터 샘플을 투사하는 방법으로 사용됩니다.

내가 아는 한, 훈련 세트 과 커널 함수가 주어지면 SVD를 에 적용 하여 커널 매트릭스 의 낮은 순위 근사값을 생성합니다. 및 .{xi}i=1nn×nKWC

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 근사값을 도출해 봅시다.

Nyström의 핵심 가정은 커널 함수의 순위가 입니다. (실제로 우리는 대략 순위 라고 가정 하지만, 단순성을 위해 지금 은 정확히 순위 라고 가정합시다 .) 이것은 모든 커널 매트릭스가 최대 , 특히 순위를 가짐을 의미합니다 순위 입니다. 따라서 이 아닌 고유 값 이 의 고유 분해 를 로 쓸 수 있습니다.mmmm

K=[k(x1,x1)k(x1,xn)k(xn,x1)k(xn,xn)],
mmK
K=UΛUT
저장된 고유 벡터와 형상의 및 고유치 배치 , 대각 행렬.Un×mΛm×m

따라서 일반적으로 임의적으로 균일하지만 다른 체계에 따라 요소를 선택하겠습니다 .이 단순화 된 버전에서 중요한 것은 이 전체 순위에 있다는 것입니다. 일단 우리가 블록의 커널 행렬로 끝나도록 점의 레이블을 다시 지정하십시오 : 에서 ( ) 및 ( )의 각 항목을 평가하지만 항목을 평가하고 싶지 않습니다. .mK11

K=[K11K21TK21K22],
K11m×mK21(nm)×mK22

이제이 블록 구조에 따라 고유 분해를 분할 할 수 있습니다 : 여기서 은 이고 는 입니다. 그러나 이제 입니다. 알려진 행렬 을 고유 분해하여 과 를 찾을 수 있습니다 .

K=UΛUT=[U1U2]Λ[U1U2]T=[U1ΛU1TU1ΛU2TU2ΛU1TU2ΛU2T],
U1m×mU2(nm)×mK11=U1ΛU1TU1ΛK11

또한 입니다. 여기에서 제외한이 방정식의 모든 것을 알고 있으므로 고유 값이 의미하는 바를 풀 수 있습니다. 양변에 을 하면 이제 를 평가하는 데 필요한 모든 것이 있습니다 : K21=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

(**)에서 shape 인 피쳐 행렬 가 이러한 대치 된 커널 값에 해당함을 알 수 있습니다. 우리가 사용하는 경우 대한 지점, 우리는 한 세트가 차원 특징 가 올바른 커널 매트릭스에 해당 하는지 신속하게 확인할 수 있습니다 . K21K1112(nm)×mK1112mm

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

따라서 우리가해야 할 일은 차원의 특징 인 정규 학습 모델을 훈련시키는 것 입니다. 이것은 에 대한 학습 문제의 커널 버전과 정확히 동일합니다 (우리가 가정 한 가정에서) .mΦK

이제, 개별 데이터 포인트에 대한 에서 기능 대응 파티션 2 의 포인트 경우 벡터 는 의 관련 행 이므로 스태킹 이것들은 우리에게 – 는 파티션 2의 포인트에 동의합니다. 또한 파티션 1에서도 작동합니다. 거기에서 벡터는 의 행입니다. 이므로 쌓아 되고 다시 동의합니다.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


위에서 우리는 커널 행렬 가 정확히 등급 이라고 가정했다 . 일반적으로 그렇지 않습니다. 예를 들어 가우시안 커널의 경우 는 항상 순위 이지만 후자의 고유 값은 일반적으로 매우 빨리 떨어 지므로 순위 의 행렬에 가깝고 또는 의 재구성에 가깝습니다. 은 ( 는) 실제 값에 가깝지만 정확히 동일하지는 않습니다. 그들은 가까이의 고유 공간 나은 재구성 수 있습니다 도착의 그것과KmKnmK21Ktest,1K11K전반적으로 올바른 포인트를 선택하는 것이 실제로 중요한 이유 입니다.m

경우 있음을 유의하십시오 어떤 제로 고유 값을 가지고, 당신은 pseudoinverses과 역원을 대체 할 수있는 모든 것이 여전히 작동; 당신은 대체 함께 재건에 .K11K21K21K11K11

원하는 경우 고유 분해 대신 SVD를 사용할 수 있습니다. 이후 PSD이며, 무엇의 수행 scikit은 배울 그래서, 그들은 같은 일을하고 있지만 SVD는 커널 매트릭스와 같은 약간의 수치 오류에 조금 더 강력한 될 수 있습니다. scikit-learn의 실제 구현 은 pseudoinverse 대신 를 역으로 사용하지만이를 수행합니다.Kmax(λi,1012)


1
경우 긍정적 semidefinite 상기 eigendecomposition 인 SVD에 일치한다. scikit-learn : 숫자 오류로 인해 가 약간 PSD가 아닐 수 있으므로 대신 를 계산 하고 를 사용하므로 있음 의 기능이 될 . 기본적으로 같은 것입니다. AUΛUTAUΣVTA12=VΣ12VTAAVΣ12VT=UΣVTVΣ12VT=UΣ12VT=A12
Dougal

1
죄송합니다. 예, 합니다. 이후에는 모두 중요하지 않지만 , 의 기능을 조옮김 때문에 . UΣ12VT=K12UVK11UΣVTVΣ12UT=UΣ12UT
Dougal

1
대각 행렬을 거듭 제곱으로 올리는 것은 각 요소를 거듭 제곱으로 올리는 것과 같으며 입니다. numpy 브로드 캐스트 표기법에서 벡터에 의한 요소 별 곱셈은 대각 행렬을 오른쪽으로 곱하는 것과 같습니다. 또한 해당 코드는 를 사용 하여 라는 것을 의미합니다 . x12=1/xVVT
Dougal

1
죄송합니다. 최대 (다시 레이블이 지정된 순서로 Nyström 이어야 함 ). 해결됩니다. xm
Dougal

1
x 는 데이터 포인트이며 해당 차원은 여기에 지정되어 있지 않습니다. 는 에 있거나 문자열 또는 무언가 일 수 있습니다. 단지 말을 그 , 그래서 . 그런 다음 은 개의 다른 입력에 대해 를 쌓아 올립니다 . xRdxXk:X×XRϕ:XRmk(x,xi)m
Dougal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.