본문 바로가기
CS/ML

[ML] 9주차 - Dimensionality Reduction

by 빠니몽 2023. 11. 3.

11.03.2023

 

0. Introduction

Dimension, 차원: 피쳐의 갯수

데이터의 피쳐가 많다고 해서 성능이 좋아지는 것은 아니다.

피쳐가 많으면 좋은 솔루션, 좋은 성능을 가지는 머신러닝 모델을 만드는 것이 어려워진다.

이 경우 Dimensionality Reduction, 차원 축소가 필요하다.

차원 축소를 할 경우 데이터의 손실을 최소화하면서도 차원을 의미있는 수준까지 줄여야 한다.

차원 축소는 학습시간을 줄여주는 것뿐만 아니라 데이터 비주얼라이제이션에도 굉장히 편리하다.

1. The Curse of Dimensionality, 차원의 저주

인간은 3차원에서 살고 있기 때문에 차원이 그보다 높아지면 직관적으로 이해가 힘들다.

예를들어 평면에서 랜덤 포인트를 잡아낼 때 보더라인에 0.0001만큼 가까울 확률이 0.4퍼밖에 되지 않을때 차원이 1만이면 확률은 99.99보다 높게 된다(차원이 높아질수록 보더라인에 데이터 포인터들이 쏠리기 때문).

데이터 포인터들의 거리로 두 데이터가 얼마나 비슷한지 알 수 있는데, 차원이 높아질수록 프리딕션이 어렵다. -> 오버피팅될 확률이 높다.

단순히 속도/시간의 문제가 아니라 성능의 문제인 것.

차원 축소를 하지 않고 문제를 해결하는 방법은 트레이닝셋의 사이즈를 충분히 늘리는 것이다.

이론적으로는 가능하지만, 실질적으로는 그 양의 데이터 수집이 불가능함. 차원에 따라 필요한 양만큼 데이터셋을 수집하는게 불가능하기 때문(필요한 데이터셋은 차원에 비례해 지수적으로 올라감).

이것을 차원의 저주라고 부르고, 차원 축소가 필요한 이유이다.

그러나 차원을 3d까지 낮출 필요는 없음. 어디까지 낮추느냐는 알고리즘에 따라 달라진다.

2. Main Approached for Dimensionality Reduction(차원 축소)

2-1. Projection

실제 세상에서의 문제들에서는 트레이닝 인스턴스이 모든 차원에 똑같이 분포 되어있지 않는다.

또한 많은 피쳐들이 거의 상수값이고, 다른 많은 피쳐들은 서로 매우 깊게 연관되어있다(코릴레이션이 많다).

트레이닝에서 상수값은 필요 없고, 코릴레이션이 있는 두 인스턴스의 경우 하나의 인스턴스만 확보하면 된다.

이렇게 필요없는 피쳐들을 정리했을 때 데이터는 보통 한 서브스페이스에 몰린다.

출처: 강의자료; 3차원의 데이터셋이 2차원 평면으로 몰린 것을 볼 수 있음
출처: 강의자료; 새로운 피쳐 z1, z2는 axis가 된다.

서브스페이스에 트레이닝 인스턴스들을 프로젝트를 수직으로 했을 때 위와 같은 2D 데이터셋을 얻을 수 있다.

 

그러나 프로젝션이 항상 베스트 옵션인 것은 아니다. 서브 스페이스가 트위스트 되어있거나 턴되어있는 경우들이 있을 수 있음.

출처: 강의자료

위의 가운데 이미지같은 경우, x1을 보면 그래프 그대로 프로젝션을 한 형태인데, 프로젝션이 잘되지 않은 것을 확인할 수 있다.

반면 오른쪽 그래프는 데이터 인스턴스를 unroll했고, 그 결과가 프로젝션보다 훨씬 좋음. 결국 데이터셋이 가장 중요함

2-1. Manifold Learning

d-dimensional manifold는 n-dimensional space에 포함된다.(d<n)

매니폴드를 리모델링 하거나 줄이는 것을 Manifold Learning이라고 하며, 많은 차원 축소 알고리즘들이이 방식을 채택한다. 

매니폴드 러닝은 manifold assumption(매니폴드 가정), manifold hypothesis(매니폴드 가설)을 기반으로 한다.

이 가설의 내용은 '거의 모든 실제 세계에서의 높은 차원의 데이터들은 훨씬 낮은 차원의 매니폴드에 분포되어있다' 이다.

출처: 강의자료
출처: 강의자료; 매니폴드 모델의 배드 케이스 예시

매니폴드 러닝도 데이터셋에 따라 원본데이터가 훨씬 더 좋은 솔루션을 가질 수도 있다.

위의 경우와 같이 원본 데이터의 디시전 바운더리가 훨씬 심플할 수도 있음.

결론: 모델 트레이닝 전에 트레이닝셋의 디맨져널리티를 리덕션하면 학습속도는 빨라지지만 항상 더 좋거나 더 단순한 솔루션을 개런티하지는 않음

3. Principal Component Analysis (PCA)

PCA란 원본 데이터셋의 variance를 최대한 보존하면서 차원을 축소하는 것이 목표이다.

가장 유명한 차원 축소 알고리즘이다.

데이터셋에 가장 가까운 hyperplane을 찾은 뒤 그걸로 프로젝션을 진행한다. 매니폴드와 프로젝션을 동시에 진행하는 알고리즘임.

3-1. Preserving the Variance

출처: 강의자료

동작방법

1. variance가 가장 큰 축을 찾는다.

2. 그 축을 기준으로 orthogonal/perpendicular인 방향으로 variance가 가장 큰 축을 다시 찾음

3. 이걸 반복한다.

The maximum number of variance는 솔리드 라인에 프로젝션을 시켰을 때 보존된다.

맥시멈 배리언스를 보존하는 것은 데이터 로스가 가장 적은 축을 찾는 방법임.

다른 말로 표현하자면, 오리지널 데이터셋과 평균 squared distance를 계산해서 그게 가장 작은 axis를 찾고 그곳에 프로젝션을 한다.

3-2. Principal Components

선형대수학에 존재하는 Singular Value Decomposition(SVD)로 트레이닝 셋의 principal components를 구할 수 있음

이렇게 되면 v의 컬럼벡터들이 pc가 됨 (컬럼벡터는 모두 서로 직교(orthogonal)). 가장 작은 순서대로 나열되어있음.

이 행렬은 센터되어있다고 가정하고 반드시 mean value(평균값)을 빼줘야 한다.

3-3. Projecting Down to d Dimensions

출처: 강의자료; 원본인 x의 차원은 n이고, Wd의 차원은 d임

출처: 강의자료

n_components: d를 의미

fit_transform: 프로젝션을 의미

3-4. Explained Variance Ratio

d를 정하는 것은 explained variance ratio를 점검하는 것이다.

출처: 강의자료

두 개의 PC가 존재할 때, 첫번째 pc는 84.2퍼센트의 데이터를 설명할 수 있고, 두번째 pc는  14.6으로 설명할 수 있다.

남은 1.2퍼센트정도는 사실 날려도 상관 없으므로 차원 축소가 끝나게 된다.

결론적으로 이 ratio가 얼마나 될 때까지 pc를 찾을 것이냐가 d를 선택하는 기준이 된다.

3-4. 차원 갯수 선택하기

차원의 갯수는 충분히 큰 비율의 variance를 설명할 수 있어야 한다.

출처: 강의자료

n_components가 정수면 그 갯수만큼의 pc를 찾고, 실수이면(0.0-1.0) 그 퍼센테이지를 보장하는 PC를 찾는다.

원본 데이터셋의 갯수가 400이라고 가정했을 때 pc의 갯수도 400이면 ratio는 1이 된다.

3-5. PCA for Compression

PCA를 진행하면 압축효과가 있고, 트레이닝 셋은 메모리를 덜 차지하게 된다.

만약 95퍼센트의 데이터를 보존한다고 가정했을 때 feature의 개수는 784개에서 150으로 현저히 줄어듬

이렇게 줄어든 차원은 inverse transform을 통해 복원도 가능하다. -> 리컨스트럭션이라 불림

이 경우 이미 5프로의 데이터가 손실되었기 때문에 완벽한 오리지널 데이터로 돌아갈 수는 없지만 의미있는 정보들은 남아있어 비슷하게나마 복원이 가능함

원래 데이터와 다시 복원된 데이터 사이의 mean squared distance를 reconstruction err라고 한다.

출처: 강의자료
출처: 강의자료; 리컨스트럭션

Wd: 직교 행렬, 컬럼백터들.

역행렬 대신 전치행렬(WT)가 붙은 이유: 원래 벡터인 Xd-proj는 컬럼백터이기 때문에 전치행렬을 곱하면 원래의 행렬이 나오게 됨.

3-6. Randomized PCA

 만약 랜덤마이즈드로 설정하여 PCA를 사용하게 되면 pc를 찾을 때 stochastic(스토캐스틱) 알고리즘을 이용한다.

d가 n보다 훨씬 작은 경우 SVD와 비교했을 때 서치 시간이 매우 줄어든다. (Complexity에 차이점이 있음)

출처: 강의자료

svd_solver를 auto로 세팅하면 m 또는 n이 500보다 크고 d가 m이나 n보다 80퍼센트 작을 때 randomized PCA를 쓴다.

그 외에는 full SVD를 씀

3-6. Incremental PCA

데이터셋이 너무 많을 때 PCA를 미니배치처럼 진행하는 것이 incremental PCA이다.

코드상으로는 fit 대신에 partial_fit을 사용하면 된다.

4. Kernel PCA

커널 트릭과 같은 개념이다. 디맨저널리티 리덕션에서 복잡하고 선형적이지 않은 프로젝션을 수행할 때 사용한다.

보통 프로젝션 후 인스턴스들의 클러스터를 보존하거나 트위스티드 된 매니폴드에 분호되어있는 데이터셋을 unrolling할 때 사용된다.

출처: 강의자료

4-1. 커널 선택 및 하이퍼파라미터 튜닝

kPCA는 unsupervised learning이라서 정확한 성능 측정방법이 있진 않다.

보통 디맨저널리티 리덕션은 supervised learing의 준비단계이므로, grid search를 사용해 최대 성능을 가질 수 있는 커널과 하이퍼파라미터의 조합을 선택한다.

다른 방식은 완전히 unsupervised로 진행하는 것인데, 가장 작은 reconstruction err를 가지는 커널과 하이퍼파라미터를 찾는다.

출처: 강의자료

reconstruction pre-image: 오리지널 스페이스에서 reconstructed point와 가까이 매핑할 수 있는 포인트

original space -> feature space의 과정은 암시적이다.

출처: 강의자료

위의 과정을 scikit-Learn에서는 fit_inverse_transform=true로 주면 자동으로 수행한다. 디폴트는 false.

5. Locally Linear Embedding (LLE)

LLE는 또 다른 강력한 비선형 차원 축소 기술이다.

각각의 인스턴스에 closest neighbor들을 몇개까지 볼 것인지 하이퍼파라미터로 정할 수 있다.

그 갯수만큼의 로컬 릴레이션십을 가장 잘 보존하는 디맨젼을 찾는다.

LLE 역시 트위스티드된 매니폴드를 unrolling하는데에 좋다.

5-1. How LLE Works

1. k(neighbor 인스턴스의 갯수)를 세팅한다.

2. 이 인스턴스들을 리니어 함수로 리컨스트럭션을 진행한다.

출처: 강의자료

Xi: 현재 인스턴스

Xj: 비교하는 인스턴스, Xj가 neighbor가 아니라면 Wij는 0이다.

원본데이터(Xi)와 리니어함수(시그마 Wij Xj)의 차이를 최소화시키는 것이 목표이다.

second one in subjec to : Xij를 다 더했을 때 1이 되어야 한다.

 

위의 단계를 진행하면 다음 단계로 넘어간다.

로컬 릴레이션십을 최대한 보존하면서 매핑되어야 한다.

Zi는 d-dimensional space에 프로젝션된 Xi의 이미지이다.

Zi와 로컬릴레이션십을 매핑한 것 사이를 최소화시키는 Z를 찾는 것이 목표

 

앞 수식과의 차이점이 있다면, 첫번째 수식은 인스턴스를 픽스하고 optimal weight, 최적의 가중치를 찾는다.

두번째 수식은 weight, 가중치를 픽스하고 인스턴스 이미지의 optimal position, 최적의 포지션을 찾는다.

'CS > ML' 카테고리의 다른 글

11주차 - 딥 뉴럴 네트워크 학습시키기  (2) 2023.12.12
10주차 - ANN  (1) 2023.12.11
[ML] 요점정리  (1) 2023.10.25
[ML] 5주차 - SVM  (1) 2023.10.23
[ML] 4주차 - 트레이닝 모델  (1) 2023.10.22