관리 메뉴

ComputerVision Jack

머신러닝 가이드 - Chapter 6 차원 축소 본문

DeepLearning/머신러닝 - Algorithm

머신러닝 가이드 - Chapter 6 차원 축소

JackYoon 2020. 3. 13. 19:17
반응형

2차원 데이터에 관해서 이해하고 분석하는 것은 쉽지만 3차원 이상 데이터에 대해서는 관찰하고 그래프로 

표현하는 것이 어렵다. 또한 차원이 높아질 수록 더 많은 트레이닝 데이터가 필요하다.

 

이렇게 높은 차원의 데이터는 많은 알고리즘의 계산비용을 높이는 뚜렷한 요인이 되므로 차원을 줄이는 일이

매우 중요하다. (feature을 줄이면 성능이 올라간다.)

 

차원을 줄이면 발생하는 이익

차원을 줄이는 일은 데이터의 노이즈를 업애주며, 학습 알고리즘 결과를 더 좋게 만들어주고, 데이터 세트를 다루기

쉽게 만들고, 결과를 이해하기 쉽게 만들어 준다.

 

차원 축소 방법

  • 피처 선택(feature selection) : 사용할 수 있는 피처들을 살펴보고, 유용한 출력 변수와 상관관계를 살펴본다.
  • 피처 유도(feature derivation) : 기존 피처들을 사용해서 새로운 피처를 생성하는 것
  • 군집화(clustering) : 비숫한 데이터 점들을 모아본다. 더 작은 수의 피처를 사용하게 만들어준다.

데이터를 어떻게 표현(시각화)해야 하는지 알면 알고리즘에 유용하지 않는 차원을 줄일 수 있다. 어떤 형태의 분석 이전

입력 할수 있는 값들을 살펴보고, 어떤 입력 값이 더 유용한지 피처 고르기를 통해서 수행할 수 있다.

 

ex) 의사 결정 트리(decision tree) 

  • 건설적으로 피처 고르는 방법
  • 파괴적으로 피처 고르는 방법

일반적으로 피처를 설정하는 것은 탐색 문제에 속한다. 

지도 학습에 목적을 둔 차원 축소 방법은 선형 판별 분석(LDA : Linear Discriminant Analysis)이다.

1.선형 판별 분석

선형 판별 분석(LDA)

LDA의 주요한 점은 데이터 안에 분포 정도를 표현하는 공분산을 이용해서 데이터의 흩어진 정도를 이해하는 것이다.

데이터의 흩어짐은 공분산의 각 클래스에 속할 확률(Pc : 클래스에 속한 데이터의 개수를 전체 데이터 개수로 나눈다.)을

곱해서 알 수 있다.  모든 클래스에 이 값들을 더함으로써 데이터의 클래스 내 산포도(Sw)를 측정할 수 있다.

 

또한 데이터를 분리하기 위해서는 두 클래스 간의 거리 또한 멀어야한다. 이는 클래스 간의 산포도(Sb)이다.

평균값의 차이를 살펴보는 것으로 계산을 간략하게 수행한다.

 

따라서 쉽게 다른 클래스들로 식별 또는 분리 할 수 있다는 것은 Sb / Sw 값이 가능한 커야 한다는 것을 제시한다.

 

알고리즘 구현

일반적으로 알고리즘을 구현할 때, 고유 벡터(generalised eigenvectors)를 계산하는 것이 요구도니다.

클래스 간의 산포도와 클래스 내부의 산포도를 계산하고, w값을 찾으면 된다.

2.주성분 분석

주성분 분석(PCA)

PCA는 LDA와 다르게 분류 표식이 없는 데이터(Unlabelled data)를 다루기 위해 만들어 졌다. 

분류 표식이 있는 데이터에 적용되어도 저차원 공간에서 목표(target) 데이터를 사용할 수 있으므로 상관 없다.

이를 이용하여 이제 특정한 좌표계 축들의 집합을 찾아서 살펴보면 몇몇 차원들은 필요 없다는 것이 명확해진다.

 

주성분 분석(PCA : Principal Components Analysis)에서 가장 중요한 개념은 가장 큰 변화를 갖는

데이터의 방향을 나타낸다는 것이다. 데이터 값들에서 평균 값을 빼서 우선 점들을 중앙으로 옮기고, 가장 큰 변화를 갖는 방향을 찾아서 그 방향으로 축을 이동시킨다. 남아 있는 변화량을 가능한 한 많이 포함되도록 한다. 마지막으로

모든 변화가 좌표축의 집합들에 포함되어서 공분산이 대각 행렬이 되고, 모든 변수가 서로 상관 관계가 없도록한다.

마지막에 찾은 몇몇 축은 매우 작은 변화량을 갖고 있으며, 이는 데이터의 변동성에 영향을 미치지 않으므로 제거해도 된다.

  • 큰 고유 값 차원 - 큰 변화량을 갖고 있으므로 유용한 차원을 나타낸다.
  • 작은 고유 값 차원 - 대부분의 데이터들이 밀접하게 붙어 있어서 그 방향으로 별다른 변화량이 없다는 것을 말한다.

주성분 분석 알고리즘

  • N개의 데이터 점을 행 벡터로 표현
  • 벡터를 행렬 X에 입력
  • 각 열로부터 평균 값을 빼서 중심으로 이동시키고, 행렬 B로 작성
  • 공분산 행렬 계산 C = 1 / N * BT * B
  • C의 고유 값과 고유 벡터 계산 V-1CV = D, 여기서 V는 C의 고유 값을 갖고, D는 M * M의 대각 고유 값 행렬
  • D를 고유 값을 사용해서 내림차순으로 정렬하고, 이와 맞게 V의 행들을 재정렬
  • n값 보다 작은 고유 값을 제거하고, L차원의 데이터만 남긴다.

다층 퍼셉트론과의 관계

PCA는 SOM 알고리즘으로도 가중치를 초기화 하는데 사용될 수 있다. 이를 통해서 필요한 학습량을 줄일 수 있고,

이는 차원 축소를 위해 매우 유용하다.

이러한 주요 성분을 뉴럴 네트워크에서 계산하는 것은 좋은 생각이 아니다.

MLP네트워크에선 첫 번째 층은 비선형적인 데이터를 변형을 계산하고, 두 번째 층은 비선형 함수의 PCA를 계산한다.

 

커널 PCA

PCA에서의 문제점은 변화량의 방향이 모두 직선이라는 가정에 있는데 이는 실제 경우에 사실이 아닐 때가 많다.

 

커널 PCA 알고리즘

  • 커널을 선택하고, 모든 두 점들마다 쌍으로 적용시켜서 변형된 공간에서의 점들 사이 거리를 나타내는 K행렬 생성
  • K행렬의 고유 값과 고유 벡터를 계산
  • 고유 값에 제곱근을 적용해 고유 벡터를 정규화
  • 가장 큰 고유 값에 해당하는 고유 벡터들을 얻는다.

3.인자 분석

인자 분석

관찰 데이터를 적은 수의 은닉 변수들 또는 비연관성 인자들로 설명할 수 있다는 데 있다.

이러한 인자 분석 문제는 독립적인 인자들을 찾고 각 요소를 측정하는데 내제되어 있는 노이즈들을 찾아내는 것이다.

4. 독립 성분 분석

인자 분석과 관련된 독립성분 분석이라는 방법이 있다. PCA에서는 각각의 인자들을 직교하고, 서로 비상관 관계를 가져야한다. 만약에 인자들이 확률적으로 독립적이라면 ICA가 된다.

독립적인 요인들을 찾는다면 가장 일반적인 방법은 네겐트로피(Negentropy)를 이용하는 것이며, 

J(y) = H(z) - H(y) 이를 통해서 가우시안으로부터 변형을 최대화한다.

 

ICA 구현으로 FastICA는 파이썬에 MDP 패키지로 구현할 수 있다.

5.지역 선형 임베딩

차원 축소 두가지 최신 방법

  • 지역적인 패치들을 조합해서 데이터세트를 재건하는 방법으로 근사 값들을 찾는다.
  • 비선형 공간에서의 최단거리(Geodesics)를 사용해서 전체 최적화 해법을 찾는다.

지역 선형 임베딩(LLE : Locally Linear Embeding)

첫 번째 방법을 지역 선형 임베딩 방법이라고 부르며 이 개념은 선형 근사 값은 오류가 있으므로 오류를 최소화 하기 위해서 데이터의 비선형적인 부분에 작은 패치들을 만든다. 오류는 재건 오류(reconstruction error)로 부르며, 원래 점과 재건된 점 사이의 거리 제곱합을 통해서 구한다.

 

Wij는 원래 j의 데이터 포인트가 재건된 i점에서 얼마나 영향을 미치는가를 뜻한다. 특정 점을 재건하는 데에 어떤 점들이 유용한지를 찾는 것이 문제의 핵심이다.

 

이웃 점들을 찾는 두가지 방법

  • 미리 지정된 d거리보다 짧은 거리 안의 이웃들
  • k개의 가까운 이웃 점들

지역 선형 임베딩 알고리즘

  • 각 점의 이웃들을 결정
  • 가중치 행렬 W를 제약 조건에 맞게 식을 최소화하도록 계산
  • 작은 차원의 벡터를 식에 대해 최소화 하도록 계산

6.아이소맵

두 점 간의 지역적 거리 측정을 통해서 측지선(geodesics)을 구하고, 이를 통해서 전체 오류를 줄인다. 이는 

다차원 스케일링(MDS : Multi-Dimensional Scalling) 방법의 연장이다.

 

다차원 스케일링(MDS)

PCA처럼 MDS 역시 전체 데이터세트에 내제되어 있는 저 차원의 선형 근사치를 찾는다. MDS 임베딩은 모든 점들의 쌍에 대한 거리를 보존하는 데 있다.  만약 유클리드 공간이라면 PCA와 MDS 두 방법은 동일해 진다.

 

MDS 비용 함수 최소화 방법

  • 크루스칼 - 셰퍼드 스케일링(Kruskal-Shephard)
  • 새몬 매핑(Sarmmon mapping)

MDS의 또 다른 형태 Classical MDS의 경우에는 데이터 점 간의 거리 대신에 유사성을 측정해서 사용한다.

Classical MDS 알고리즘은 평탄한 다양체에 동작한다. 하지만 평탄하지 않은 다양체에 대해서 작동하게 만들기 위해서는 아이소맵(Isomap)을 사용한다.

 

아이소맵(Isomap)

점들이 가까운 거리에 있다면 무조건 좋다는 가정을 통해 근사 값을 측정한다. 또한, 멀리 떨어져 있는 점들의 거리는 가까운 점들끼리의 통로를 통해서 찾는다.

 

아이소맵 알고리즘

  • 모든 점 간의 거리를 계산
  • 각 점들의 이웃들을 찾고 가중치 그래프 G를 만든다
  • 측지선 거리 dG를 최단거리 찾기 통해서 근사 값 찾는다
  • classical MDS를 dG에 적용

아이소맵에서는 이웃들의 숫자를 찾는 것이 중요하다. 그렇지 않으면 그래프가 여러개의 부분으로 나뉘어 버리게 되어 서로 무한수의 거리를 갖게 된다.

아이소맵은 점들 간의 거리가 얼마나 멀리 떨어져 있든 각 점들간의 거리를 유지하고자 노력하는데

LLE는 지역적 영역에 집중한다.

반응형
Comments