훈련을 하다보면 차원이 굉장히 높은 경우가 있는데 이런 경우 훈련을 느리게 하기도하고 정확한 결과가 안나오기도 한다. 이를 차원의 저주(curse of dimensionality)라고 부른다.
차원을 줄이는 것은 정보의 일부가 유실된다는 단점이 있지만, 데이터 시각와 같은경우에서는 필수적이라고 할수있다.
시각화를 통해 데이터의 패턴을 감지하는것도 중요하기때문에 차원축소는 중요하다.
8.1 차원의 저주
차원의 저주가 일어나는 이유에 대해 먼저 보자. 차원이 높으면 일단 데이터 간의 거리가 굉장히 멀어진다. 2차원에서 2점의 차이와 3차원에서의 점의 거리를 생각해보면 된다.
데이터 간의 거리가 높으면 뭐가 달라지냐, 같은 클래스임에도 거리가 멀면 같은 클래스라는 생각을 하기 힘들게 된다. 또 새로운 샘플이 들어와도 거리가 멀면 같은 클래스라는 생각을 하기가 힘들어진다. 즉 차원이 클수록 오버피팅의 위험이 커진다.
사실 거리가 얼마나 크든 데이터가 많으면 해결되는 문제이기는 하다 하지만 필요한 데이터가 차원에 따라 기하급수적으로 늘어나기에 무한대의 데이터를 가지지 않는이상 차원저주 현상을 극복해야 한다.
5.2 차원 축소를 위한 접근 방법
투영과 매니폴드를 한번 보자
8.2.1 투영
투영은 쉽게 생각하면 어떠한 공간으로 수직으로 떨어졌을 때의 부분으로 보낸다고 생각하면 된다.
이 예제는 3차원 공간의 데이터를 2차원으로 투영한 것이다. 고차원 -> 저차원 부분공간(subspace)
하지만 차원축소할때 투영은 항상 좋은게 아니다 그 예로 스위스 롤(swiss roll)을 보자.
왼쪽이 원래 의 데이터고 2d로 했을때는 하나는 x3를 삭제한것 이다 보면 잘 분류가 되려면 오른쪽 처럼 되야하는데 그렇게 되질 못했다.
8.2.2 매니폴드 학습
위에있는 스위스 롤은 매니폴드의 예이다. 2D 매니폴드는 고차원에 휘어지거나 뒤틀린 2D 모양이다.
일반적으로는 d차원 매니폴드는 국부적으로 d 차원 초평면으로 보일수 있는 n 차원 공간의 일부이다.(d<n)
차원축소알고리즘이 훈련샘플이 놓여있는 매니폴드를 모델링하는 식으로 작동한다.
이를 매니폴드 학습 이라고 한다. 고차원의 데이터셋이 더 낮은 저차원 매니폴드에 가깝게 놓여있다는 매니폴드 가정 또느 매니폴드 가설에 근거한다.
8.3 PCA
주성분분석(principal component analysis) PCA 라 부르면 가장 인기있는 차원축소 알고리즘이다. 이는 데이터를 초평면에 정의한후 데이터를 평면에 투영시키는 방식이다.
8.3.1 분산 보존
바로 저차원으로 투영하기전에 어딜로 투영할 것인지 정해야 한다.
보면 c1 으로 투영한게 분산을 최대한으로 유지하고 있다. 즉 데이터 손실이 가장 적다는 뜻이므로 투영하기 가장 적절하다고 할수있다. 이를 주 성분 이라고 한다.
8.3.2 주성분
PCA 는 분산이 최대인 축을 찾는다. 그리고 그 축에 분산을 최대한으로 유지하며 수직은 축을을 또 찾고 이런식으로 순차적으로 축을 찾는다. 이런 축을 i 번쨰 주성분 (principal component) 라고 부른다.
그럼 주성분은 어떤 방식으로 찾을까? SVD 즉 특이값 분해로 찾는데 이를이용하면 찾을 수 있다.
(이건 선형대수에서 확인)
X 라는 데이터셋을 3개의 행렬곱셈의 형태로 나눈다. 이러면 V에 찾고하자는 모든 주성분의 단위벡터가 들어있다.
이때 고유값이 가장 큰 얘에 해당되는 벡터가 주 성분이다.
8.3.3 d 차원으로 투영하기
이제 추성분을 추출했으니 d 개의 주성분으로 투영을 하면 d 차원으로 축소를 시킬수 있다.
초평면에 투영된 d 차원으로 축소된 데이터 X^d-proj 는 아래 식을 쓰면 된다.
8.3.4 사이킷런 사용하기
pass
8.3.5 설명된 분산의 비율
explained_variance_ratio_ 에는 저장된 주성분의 설명된 분산의 비율(explained variance ratio) 가있다. 즉 높은걸 선택하는게 data loss 를 최소화 할 수 있다.
8.3.6 적절한 차원 수 선택하기
간단한 방법은 분산이 충분할 때까지 차원을 축소하면 된다 (예를 들어 95%). 다만 시각화를 해야한다면 2차원이나 3차원 까지 해줘야 일반적으로 시각화가 가능하다.
또 다른 방법은 설명된 분산을 차원수에 대한 함수로 그리면 된다. 그래프에서 분산이 빠른 성장이 멈추는 변곡점이 있는데 이 지점에서는 data loss 가 크지 않다.
8.3.7 압축을 위한 PCA
PCA 를 하면 dataset 의 크기 자체가 줄어든다. 이는 SVM 같은 모델에서 속도를 많이 올려준다. 또 압축된 상태에서 원본 크기로 돌릴수도 있는데 원래 크기로 다시 늘린다고 원본과 같을수는 없다. 데이터 손실은 발생했기 때문 이때 원본데이터와의 차이를 재구성 오차 (reconstruction error) 라고 한다.
역변환 방법도 간단하다.
8.3.8 랜덤 PCA
svd_solver 을 "randomized" 로 하면 랜덤 PCA 를 한다. 처음 d 개의 주성분의 근삿값을 빠르게 찾는 방법이다.
SVD 를 사용하면 O(m*n^2) + O(n^3) 인 반면 randomized PCA 는 O(m*d^2)+O(d^3) 이다.
즉 찾으려는 d 가 n 보다 많이 작으면 SVD 보다 훨씬 빠르다.
8.3.9 점진적 PCA
PCA 는 SVD 가 필요해서 전체 훈련세트를 메모리에 올려야하는 단점이 있다. 이를 극복한게 점진적 PCA(incremental PCA) 인데 dataset 을 미니배치로 나눈뒤 IPCA 알고리즘에 한번에 하나씩 주입하는 방식이다. 즉 데이터가 클때도 사용할수 있고 온라인(실시간) 으로도 사용할수 있다는 장점이 있다.
다른 방법은 memmap 파이썬 클래스를 사용해 하드 디스크의 이진파일에 저장된 매우 큰 배열을 메모리에 들어있는것처럼 사용하는 방법이다.
8.4 커널 PCA
SVM 에서 고차원 매핑후 나누는 커널트릭과같이 고차원에서는 선형경계는 저차원에서 복잡한 비선형이 된다.
같은 기법을 이요해 PCA 에서는 목잡한 비선형 투형을 할 수 있다. 이를 커널 PCA (kernel PCA) -> KPCA 라고 한다.
왼쪽부터 스위스 롤을 선형커널(PCA), RBF 커널, 시그모이드 커널을 사용해 2차원으로 축소시킨 모습이다.
8.4.1 커널 선택과 하이퍼파라미터 튜닝
kPCA 는 비지도 학습이기에 어떤 커널이 좋을지, 어떤 하이퍼파라미터가 좋을지 딱히 정해진 기준이 없다. 근데 차원축소는 전처리 단계로 많이 활용되므로 그리드 탐색을 사용해 성능이 가장 좋은 커널과 하이퍼파라미터를 선택할 수 있다.
책에서 사용한 예제는 2단계의 파이프라인을 맘ㄴ드는데 kPCA를 사용해 차원을 2차원으로 축소하고 분류를 위해 로지스틱 회귀를 적용한다. 그리고 마지막 단계에서 GridSearchCV(그리디 cross validation)를 사용해 kPCA의 가장좋은 커널과 gamma값을 찾는다.
가장 낮은 재구성 오차를 만드는 커널과 하이퍼파라미터를 선택하는 방식도 있다. 다만 재구성이 어렵다.
커널트릭 덕분에 이변환은 특성맵(feature map)을 사용하여 dataset을 무한차원의 특성공간으로 매핑한 다음 변환된 데이터 셋을 선형 PCA를 사용해 2D로 투영한것과 수학적으로 동일하다.
재구성시 원본공간이 아닌 특성 공간에 놓이게 되는데 이는 무한차원 이기에 에러등 을 계산할수 없다. 대신 원본을 특성공강에 매핑된 상태에서는 찾을수 있는데 이를 재구성 원상(pre-image) 라고함. 이때는 제곱거리를 측정할 수 있고 이를 최소화나는 커널과 하이퍼 파라미터를 찾으면 된다.
8.5 LLE (locally linear embedding)
LLE 는 지역 선형 임베딩 이라고 하며 강력한 비선형 차원축소(nonlinear dimensionality reduction) NLDR 기술이다.
투영에 의존하지않는 매니폴드 학습이다.
LLE 는 훈련샘플이 가장 가까운 이웃에 얼마나 선형적으로 연관되어있는지 측정한 후 국부적인 관계가 가장 잘 보종되는 훈련세트의 저차원 표현을 찾는다. outlier 가 너무 많지 않은경우 잘 작동된다.
작동 방식
그러므로 LLE 의 첫 단계는 아래식의 제한이 있는 최적화 문제가 된다. (W 는 wij의 가중치를 담은 행렬이다.)
두번째 제약은 가중치를 단순히 정규화 하는 것이다.
위 단계를 거치며 W 는 훈련샘플 사이에 이쓴ㄴ 지역 선형관계를 담고 있다.
이제 두번째 단계는 이 관계가 보존디도록 훈련샘플을 d 차원 공간으로 매핑 (d<n)
만약 z 가 d 차원 공간에서 x 의 상이라면 가능한 z 와 sigma(w,z) 사이의 거리가 최고화 되어야 한다.
이는 아래의 제약이 없는 최적화 문제러 바꿔 준다.
첫 단계와 비슷해 보이지만 샘플을 고정하고 최적의 가중치를 찾는대신 가중치를 고정하고 저차원의 공간에서 샘플 이미지의 최적 위치를 찾는 것이다. ( Z 는 모든 z 를 포함하는 행렬)
사이킷런에서 알고리즘의 시간복잡도를 보면 O(m log(m) n log(k)), 가중치 최적화에 O(mnk^3), 저차원 표현을 만드는데 O(dm^2) 이다.
즉 마지막항의 m^2 떄문에 대량의 데이터셋에서는 쓰기 힘들다.
8.6 다른 차원 축소 기법
1. 랜덤 투영 (random projection)
말그대로 저차원으로 랜덤 투영을 한다. 신기하게도 수학적으로 증명한 것처럼 투영후 거리보존이 잘 된다.
2. 다차원 스케일링 (multidimensional scaling) -> MDS
샘플간 거리를 보존하면서 차원 축소
3. isomap
각 샘플을 가장 가까운 이웃과 연결하는 식으로 그래프를 만든다. 샘플간 지오데식 거리(geodesic distance)를 유지하면서 차원 축소.
지오데식 거리는 두 노드 사이의 최단경로를 이루는 노드의 수이다.
4. t-SNE (t-distributed stochastic neighbor embedding)
비슷한건 가까이 아닌건 멀리 떨어지도록하면서 차원을 축소. 주로 시각화에 많이 사용
5. 선형 판별 분석 (Linear Discriminant Analysis) -> LDA
LDA 는 분류 알고리즘이다. 이때 클래스 사이 가장잘 구분하는 축을 학습한다. 이 축을 초평면으로 활용한다. SVM 같은데 사용하면 효과가 좋다.
'공부 > 핸즈온 머신러닝' 카테고리의 다른 글
핸즈온 머신러닝 2 chap 9 비지도 학습 (0) | 2021.02.26 |
---|---|
핸즈온 머신러닝 2 chap 7 앙상블 학습과 랜덤 포레스트 (0) | 2021.02.25 |
핸즈온 머신러닝 2 chap 6 decision tree (0) | 2021.02.24 |
SVM 추가 (0) | 2021.02.23 |
핸즈온 머신러닝 2 chap 5 SVM (0) | 2021.02.23 |