차원축소 (Demension Reduction)

2020. 12. 14. 21:35machine learning

728x90

비지도 학습 중 하나로 , 다차원의 dataset에서 차원을 축소해 새로운 dataset을 생성하는 것입니다.

다차원이면 data point간 거리가 기하급수적으로 멀어지고 sparse한 구조가 되므로 예측 신뢰도가 떨어집니다. 

개별 피쳐간 상관관계가 높을 가능성이 커지기 때문입니다.

 

개별피쳐간 상관관계가 높다 = 다중공선성 존재

 

선형모델에서는 다중공선성 (Multicollinearity)이 존재하면 모델의 예측 성능이 떨어집니다.

이럴 때 차원을 축소시켜주면 직관적인 해석이 가능해집니다. 즉, 시각적표현이나 학습 처리가 편리해진다는 것 입니다.

차원축소에는 크게 Feature Selection, Feature Extraction이 있습니다.

Feature Selection 특정 feature에 종속성 강한 불필요한 feature을 제거
= 주요 feature만 추출
Feature Extraction 기존 feature을 저차원의 중요 feature로 압축해서 추출
=
기존 feature와는 완전히 다른 값.
단순한 압축이 아닌 feature을 함축적으로 설명해주는 다른공간으로 mapping해 추출하는 것
=
잠재적 요소 추출

이미지에 사용하면 overfitting을 줄일 수 있고
텍스트에 사용하면 semantic이나 topic같은 잠재요소를 알 수 있습니다.

1. PCA

변수간 상관관계를 이용해 Principal Component(주성분)을 추출합니다. 컴퓨터 비전에 많이 사용됩니다.

정보유실을 최소화하기 위해 높은 분산을 갖는 데이터 축으로 차원축소를 진행합니다.

PCA 간단 설명 그림

선형대수 관점에서의 PCA는 이렇습니다.

너무 어렵쥬...선형대수는 너무어려웡 저때부터 고등교육에서 행렬이 빠졌지뭐에용

최종적으로 PCA step을 정리!

1. 입력 dataset의 공분산 행렬을 생성

2. 공분산 행렬의 고유벡터, 고유값 계산

3. 고유값 큰 순으로 k개(PCA변환차수)만큼 고유벡터 추출

4. 추출된 고유벡터로 입력데이터 변환

 

2. LDA (Linear Discriminant Analysis)

지도학습 classification 사용이 쉽도록 개별 class 분별 기준을 최대한 유지합니다. 즉, 결정값 class를 최대한 분리할 수 있는 축을 찾습니다. 변동성 가장 큰 쪽을 찾는 PCA와 비교되죠?

LDA step

1. within 분산, between분산 행렬을 구한다. (class별 개별 feature의 mean vector기반)

2. 그 행렬들을 고유벡터로 분해

3. 고유값 큰 순 k(LDA 변환 차수)개 고유벡터 추출

4. 추출된 고유벡터 이용해 새롭게 입력데이터 변환

 

3. SVD ( Singular Value Decomposition )

PCA와 유사하지만 행과 열의 크기가 다른 행렬에도 적용할 수 있다.

특이값 분해를 이용한다. 

출처 https://www.slideshare.net/madvirus/pca-svd

 ※ Trunced SVD : scipy만 지원 : 대각원소 중 상위 몇개 추출해 대응하는 U와 V 원소 함께 제거. 정확하게 원복은 안되지만 압축에 비해 근사가 잘 된다.

PCA와 SVD비교

4. NMF(None-Negative Matrix Factorization)

Truncated SVD같은 낮은 Rank통한 행렬근사를 해줍니다. 원본행렬 내 모든 원소값이 0이상이라면, 좀 더 간단하게 두개의 기반양수행렬로 분해 가능합니다.

차원축소는 feature 수 감소보다는 잠재적 요소 추출에 큰 의미가 있습니다.

728x90

'machine learning' 카테고리의 다른 글

Clustering(군집화)  (0) 2020.12.15
Regression (회귀)  (0) 2020.12.14
Classification  (0) 2020.12.14
머신러닝 기초 지식  (0) 2020.12.14