< 시도해본 차원축소 방법 리스트 >
- pca
- kernal pca
- svd
- isomap
- mds
- t-sne
차원축소를 해주는 이유
— 차원의 저주문제 (오버피팅)
— 데이터 압축
— 계산비용축소
차원축소 접근방법 2가지
(1) 투영 (projection) — PCA /SVD/
(2) 매니폴드학습 / 대부분 but 항상 통하지는 않는다.— Kernal PCA / Isomap / T-SNE /
e.g. 스위스롤 ( 다 펼치면 2d , 하지만 3차원으로 말려있다)
→ 전자는 매니폴드 학습방법이 더 효율적 , 후자는 비효율적
⇒ 모델을 학습전 학습 데이터셋 차원축소를 시도하면 항상 모델의 성능은 항상 더 낫거나 간단한 모델이 되는 것은 아니다
** 매니폴드란!
일반적으로 거리를 구하는 공식 (지금까지 배워온 방식) = 유클리디안 방식
매니폴드(manifold)란, 두 점 사이의 거리 혹은 유사도가 근거리에서는 유클리디안(Euclidean metric, 직선 거리) 을 따르지만 원거리에서는 그렇지 않은 공간을 말합니다.
그림처럼, 조그만 유클리디안 공간 조각들(육면체 하나를 근거리에서 정의된 유클리디안 공간이라고 생각하시면 됩니다)이 다닥다닥 붙어 이루어져서 전체적으로 보면 비유클리디안(non-Euclidean)이 되는 공간을 뜻합니다. 아래 그림은 각각 2차원과 3차원 매니폴드를 나타냅니다.
[PCA]
PCA : 차원을 줄이되 정보손실을 최소화한다
- 원래 공간에서 데이터가 퍼져 있는 정도를 축소된 공간에서 얼마나 잘 유지하느냐를 척도로 삼음
- 이를 잘 유지하냐는 변환된 공간에서의 데이터의 '분산'으로 측정
- 변환된 공간에서 데이터의 분산을 최대로 할 수 있는 좌표축을 찾아야함 ( 즉 데이터가 분산되어 있는 주요한 방향(Principal direction)을 찾아준다
step1 데이터투영(projection)하기
원래 2차원이였다면 1차원으로 투영해버리기
step2: 투영된 공간에서 분산 측정하기
평균과 분산을 정규화 해준다. 정규화 해주면 각각의 attribute의 평균이 0이되고, 분산이 1이 되기 때문에 ( 즉 같은 scale을 같는다) attribute간의 비교가 가능해진다. 아래 그림을 살펴보면 분산이 최대가 되어야 데이터가 많이 보존됨을 알수있다. (제일 첫번째 그림에서 c1)
e.g. 첫번째 그림은 주성분이 1개일때(c1) / 두번째 그림은 주성분이 3개일때 (e1,e2,e3 순서대로 분산이큼)
step3: 분산의 최대치는 어떻게 찾는가
투영된 공간에서 분산을 최대화 해 줄 수 있는 벡터 u를 찾아야한다. u는 방향이 중요하다. (계산할때 라그랑지 승수를 사용한다)
**
공분산행렬이란? (뒤에서 SVD 와 비교할때도 사용됨)
- 다음 그림과같이 공분산 행렬은 각 속성에 대해서 두개의 속성(특징쌍)의 변동이 얼마나 닮았는가 ( = 얼마만큼이나 함께 변하는가를 행렬로 나타내준다. 이때 정방행렬이라는것에 주목해야한다( 뒤에 svd와 비교 )
- 공분산행렬에서 고유값과 고유벡터를 구할수 있다.
- 이렇게 구한 고유값 목록에서 주성분을 뽑아낼수 있다.
#주성분을 2개로 지정해주었을때,
#위의 결과의 의미는 원 데이터셋 분산의 99.5%가 첫 번째 주성분 축에 놓여 있고,
# 0.3%가 두 번째 주성분 축에 놓여 있다는 것을 말합니다.
> pca.explained_variance_ratio_
array([0.99541373, 0.00338148])
> sum(pca.explained_variance_ratio_)
0.9987952108914363
# 두속성이 전체 변화량의 99%를 차지
한마디로 PCA는 데이터의 분산을 최대한 보존하면서 서로 직교하는 새 축(새 기저)를 찾아, 고차원 공간의 표본들을 저차원 공간으로 변환하는 기법이다 / 데이터 하나 하나에 대한 성분을 분석하는 것이 아니라, 여러 데이터들이 모여 하나의 분포를 이룰 때 이 분포의 주 성분(=데이터들의 분산이 가장 큰 방향벡터)을 분석해 주는 방법이다.
[Kernal PCA]
pca 는 차원축소를 위한 선형 변환 기법을 이용하기 떄문에 선형으로 분리 불가능한 데이터에 대해서는 적당하지 않다. 이를 극복하기 위해 커널 pca 를 사용할수 있다.
- 아래 그램에서 첫번째 선형적인 데이터에서는 pca가 잘 작동하지만 2,3 번째 데이터처럼 비선형적인 데이터의 경우 적용하기 곤란하다.
코드 (아래) -(1)(2) 예제
http://203.246.113.170:8800/notebooks/Yoonseo/kernal pca 예제 비선형데이터셋.ipynb
(1) e.g. 반달 데이터셋 사용! (make_moon)
- 아래 그림에서 (좌) pca 적용 (우) kernal PCA 적용
(2) 나선형 데이터 사용 (make_circles)
- 두번째 그림이 pca 적용 / 세번째 그림이 kernal pca 사용
(3) 그외 여러가지 비선형 데이터에서 PCA vs KPCA 비교분석된 좋은 자료
https://rpubs.com/sandipan/197468
[SVD]
특이값 분해라고도 한다
특이값 분해는 고유값 분해 처럼 행렬을 대각화하는 한 방법이다. 그런데, 특이값 분해가 유용한 이유는 행렬이 정방행렬이든 아니든 관계없이 모든 m x n 행렬에 대해 적용 가능하기 때문.
앞서서 PCA 는 고유값 분해는 기본적으로 정방행렬을 반드시 필요로하며, 새로운 축을 만들어 고유벡터의 새로운 관점으로 바라보는것이였다면, SVD 는 정방행렬이 아니라 직사각형 행렬일떄 사용한다.
직사각행렬에 연산을 취했을때 벡터의 방향만 변하고 양(길이)는 변하지 않는다.
https://commons.wikimedia.org/wiki/File%3ASingular_value_decomposition.gif (움직이는 모양 확인)
[MDS]
MDS 는 1964 년에 제안된, 매우 오래된 임베딩 방법. MDS 기법은 numeric 변수로만 이루어 졌을 때에만 사용이 가능하다.
낮은 차원에서의 자료들이 거리가 멀리 떨어져 위치한다는 것은 비유사성이 높다는 뜻이고, 자료가 가까울수록 비유사성이 낮다 (즉 유사성이 높다)는 뜻이 된다. MDS를 이용하여 데이터를 시각화 하는 방법의 가장 큰 장점은 바로 데이터들의 유사도를 확인할 수 있다는 점이다. (비슷한 변수값을 가지는 데이터들은 가까이 있다)
한마디로 개체들을 2차원 또는 3차원 공간상에 점으로 표현하여 개체들 사이의 집단화를 시각적으로 표현하는 분석 방법. 군집분석은 개체들간의 비유사성을 이용하여 동일한 그룹들로 분류하는것이 목적인것에 반해 mds는2,3차원위에 점으로 표현하고 시각화하는것이 주 목적. pca 와 비교하면, 원데이를 최대한 보존한다.
분석 과정
(1) 자료수집
n개의 개체들을 대상으로 p개의 특성을 측정한다
(2) 유사성 / 비유사성 측정
mds 에서는 유사성이아니라 비유사성 측정방법을 사용함 ( 이유 - 유사성 대신에 비유사성(또는 거리)를 이용하는 이유는 유사성의 경우 대각선원소의 값을 정의하기 어렵기 때문이라고 한다)
(3) 2차원, 3차원 공간상에 개체를 표현
개체들 사이의 *유클리디안 거리(직선거리 계산방법) 를 비유사성 행렬을 이용해서 개체들을 2차원 공간상 점으로 표현한다.
**비유사성 행렬 = m개 객체로 구성된 데이터 세트의 경우, 데이터 세트에 m*(m – 1)/2개 쌍이 있다.
(4) 최적 표현의 결정
s-stress 를 사용해서 최적위치의 적합성을 측정한다.
오른쪽은 stress 구하는 방식 (dij 는 점i 부터 점 j 까지의 실제 유클리디안거리, ^dij는 프로그램에 의해서 추정된 거리)
[ISOMAP]
이는 kernal pca 처럼 비선형 데이터를 다룰때 유리하다
이는 MDS + PCA 각각의 특징을 합친 방법이다.
e.g. 스위스롤
앞선 방식 MDS를 사용하면 아래 그림에서 두점사이의 거리는 매우 짧다. 하지만 isomap에서는 다른 방식을 사용한다. 거리를 측정할때 인접지점을 고려한다. 한마디로 쭉 이어져야한다.
e.g. 지구에서 나라별 거리 계산방식과 같다. 각 나라별로 거리를 측정할때 mds 방식으로 유클리디안 방식으로 측정하면 내핵을 뚫고 들어가야한다. 하지만 실제로 계산할땐, 지구의 표면을 따라 거리를 계산한다 (=isomap)
I
[T-SNE]
아래는 발표 피피티 ( 여기없는건 발표자료에 있음)
https://docs.google.com/presentation/d/1ajWFe_v5EUz-y70otmEQLzr-vn47PXSh3npDBiYV6Hs/edit?usp=sharing
'<개념> > Deep learning' 카테고리의 다른 글
opencv로 동영상 자르기+ YOLO 적용 (0) | 2021.06.25 |
---|---|
[Hierarchical Clustering] 계층적 클러스터링 개념정리 (0) | 2021.05.09 |
베이지안 옵티마이제이션 정리 (Bayesian optimization) (1) | 2021.03.21 |
Coursera Andrew NG - 1 (0) | 2021.02.23 |
Tensorflow function (0) | 2021.02.15 |
Uploaded by Notion2Tistory v1.1.0