[분류 예측 스터디] 핸즈온 8장 차원축소
작성자 : 김제성
1. 차원의 저주
차원의 저주란 고차원의 데이터일수록 즉 차원이 증가함에 따라 데이터의 밀도가 줄어들어 예측력이 줄어드는 경우를 말한다. 1차원에서 전체 데이터의 10%를 하나의 변수가 모두 설명할 수 있다. 2차원에서는 전체 데이터의 10%를 표현하기 위해서는 하나의 변수가 (0.1)^1/2를 설명해야한다. 이렇게 차원이 증가함에 따라 변수 하나가 설명해야하는 범위가 증가한다.
새로운 데이터를 거리가 가까운 K개의 평균으로 결정하는 KNN 분류에서 차원의 저주 문제가 자주 언급된다.
(KNN분류는 유클리디안 거리를 사용하기 때문에 차원이 증가할수록 관측치에 가까운 이웃이 없어지는 현상이 발생한다)
2. 차원 축소를 위한 접근 방법
차원 축소의 주요 접근법은 고차원 공간의 데이터를 feature들의 조합으로 만들어낸 새로운 저차원의 부분 공간에 사영 projection 시키는 것이다.
3차원에서 롤 형태로 말려있는 데이터셋이 2차원으로 투영되었을 때 뭉개지는 현상을 스위스 롤이라고 하고 이렇게 고차원에서 휘어지거나 뒤틀린 데이터셋을 핸들하는 것을 매니폴드 학습이라고 한다.
3. PCA _ Unsupervised feature extraction
☆적용방향☆
▶ 본래 데이터의 분산이 최대로 보존되는 축을 선택하는 방향으로
▶ 본래 데이터와 투영된 데이터 간의 거리가 최소화되는 방향으로
◎ 주성분Z 추출하는 방법
① feature의 개수가 n개인 데이터의 공분산 matrix를 구한다
② 공분산 matrix를 특잇값 분해 (SVD : singular value decompostion) n개의 eigenvalue와 eigenvector를 구한다
③ 가장 큰 eigenvalue를 가진 것부터 시작해서 그 eigenvalue의 eigenvector와 x feature를 선형결합하여 총 n개의 주성분을 만들어낸다
◎ sklearn 적용
▶ 원하는 차원으로 축소시키기
▶설명된 분산의 비율
eigenvalue가 큰 순서대로 주성분을 정의하였기 때문에 Z1, Z2 ,~~ 순서대로 주성분을 선택해야 한다
고유값 감소율이 그래프 상에서 Elbow Point에 도달하거나 대략 70~80%를 설명한다고 하면 거기까지의 주성분을 선택한다
▶ 커널 PCA
위에서 주성분을 x들의 선형결합으로 구성하였는데 복잡한 비선형 결정 경계가 필요하다고 하면
현재 차원에서의 비선형을 고차원으로 옮겨 선형으로 바꾸어주는 kernel trick을 적용한다.
커널 pca를 통해서 앞선에 언급되었던 뭉그러뜨리지 않고 형태를 유지한 채로 매니폴드를 펼칠 때 사용할 수 있다.
4. 다른 차원 축소 기법 _ LLE 로컬 선형 임베딩
PCA와 달리 데이터의 projection에 의존하지 않고 이웃에 위치한 인스턴스들을 활용하여 locality를 적용한 거리들을 찾아내는 과정이다.
① 각 데이터Xi에서 사용자가 지정한 만큼의 이웃 데이터들을 계산한다
② 이웃 데이터로 이루어진 convex hull안에 해당 데이터가 위치할 수 있도록 가중치w를 최적화한다 (데이터 reconstruction)
③ 위에서 구한 최적화된 가중치w를 이용해 그 가중치 값을 최대한 보존할 수 있는 저차원 공간 상의 점을 찾는다. (이 점이 고차원에 있던 Xi를 저차원으로 축소시킨 Yi가 되는 것이다) (Map to embedded coordinates)
5. 다른 차원 축소 기법 _ ISOMAP
다차원척도법MDS와 PCA를 이용하여 고차원, 비선형 상의 두 데이터 간 거리를 단순히 유클리드 거리로 구하지 않고 매니폴드 상 실제 거리를 구하는 방법
앞서 살펴봤던 LLE와 유사하게 locality를 이용한다
-> 가까운 이웃에 이웃을 찾아나가면서 최종 지점 까지의 실제 도달 거리를 구한다.
① 특정 입실론 값보다 작은 두 점들을 연결하여 노드를 만들거나 kNN 기법을 이용하여 노드를 만든다 -> 그래프 구축
② 위에서 구한 그래프에서 shortest path를 찾아낸다
③ 그렇게 구한 distance matrix에 대해서 MDS를 적용한다
참고자료
https://www.youtube.com/watch?v=3FAAILDbDd8
https://yngie-c.github.io/machine%20learning/2020/10/06/isomap_and_lle/
https://towardsdatascience.com/manifold-learning-t-sne-lle-isomap-made-easy-42cfd61f5183
https://www.youtube.com/watch?v=FhQm2Tc8Kic
Nonlinear Dimensionality Reduction by Locally Linear Embedding Sam T. Roweis and Lawrence K. Saul
Hands-On Machine Learning with Sckit-Learn, Keras & TenserFlow 8장 차원축소
같이 보면 좋을 코드 자료
MNIST 데이터 PCA
https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60