파이썬을 이용하여 커널법 배우기/선형 주성분 분석 이론

testwiki
둘러보기로 이동 검색으로 이동

d 차원 벡터 샘플 집합 𝐗=[𝐱1,,𝐱l]d×l 가 있다고 하자. 이 샘플 집합과의 거리의 합이 가장 적은 하나의 벡터를 𝐱0 라 하면, 이는 제곱오차(squared-error) 척도 J0(𝐱0) 를 최소화하는 값이다.

J0(𝐱0)=k=1l||𝐱0𝐱k||2

이 문제의 최적값은 샘플의 평균 값 𝐦 으로 구할 수 있는데 (즉 𝐱0=𝐦 ),

𝐦=1lk=1l𝐱k

다음과 같이 쉽게 증명할 수 있다.

J0(𝐱0)=k=1l||(𝐱0𝐦)(𝐱k𝐦)||2=k=1l||𝐱0𝐦||22(𝐱0𝐦)k=1l(𝐱k𝐦)+k=1l||𝐱k𝐦||2=k=1l||𝐱0𝐦||2+k=1l||𝐱k𝐦||2independent of 𝐱0.

𝐯 를 특정 방향을 나타내는 단위 벡터라 하자. 샘플 𝐱i 는 샘플 평균 𝐦 에서 𝐯 방향으로 ai 만큼 이동했다고 표현할 수 있다.

𝐱i=𝐦+ai𝐯

만약 이 값을 만족시키는 최적의 ai 집합은 앞에서와 마찬가지로 제곱오차 척도를 최소화하는 값으로 구할 수 있다.

J1(a1,,al,𝐯)=k=1l||(𝐦+ak𝐯)𝐱k||2=k=1l||ak𝐯(𝐱k𝐦)||2=k=1lak2||𝐯||22k=1lak𝐯(𝐱k𝐦)+k=1l||𝐱k𝐦||2independent of J1

위 식을 ai 에 대해서 편미분 수행하고, ||𝐯||2=1 이란 사실을 통해 다음 식을 얻을 수 있다.

aiJ1(a1,,al,𝐯)=2ai2𝐯(𝐱i𝐦)

목적함수 J1 을 최소화하는 값은 식 위식이 0인 경우이다. 따라서 최적의 값을 다음과 같다.

ai=𝐯(𝐱i𝐦)

공분산 행렬 𝐂 를 다음과 같이 정의하고,

𝐂=k=1l(𝐱k𝐦)(𝐱k𝐦)

식 ()과 ()를 식 ()에 대입하면 다음 식을 얻을 수 있다.

J1(𝐯)=k=1lak22k=1lak2=k=1l𝐯(𝐱k𝐦)(𝐱k𝐦)𝐯=𝐯𝐂𝐯

이제 위 식의 최소화 문제는 𝐯𝐂𝐯 의 최대화 문제로 해결 가능하다. 라그랑제 승수(Lagrange multipliers) λ 를 이용하여 다음 식을 나타내고,

L(λ,𝐯)=𝐯𝐂𝐯λ(𝐯𝐯1)

𝐯𝐂𝐯 최대화 문제는 위 식을 𝐯 로 미분하여 얻을 수 있다.

L𝐯=2𝐂𝐯2λ𝐯

위 식을 0으로 설정하면, J1 최소화 문제는 공분산 행렬 𝐂 의 고유값 문제로 해결 가능하다.

𝐂𝐯=λ𝐯

실제로 𝐯𝐂𝐯=λ𝐯𝐯=λ 이기 때문에 가장 큰 고유값에 대응하는 고유벡터가 최적의 값이 된다. 또한 고유값의 내림차순에 대응하는 고유벡터 몇개를 취함으로써 목적함수 J1 을 더욱 만족시킬 수 있다. 여기서 선택된 고유벡터를 주성분(principal components)라 한다.

주성분 즉, q 개의 선택된 고유값을 𝐕=[𝐯1,,𝐯q]d×q 라 하면, 이 주성분으로 특징 샘플 𝐲d 을 사상하면 PV(𝐲)를 얻을 수 있다.

PV(𝐲)=𝐕(𝐲𝐦)q

또한 원래 샘플 복원은 다음과 같이 수행한다.

𝐲=𝐕𝐕(𝐲𝐦)+𝐦

여기서 𝐲 는 복원된 샘플을 의미한다.