차원축소

장우솔·2022년 1월 5일
1

머신러닝

목록 보기
2/2

차원축소

많은 피처로 구성된 데이터세트의 경우, 상대적으로 적은 차원에서 학습된 모델보다 예측 신뢰도가 떨어진다. 또한 개별 피처간에 상관관계가 높을 가능성도 크다. 선형회귀와 같은 선형 모델에서는 입력 변수 간의 상관관계가 높을 경우 이로 인한 다중공선성 문제로 모델의 예측 성능이 저하된다.
다차원의 피처를 차원 축소해 더욱 직관적으로 데이터를 해석할 수 있다. 차원 축소를 통해 시각적으로 데이터를 압축해서 표현할 수 있다.

다중공선성 : 통계학의 회귀분석에서 독립변수들 간의 강한 상관관계가 나타나는 문제
회귀분석의 가정 (선형, 독립성, 등분산, 정규)에서 피처 간에 독립성을 만족하지 못할 경우 발생한다.




차원축소 방법

피처 선택 : 특정 피처에 종속성이 강한 불필요한 피처는 아예 제거하고 데이터 특징을 잘 나타내는 주요 피처만 선택하는 방법
피처 추출 : 기존 피처 단순 압축이 아닌, 피처를 함축적으로 더 잘 설명할 수 있는 다른 공간으로 매핑해 추출하는 것. 잠재적인 요소를 추출하는 것을 의미한다.


<피처선택방법>

1. filter : 주관적 / 정량적 기준에 의해서 각 독립변수들을 평가 & 선택한다.

각 독립변수와 종속변수들을 1:1로 매칭시키면서 상관관계를 분석하는 방법 cor 활용이 가장 일반적이며 도메인지식을 가진 사용자가 주관적인 판단하에 변수 결정하는 방법 +다중공선성 판단하는 효과도 있다.



2. wrapper : 독립변수를 달리해서 모형을 만들고, 예측성능을 참고하여 독립변수들을 선택한다.

어떤 조합으로 했을 때 회귀모형의 성능이 좋은지 각각 평가하고, 평가결과에 따라 선택하거나 버리는 전략을 취한다. 정량적인 모형평가척도가 필요하다.(r-square, mse, cp 등)
Stepwise regression(단계적 회귀분석)을 실행해서 변수 결정한다.(전진,후진,단계적 방법)


3. embedded : 예측모형 최적화 과정(회귀계수 추정 과정)에서 각 독립변수가 도출되도록 한다.

회귀모형을 추정한다는 것은 회귀계수를 추정하는 것이고, 회귀계수는 최소자승법에 의해서 오차를 최소화하는 함수를 만족시킨다. 이렇게 특정 함수를 최소화 혹은 최대화하는 과정을 최적화(Optimize)과정이라 하는데, 이 최적화 과정을 변형시켜서 유효한 독립변수를 선택하고자 하는 방법이 Embedded이다.

최소자승법은 분산이 큰 최적화방법이다. 오차를 최소화하는 것을 목적으로 회귀계수를 추정하는 것이다. 그치만 분산이 커서 산포가 넓고, 실제환경에서는 잘 적중하지 못할 수 있다. (=overfitting)

라쏘와 릿지를 적용하기 위해서는 모든 변수를 사전에 normalize해주어야한다. 여러 회귀계수가 비슷하게 감소되어야하기 때문이다.
λ는 하이퍼파라미터로 사용자가 지정해 줘야 한다.

1) 라쏘

회귀계수의 절대값을 일정 수준 내로 들어오게 하는것이 제약조건이다.
LASSO는 오차와 함께 회귀계수의 절대값도 함께 최소화하는 목적함수를 가진다. 이렇게 했을 때 아무래도 오차를 최소화 하는 것을 방해하는 제약조건이 포함되어 있기 때문에 bias는 늘어날 수 밖에 없지만, variance를 낮춰주는 효과를 가질 수 있다.
회귀계수가 특정 시점이 되면 0으로 수렴하면서 몇 개의 변수는 사라지기에 변수선택법으로도 활용한다.

2) 릿지

LASSO처럼 β 절대값에 제약을 주는 것이 아니라, β2 값에 제약을 준다. 회귀계수가 삭제되는 것이 아니라 매우 작은 값을 가진다. OLS가 가진 variance를 낮추는 대신 bias를 증가시키는 결과를 갖는다.





<피처추출방법>

1. PCA(Principle Component Analysis)

원 변수를 이용해서 새로운 변수를 만들기 때문에 정보의 손실없이 차원을 축소할 수 있는 효과적인 방법이다.

변수 간의 존재하는 상관관계를 이용해 주성분을 추출하여 차원을 축소하는 기법으로 각 변수가 완전히 독립이면 효과가 없지만 관계가 있으면 있을수록 효과를 발휘한다. 새로운 차원(변수)은 기존의 변수의 weighted sum으로 표현되기 때문에 기존 독립변수간의 상관관계가 필요하다. 그리고 새로생긴 변수들은 서로 상관관계가 없도록(직교하도록) 만든다.
다만 새로운 변수 정의했기 때문에 문제의 원인을 추론하기가 굉장히 어려워진다.

기존 데이터의 정보 유실이 최소화하기 위해 가장 높은 분산을 가지는 데이터 축을 찾아 이 축으로 차원을 축소한다. 이것이 PCA의 주성분이 된다.

입력 데이터의 공분산 행렬이 고유벡터와 고유값으로 분해되며, 이렇게 분해된 고유벡터를 이용해 입력 데이터를 선형 변환하는 방식. 입력데이터의 변동성이 가장 큰 축을 찾는다.
얼굴인식의 경우 PCA 변환으로 원본 얼굴 이미지를 변환해 사용한다.



예시

from skelearn.decomposition import PCA
pca=PCA(n_components=2) # n_components=PCA로 변환할 차원의 수
pca.fit(data)
data_pca=pca.transfrom(data)



2. PLS(Partial Least Squares)

PCA는 독립변수 X만 가지고 새로운 차원인 T를 도출한다면, PLS는 Y를 함께 고려한다.
PLS에서는 변수 중요도를 구할 수 있다. VIP(Variable Importance in Projection) 수식을 살펴보면, 만든 변수의 분산과 잠재변수-원변수의 상관성의 제곱을 곱해서 계산을 하면 VIP가 나온다. VIP가 1보다 크면 중요하다고 판단한다.





결론

예측이 목적이라면 다중공선성을 어느정도 무시해도 괜찮지만 변수들간 중요도를 파악하기 어렵다. 현실에서 변수들간의 중요도에 대한 근거가 없으면 예측성능이 높아도 적용하는데 위험부담이있다. 라쏘, 릿지, PLS는 어떤 변수가 중요한지 찾고자하는 목적이 있기 때문에 알아두면 좋을 것 같다.






그 밖에 대표적인 차원 축소 알고리즘



1. LDA

지도학습 분류에서 사용하기 쉽도록 개별 클래스를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소한다. 입력 데이터의 결정 값 클래스를 최대한으로 분리할 수 있는 축을 찾는다.
클래스 간 분산은 최대한 크게, 클래스 내부분산은 최대한 작게 가져간다.
지도학습이기에 클래스의 결정값이 변환 시에(fit 할 때) 필요하다.



예시

from skelearn.discriminant_analysis import LinearDiscriminantAnalysis
lda=LinearDiscriminantAnalysis(n_components=2) # n_components=lda로 변환할 차원의 수
lda.fit(data,target)
data_lda=lda.transfrom(data)



2. SVD

정방행렬 뿐만 아니라(PCA는 정방행렬만 가능) 행과 열의 크기가 다른 행렬에도 적용할 수 있다. 또한 희소행렬에 대한 변환도 가능하다.
이미지 압축을 통한 패턴 인식과 신호 처리 분야에 사용된다.


3. NMP

원본 행렬 내의 모든 원소 값이 모두 양수라는 게 보장되면 두 개의 기반 양수행렬로 분해될 수 있는 기법이다, 예를 들어, 4X6 원본 행렬은 4X2 2X6으로 분해될 수 있다. 분해된 행렬은 잠재 요소를 특성으로 가진다.
(영화) 추천 영역에 활발하게 적용된다.



예시

from skelearn.decomposition import NMP
nmp=NMP(n_components=2) # n_components=NMP로 변환할 차원의 수
nmp.fit(data)
data_nmp=nmp.transfrom(data)



4. CA(대응분석)

수치형이 아닌 명목형일시에는 대응분석을 실시한다.
대응분석은 다변량 범주형 자료를 대상으로 하는 탐색적 자료분석이다. 변수 간 상관관계 정보뿐만 아니라 변수가 갖는 범주들이 어떤 패턴으로 관련되어 있는지 알 수 있다. 대응분석은 행프로파일정보와 카이제곱거리를 이용한다는 점에서 유클리디안 거리를 이용하는 주성분분석과 차이가 있다.

  • 카이제곱거리는 대부분의 장소에서 출현빈도가 낮은 특정한 종이 어느 특정 장소에서 집중적으로 관찰되면, 해당 종의 출현이 매우 드문 현상임에도 특정 장소에서 많이 관찰 되었기에 그장소에 더 높은 가중치를 준다는 의미를 지니고 있다.

어떤 분석을 한다기보단, 데이터에 대한 탐색적 결과를 보기 위해 사전 분석으로 대응분석을 사용할 수 있다.

PCA와 비슷하며 그림을 통해 봤을 때 범주들이 서로 가까이 위치할수록 유사도가 높다.
그래프가 대칭 biplot의 경우 행간 또는 열간 사이의 거리만 유의미하게 해석되며 행과 열 사이의 거리는 유의미하지 않아 대략적인 관계만 파악할 수 있다. 행과 열사이의 거리를 유의미하게 해석하기 위해서는 비대칭 biplot을 이용해야한다.

대응분석 순서
  1. 분할표를 보고, 행과 열의 백분율(Profile)을 구한다.

  2. 주성분 분석을 통해 원 자료의 변동을 최대로하는 차원 축을 찾아 범주를 맵핑한다. 주성분 결과에서 Eigenvalue은 차원이 가진 상대적인 변동을 의미하며 값이 클수록 해당 주성분이 중요한 역할임을 의미한다. individual은 전체고유값에서 해당 고유값을 나눈 것으로 전체 변동에 대한 각 축의 설명력이다.

    대응분석은 행프로파일(row profile) 정보와 카이제곱거리(chi-square distance)를 이용한다는 점에서 유클리디안 거리(euclidean distance)를 이용하는 주성분분석과는 차이가 있다. 생태통계학에서 카이제곱거리는, 대부분의 장소에서 출현빈도가 낮은 특정한 종이 어느 특정 장소에서 집중적으로 관찰되었다면, 해당 종의 관찰(혹은 발현)이 매우 드문 현상임에도 불구하고 특정 장소에서 많이 관찰되었기에 그 장소에 더 높은 가중치를 준다는 의미를 지니고 있다.

대응분석 결과
  • Axis1, Axis2 : 주성분 축을 의미한다.

  • Quality : 제1축과 2축의 COR 값의 합으로 나타나며, 프로파일에서 변동의 비율을 의미한다.

  • Mass : 전체 테이블에서 해당 범주가 가지는 비율을 의미한다. ex) Mass(SM) = 11/193 = 0/57

  • Inertia : 전체 테이블에 대한 관성(카이제곱 통계량/N)에서 해당 프로파일로 인한 관성의 비율이다. 관성의 또 다른 해석은 프로파일과 평균 프로파일 사이의 카이제곱 거리의 가중 평균으로 데이터 행렬의 전체 분산은 관성을 통해 측정된다.

  • Factor : 축에 대한 해당 범주의 좌표(coordinate)이다.

  • COR : 프로파일과 축사이의 상관관계(correlation)를 의미하며, 어떤 축이 해당 프로파일을 잘 나타내는지 알 수 있다.

  • CTR : 프로파일이 축에 기여한 정도(contribution)를 나타내며, 프로파일에 의해 설명된 축에서 변동의 비율이다.

그림에서 행간/열간 프로파일 사이 거리는 카이제곱 거리이며, 프로파일이 가까이 위치할수록 그들간의 패턴이 비슷하다.













공모전에서 대부분 순서형, 범주형 변수인 데이터를 분석하기 위해 전처리 해주는 과정에서 차원축소를 통해 데이터 크기를 줄여보려고 했지만 아무래도 데이터가 엄청나게 많은 양이 아닐뿐더러 전체 속성을 반영하지 않았기에 예측성능은 저하됐다. 또한 데이터가 의미있는 변수명이 아니였으며 EDA를 통해 봤을 때도 변수의 속성이 제대로 파악되지않았다. 데이터 특성에 맞게 군집화가 이루어지지않는다면 의미 없는 군집 결과가 나오기에 군집화도 불가능해서 아쉬웠다.






참고
blog

profile
공부한 것들을 정리하는 블로그

1개의 댓글

comment-user-thumbnail
2022년 11월 9일

정리를 굉장히 잘해주셨네요 감사합니다!

답글 달기