kwan's note

Dimesionality reduction - 차원축소 , PCA( principal component analysis) 본문

ML and AI/Machine learning - Andrew Ng

Dimesionality reduction - 차원축소 , PCA( principal component analysis)

kwan's note 2021. 2. 6. 14:22
반응형

출처: machine learning by andrew ng, stanford cousera lecture

수강일시: 2021.02.05

 

이번시간에는 차원축소에 대해 알아보도록 하겠습니다.

차원 축소는 n차원의 특성을 r차원으로 축소하는 방법의 문제입니다.

 

먼저 다음과 같은 선형 관계의 특성(cm 와 inch 단위)에 대해 두 값은 "길이"라는 하나의 특성으로 압축할 수 있게됩니다. 따라서 이에대한 2차원 특성을 1차원으로 축소할 수 있게된다.

또는 이와 유사하게 3차원 특성중 어떠한 평면으로 나타나는 특성을 2차원으로 사영시켜 표현할 수 있다.

 

이러한 차원축소를 사용하는 이유중 하나의 큰 부분은 특성의 시각화이다.

n차원의 특성을 2차원 또는 3차원으로 축소한다면 보기 쉽게 데이터의 특성을 파악할 수 있게된다.

아래는 그 예인 국가들의 데이터이다.

국가들의 다양한 특성중 대표특성 z1 z2에 대해 위와같이 시각화 할 수 있게된다.

 

 

그렇다면 어떤 방식을 PCA( principal component analysis)를 진행해야 할까

PCA는 기존데이터의 손실을 최소화 하는 방향으로 이루어져야 한다.

이는 linear regression과 유사하게 들릴 지 모르겠다. 하지만 PCA는 선형근사와는 다른 개념이다.

PCA는 특성의 손실을 최소화 하는 방향이므로 PCA line과 data의 점과의 거리가 최소화 하는 방향으로 선택된다.

하지만 linear regression은 가설함수와 data의 함수값(y value)가 최소화 하는 방향으로 결정된다.

 

다음으로 PCA의 과정에 대해 알아보도록 하자.

먼저 training set에 대해 feature scaling을 진행하고(선택) mean normalization을 진행한다(대부분 필수)

다른 특성들이 scale이 다르다면 한쪽 특성에 대해 치우친결과를얻을 수 있게된다.

 

다음으로는 covariance matrix를 구한다.

cov-matrix sigma는 xxT의 1부터 n까지의 합에 1/m을 취한 값이 된다.

그 다음으로는 이 시그마를 특이값분해를 진행해 matrix U 값을 얻는다.

reminder-by-kwan.tistory.com/39?category=956722

 

특이값 분해(Singular Value Decomposition)

출처: 부스트코스-인공지능을 위한 선형대수 수강일시:2021.01.08 전체 강의의 마지막 주제인 특이값 분해(SVD: Singular Value Decomposition)을 배우겠습니다. 그리고 이에 더 나아가 특이값 분해를 여러

reminder-by-kwan.tistory.com

얻은 n by n matrix U 에 대해 우리가 얻고자 하는 특성 z는 U.transpose().dot(x)가 된다.

이로서 n차원의 특성을 k차원으로 축소하여 새로운 특성 z(k x 1 vector)를 얻었다.

 

위 과정에 대한 요약은 다음과 같다.

이제 축소한 차원에대해 이를 다시 다시 차원을 증가시키는 방법에 대해 생각해 보겠습니다.

위에서 얻은 행렬 U에 z를 곱하는 방식으로 x(approximated x)를 얻을 수 있습니다.

 

그렇다면 어떻게 축소되는 차원 k를 정할 수 있을까요

차원축소는 어떤방식이 되었든간에 데이터의 손실을 가져옵니다.(손실이 없을수는 있어도 증가하지는 않음)

그렇다면 이러한 손실의 비율을 정해 특정 손실이 발생하기 전까지k 값을 조금씩 증가시키는 방향으로 선택할 수 있을 것 입니다.

x와 x apporoximated 에 대해 차이의 제곱을 x제곱으로 나누어 손실율을 계산합니다. 이때 0.01미만이라면 99%의 데이터가 보존되는것을, 0.05라면 95%가 보존되는것을 의미합니다.

 

k값을 1부터 하나씩 증가시키는 방법도 가능은 합니다만 이는 연산량이 너무 많아지므로 다른 방식을 고민해보았습니다. 특이값 분해에서 S function은 대각행렬이 됩니다. 이 대각행렬에 대해 k번째 feature 까지 곲을 진행하고 이를 전체로 나누게 된다면 손실함수와 동일한 값을 얻게 됩니다.

따라서 k=1부터 쭉 계산하는 방식이 아닌 S를 이용한 방식으로 진행하고자 합니다.

하지만 꼭 이런 방식만 존재하는 것은 아닙니다.

k를 정함에 있어서 특정 k로 정하고 싶다면 이를 직접 계산해도 가능합니다.

하지만 k를 미리 정해놓은 상태에서도 이러한 k를 정함에 있어 타당성을 보일 때 위와 같은 방식으로 손실율을 보인다거나 k와 손실률함수를 만들어 elbow method 를 사용하는 등 여러 방식을 고민해 볼 수 있습니다.

 

그렇다면 PCA를 왜 사용하는것일까요

앞에 말했던 것 과 같이 특성들을 visualize하는데에도 PCA가 사용됩니다.

또 다른 것중 하나는 데이터의 압축입니다. 데이터를 압축하므로서 학습 속도를 획기적으로 증가시킬 수 있습니다.

어떠한 학습 알고리즘이 O(n^3)를 보일때 10000개의 특성을 가진 데이터에서 1000개의 feature로 감소시킬 수 있다면

학습 속도는 1000배가 빨라집니다. 만약 2주가 걸릴 학습이었다면 0.336시간으로 줄일 수 있게됩니다.

하지만 overfitting을 막기 위해 과도한 PCA는 문제가 발생합니다.

PCA는 분명 특성을 잃어버리기 때문에 중요한 특성을 잃어버릴 수 있습니다. 따라서 PCA는 꼭 필요한 상황에서만 진행하도록 해야합니다.

반응형