AI/Machine Learning

Dimension Reduction

y.halfmoon 2022. 9. 4. 23:37

 

중요 개념 : 차원, 차원의 저주, 차원 축소, SVD, PCA, LDA, ICA

중요 개념 but 설명은 없는 : 행렬의 개념들, 정사영, 공분산, 다중공선성

 

들어가기 앞서,
직관적으로 이해되는 PCA, LDA, ICA에 대한 부분은 그림을 중심으로 설명하였기에 수식이 없다.
그리고 직관적으로 이해가 되지 않는 SVD의 경우, DeepDive를 만들어 수식과 함께 설명했다.

 

차원이란?

차원은 점 등의 위치를 나타내기 위해 필요한 축의 개수이다.

ML에서는 이러한 차원을 변수 즉, feature의 수라고 생각하면 이해가 편하다.

위 사진을 예로 들면 설명하면 이해가 더욱 빨라질 것 이다.

ML에서의 feature는 해당 데이터의 좌표값을 나타내기 위한 도구로도 사용된다.

좌측의 이미지에서 feature는 몸무게와 키 이렇게 2개의 feature이며, 우리는 이러한 형태를 2차원이라고 부른다.

하지만 여기에서 "나이"라는 feature를 추가하면 우측과 같다.

그리고 이때의 feature는 3개임으로 우리는 우측의 그림을 "3차원"이라고 부른다.

 

즉, 정리하자면 앞서 말했듯 feature의 수 == 차원의 수이다.

n개의 feature == n차원

으로 정의된다.

 

차원의 저주??

위 그림에서처럼 데이터에 대한 feature가 많을수록 보다 섬세하고 많은 정보들을 얻을 수 있기 마련이다.

하지만 ML에서는 그 feature의 수가 데이터의 수를 월등하게 앞서는 모습을 종종 볼 수 있다.

이러한 현상을 "차원의 저주"라고 부른다.

 

차원의 저주는 feature의 수 > data의 수일 때 발생하는데, 이러한 현상을 왜 차원의 '저주'라고 부를까??

그에 대한 해답은 공간과 밀접한 관련을 가진다.

 

예를 들어 우리가 6개의 과일에 대해 데이터를 수집한다고 가정하자.

A case에서는 6개의 과일들에 대해 3가지 조건을 가지고 데이터를 수집했다.

그렇다면 이때 feature는 3개이고, 대상이 되는 과일은 6개이다.

이때를 수식으로 얼마만큼의 공간을 data가 채우는지를 알아본다면 6/3 = 2 = 200%가 된다.

B case에서는 9가지 조건을 가지고 대상 과일들에 대한 데이터를 수집했다고 생각했을 때는 6/9 = 066 = 66%이며,

C case에서 27가지의 조건으로 데이터를 수집했다면 6/27=0.22=22%이다.

각각의 조건들은 전체 공간의 200%, 66%, 22%의 공간을 차지한다.

 

위의 사례처럼 수집되는 데이터의 수는 고정된 상태로 차원이 지속적으로 증가하는 것은 결국

데이터 공간을 채우는 데이터의 비율이 줄어들기 때문에 빈 공간이 많은 데이터를 생성하게 된다.

그리고 이렇게 빈 공간이 많은 데이터는 결국 과적합을 발생시킬 가능성이 커지며,

기본적으로 raw data의 모든 feature를 사용하는 것은 공간의 비효율을 야기한다.

즉, computing power와 memory의 측면에서 매우 비효율적인 구조가 되며

이는 곧 Model의 성능 저하로 귀결된다.

 

결국, feature의 수가 많다 == 차원이 커진다 == 분석을 위한 최소한의 필요 데이터 수가 많아진다.

 

그럼 우리는 이러한 문제를 해결하기 위해 어떻게 해야할까?

간단하게 '조사 대상이 되는 데이터의 수를 줄이기' vs '차원을 줄이기'로  이렇게 둘 중 하나를 선택하면 된다.

그리고 조사 대상이 되는 데이터의 수를 줄이는 것은 분석의 의미가 없기 때문에

우리는 차원 축소를 하여, 차원의 저주에 대한 문제를 해결한다.

 

차원 축소를 하는 이유

1. 노이즈 제거

2. 메모리 절약

3. 퍼포먼스 향상

4. 시각화 (3차원이 넘어간 차원은 눈으로 볼 수 없어서)

 

차원 축소 방법론

차원이 많을 때 생겨나는 문제를 정리하면 다음과 같다.

1. feature가 많을수록 예측 신뢰도가 떨어진다.

2. Overfitting의 발생

3. 개별 feature의 상관관계가 높아진다.

4. Computingpower와 Memory의 비효율

결국 다 비슷비슷한 문제들이다.

 

위와 같은 차원의 문제들을 차원의 저주라고 하며,

차원의 저주는 아래의 방법론들로 해결할 수 있다.

 

아래의 방법론에서 중심적으로 봐야할 것은

수식에 대한 디테일한 이해도 중요하겠지만, 컨셉에 대한 이해 즉,

왜 하는지

어떤 의미를 가지는지

를 이해하도록 하자.

 

1. 특이값 분해 (Singular Value Decomposition, SVD)

컨셉 : 원본 데이터의 차원에서 중요한 차원(feature)들만 남긴다(≒압축한다).

 

SVD의 컨셉은 주머니 속 내용물들의 가치로 생각하면 이해가 쉽다.

주머니 안에 50,000원 지폐, 500원, 모래, 보조배터리, 핸드폰, 밴드가 있다고 생각해보자.

주머니 안의 내용물에 대해 화폐가치를 기준으로 중요도를 정렬하면

핸드폰 > 보조배터리 > 5만원 > 5백원 > 밴드 > 모래가 될 것이다.

그리고 여기에서 중요한 3가지만 두고 다 주머니에서 뺀다라고 한다면

주머니 안에는 핸드폰, 보조배터리, 5만원권 이렇게 3개만 남을 것이다.

이때, 주머니 안에 있는 물건들의 화폐가치는 원래 주머니와 굉장히 유사하다는 것을 짚고 넘어가도록 하자.

 

이러한 컨셉을 데이터에 적용시켜보자

우리는 어떤 사람의 몸무게를 알고싶다.

이때, 주어진 데이터는 사람의 키, 나이, 1일 소모 칼로리, 근무 시간, 1일 섭취 칼로리 등의 데이터가 있다.

여기에서 SVD를 적용해서 중요한 3개를 제외한 나머지 feature를 버린다면,

데이터는 결국 키, 소모 칼로리, 섭취 칼로리가 남을 것 이다.

이처럼 중요한 feature를 제외한 feature를 drop하는 것이 SVD의 핵심 컨셉이다.

 

결국, SVD는 원본에서 중요한 feature로만 구성된 데이터를 만든다. 그렇기에 원본 데이터와 가치는 유사하다.

 

 

SVD의 사용에 대한 장단점은 아래와 같다.

장점

1. 차원 축소로 인해 computingpower와 memory에 우수하다.

2. overfitting을 피할 수 있다.

 

단점

1. 원본데이터에서 압축을 하기 때문에 데이터 손실이 발생할 수 있다. ( 원본 데이터 ≒ 가공 데이터)

 

 

SVD DeepDive ↓↓

더보기

필요 선수 지식 : 고유값, 고유벡터, 고유값 분해, 행렬의 직교

Key-word : 특이값, 분해, 스케일링 벡터, Truncated SVD

 

들어가기 앞서, 모든 행렬은 선형의 변환을 뜻한다.

 

1. 전체적인 SVD Concept

행렬에 있어서 SVD의 수학적 정의는 다음과 같다.

이를 좀 더 알기 쉽게 파해쳐보자.

 

복잡한 수식으로만 있는 상태보다는 뭔가 느낌이 조금은 온다.

여기에서 V*은 V에 대한 전치행렬이다.

 


전치행렬에 대한 설명은 기초적인 행렬의 개념이기 때문에, 아래의 GIF로 대체하겠다.


 

행렬 M (m x n)에 대해 각각 아래와 같이 정의한다.

 

이때,

U를 left singular vectors of A (AAT의 eigenvector) 라고 하며,

V를 right singular vectors of A (ATA의 eigenvector) 라고 한다.

 

SVD는 U, ∑, V*이렇게 세가지의 행렬을 이용하여 표현하는 방법이다. 

 

SVD에서의 중요한 컨셉은 m x n 크기의 행렬 M을 U, ∑, V*의 연산과정으로 정의하는 것에 있다.

행렬 M에 대한 U∑V*의 과정은 아래와 같다.

 

대략적인 작동의 원리를 알아보았으니 이제 하나하나 뜯어보도록 하자.

 

 

 

2. SVD의 이름의 의미

한국어로 '특이값 분해'라는 어려워보이는 이름이다.

 

그럼 특이값이 뭘까?

M = U ·· V*

위 식에서 ∑을 정의하길 대각행렬이라고 하였다.

그리고 대각행렬은 

5  0  0  0  0

0  3  0  0  0

0  0  7  0  0

0  0  0  4  0

0  0  0  0  9

위의 행렬처럼 대각선을 제외한 모든 값이 0인 행렬을 의미한다.

그리고 SVD에서의 특이값은 이러한 대각행렬의 원소값을 의미한다.

즉, 위의 행렬에서 5, 3, 7, 4, 9의 값들이 특이값인 것 이다.

 

이제 특이값이 뭔지 알았다.

그럼 어떻게 멀쩡한 행렬을 분해해서 재조립하는 과정을 통해서 압축을 할 수 있을까?

이름에서 분해의 의미와 원리를 알아볼 차례다.

SVD안에서, 대각행렬 ∑의 특징은 데이터를 중요한 순서로 내림차순하여 정렬한다는 것이다.

예를 들어, 위의 예시에서 중요도를 '숫자의 크기'라고 한다면 ∑는 이렇게 변화된다.

9  0  0  0  0

0  7  0  0  0

0  0  5  0  0

0  0  0  4  0

0  0  0  0  3

그리고 초반 시그마의 정의는 m x n의 크기를 가진 대각행렬이다.

그럼 우리는 m x n의 크기를 조절하는 방법을 통해서

'중요하다고 판단되는' 데이터만으로 만들어진 ∑를 만들 수 있다.

 

에컨대, ∑의 크기를 3 x 3으로 한다면

9  0  0

0  7  0

0  0  5

이렇게 되는 것이다.

 

 

3. SVD 수식의 목적

이제 M = U ·  · V*를 뜯어보도록 하자. SVD수식의 목적은 아래처럼 정의 가능하다.

 

 

SVD에서 제시되는 문제는

 

출처 : 나!

 

1. Vector로 행렬 A를 선형변환 할거다!

2.이때 그 크기는 σ1 , σ2 ···으로 바뀐다!

3.이 상황에서 orthogonal U를 찾을 수 있겠느냐??

이다. 그리고 여기에서 식을 변형시킨 것이

출처 : me!

 즉,  M = U ·  · V*가 되는것이다. (위의 사진으로는 A = U ·  · V*)

참고로 U와 V의 계산법은 아래와 같다.

출처 : 와타시!

 이후 1과 2에 각각 identity composition을 해주면 U와 V를 구할 수 있다.

이 지식을 가지고 SVD의 식을 본다면 결국 SVD는

∑의 특이값의 값을 기반으로 한 선형 변환의 스케일 변환이다.

그렇기 때문에 SVD에서 ∑를 스케일링 벡터라고 한다.

그리고 이처럼 m x n인 행렬 A를 SVD로 분해하는 것을 Full SVD라고 한다.

 

 

 

 

4.Thin SVD, Compacted SVD, Truncated SVD

하지만 현실에서는 Full SVD를 적용하는 경우는 드물다.

그렇기 때문에 일반적으로 Truncated SVD를 적용한다.

 

Thin SVD

 

1. ∑ 행렬의 아랫부분(비대각 파트, 모두 0인 파트)제거

2. 이에 대응하는 U의 원소를 제거

 

Compacted SVD

 

1. ∑행렬의 아랫부분 + 0인 부분 모두 제거

2. 이에 대응하는 U와 V의 원소를 제거

→ 특이값이 양수인 부분만을 골라내게 됨

 

Truncated SVD

 

1. ∑행렬에서 특이값(대각원소) t개를 제외하고 제거 (∑의 크기는 t x t가 됨)

2. 제거된 ∑에 대응되는 U와 V의 원소도 함께 제거

∑행렬에서 상위 t개만 골라낸 형태 (SVD를 처음 설명할 때 사용한 예시의 형태)

 

즉, 대각 원소 중 상위 t개만 추출하고, 여기에 대응하는 U와 V에 있는 원소도 함께 제거하는 것이다.

일반적으로 "SVD를 한다"라고 한다면 Truncated SVD를 하는 것이다.


 

 

 

2. 주성분 분석 (Principal Component Analysis, PCA)

컨셉 : 다차원 데이터를 설명할 수 있는 핵심 축을 찾는다면, 작은 차원으로 모든 데이터를 설명할 수 있다.

 

SDA를 이해하고 온 당신이라면 PCA는 so-ez할 것이다.

 

이해를 돕기위해 정사영이라는 개념만 사진으로 설명한 뒤, 바로 PCA를 어떻게 하는지 알아보겠다.

정사영 예시

 

방법

1. 데이터의 중심을 정한다.

 

2. 데이터의 중심을 (0,0)으로 이동

 

3. 원점을 지나는 아무 직선을 그린다.

 

 

4. 공분산의 고유 값이 가장 큰 직선을 찾을때까지 반복한다.  (변동성이 최대가 되는 축을 찾는다. = 분산이 가장 큰 축)

이 때, 데이터의 행렬 분해가 발생하여,

고유 값을 추출 → 유의미한 행렬을 선형로 변환의 과정을 반복하여 가장 큰 고유값을 찾는다.

 

4. 기존의 feature를 삭제하고, 새로 찾은 feature로 분석을 한다.

 

 

중심이 되는 축을 두개 찾아 분석하기도 한다.

 

끄-읏

 

3. 선형 판별 분석 (Linear Discriminant Analysis, LDA)

컨셉 : PCA와 유사 하지만 LDA는 지도학습의 Classification에서 사용됨

 

LDA에서 좋은 분류 방법은 아래와 같은 방법으로 이해할 수 있다.

좌측(A) 우측(B)

 

A와 B중에서 어떤 것이 각 데이터를 잘 분리한 차원축소일까?

우측의 B그래프가 정답이다.

데이터값에 있는 선을 새로운 feature라고 한다면, B에 있는 직선이 데이터의 분류를 더욱 용이하게 하기 때문이다.

이처럼, LDA에서의 좋은 feafure는 각 데이터의 집합(클래스)의 분리가 최대화되는 것을 의미한다.

 

하지만 이때, 각 feature의 군집 모양에 따라 LDA의 한계가 나타나기도 한다.

 

 

 

4.  독립 성분 분석 (Independent Componenet Analysis, ICA)

컨셉 : 각 데이터의 독립적인 축을 알아낸다.

 

통계학적 관점으로, data는 크게 유의미한 의미를 가지는 Signal과 Noise로 분류된다.

그리고 ICA는 Noise를 걷어 내기 위한 방법으로, 활용하면 소리를 구분할 수 있다.

PCA와 마찬가지로 기저벡터를 갖는다.

그렇기에 새로운 feature를 갖는데, ICA의 차원축소는

각 feature가 다중공선성을 가질 때 큰 효과를 낸다.

다중공선성을 가지는 feature들의 독립적인 축을 제시하는 것을 통해 차원축소를 한다.

그리고 이렇게 만들어진 축은 이전에 무수히 많은 feature들의 독립성을 가장 잘 설명하는 축이 된다.

 

 

"이해는 하였으나, 밤샘 블로깅의 폐해로 정신이 맑지 않다."

증명은 했으나, 여백이 부족하다.

 

따라서, ICA에 대해서는 추후 아래의 논문을 대상으로 한 리뷰로 자세하게 알아보도록 하겠다.

황석영, EGG 데이터를 활용한 ICA 알고리즘들의 비교, 2020 중앙대학교

 

 

 

5. PCA, LDA, SVD, ICA 비교

[PCA & LDA]

PCA는 데이터의 최적 표현을 위해 데이터를 축소하는 방법으로

그렇기 때문에 종합적인 전체 데이터를 잘 설명하는 축을 찾는 것이 목표이다.

 

LDA는 데이터의 최적 분류를 위해 데이터를 축소하는 방법으로

클래스 레이블을 고려하여, 분류를 잘 해주는 축을 찾는 것이 목표이다.

 

 

[PCA & SVD]

"데이터들의 '대표성'을 기준으로 차원을 축소한다" 라는 관점에서 PCA와 SVD는

굉장히 유사하며, 실질적으로도 큰 유사성을 가진다.

그렇다면 PCA와 SVD는어떻게 구분할 수 있을까?

 

SDA는 데이터를 기반으로 주요 정보를 요약하기 때문에,

데이터들의 핵심이 되는 정보를 얻는데 유용하다.

 

PCA는 좌표를 이용하여 통계적 변동을 나타내기 때문에

통계적 패턴을 찾는데 유용한 방법론이다.

 

그렇기 때문에,

SVD는 분류에 있어서 '알고리즘'으로 분류가 되며

PCA는 '차원 축소의 방법론으로 분류'가 된다.

SVD를 이용한 차원 축소는 데이터를 분해만, PCA는 데이터를 측정한다.

 

또한, SVD에서 right singular vector를 가져오면 PCA에서의 principal basis(주성분 축)가 된다. (참고)

 

 

[PCA & ICA]

아래의 사진 한장으로 차이점에 대한 설명이 가능하다.

 

PCA와 ICA는 모두 주성분을 이용한다는 점에서 같지만, 찾고자 하는 축의 성질은 전혀 다르다.

 

PCA는 각 데이터의 특징을 나타낼 수 있는 중심축을 찾는 것이기 때문에 '분산'과 연관된 축이다.

ICA는 각 데이터들의 독립적인 분포를 확인하기 위한 방법으로, '분리'를 위한 방법론이다.

 

 


정리

차원의 저주 : 너무 많은 차원(feature)로 인하여 모델의 성능이 저하되는 현상

 

차원축소 : 차원의 저주를 해결하기 위한 방법. 모델 성능의 향상을 목표로 한다.

 

SVD

중요하다 판단되는 feature들만 보존하는 방법. 원본 데이터와 유사성을 가지지만 데이터의 누락이 발생할 수 있다.

정방행렬이 나이어도 할 수 있게 만드는 알고리즘

 

PCA

n차원 데이터들의 '대표축'을 찾아 새로운 feature를 만드는 방법. 

차원들이 직교하도록 최대 분산 축을 찾는다.

 

LDA

데이터들을 분류 해주기 위해 정사영하여 최적의 분류 feature를 찾는 방법. 

 

ICA

군집된 데이터들의 독립적인 대표축을 찾는 방법.

 


Reference

 

[Blog]

머신러닝 - 20. 특이값 분해(SVD)

Machine Learning — Singular Value Decomposition (SVD) & Principal Component Analysis (PCA)

Relationship between SVD and PCA. How to use SVD to perform PCA?

[선형대수학#6] 주성분 분석(PCA)의 이해와 활용

 

[강의자료]

패턴인식 개론 - 선형 판별 분석법(LDA)

 

[Youtube]

특이값 분해(SVD)의 기하학적 의미와 활용 소개

SVD(Singular Value Decomposition)이해하기 쉽게 설명드려요!


질문 및 틀린 내용에 대한 첨언은 언제나 환영입니다.

추가적인 지식 공유를 해주시면 너무나도 감사드리고,

질문하신 내용에 대해서 모르는 부분이 있으면 공부를 해서 답변을 달아보도록 하겠습니다!