차원축소
- 많은 feature는 훈련을 느리게 만듦.
- 차원의 저주 라고 한다.
차원의 저주
- 충분한 데이터 양이 있어야 우리는 좋은 모델을 만들 수 있다.
- 이 필요한 데이터 양은 특성수에 따라서 결정된다.
- 특성수와 데이터양의 관계를 생각할 때 공간을 비유해서 설명하면 좋다.
Dimension을 Feature의 개수와 동일하게 한번 바라보자.
이때 feature가 한개라면 1차원에 대응되고, 여기서 데이터는 그 1차원 공간위에 흩뿌려지는 점이라 생각하자.
이 선의 길이를 1이라 했을 때, 점들 사이 거리가 0.1이상 차이날 경우 모델이 정상적으로 동작하지 않는다고 가정했을 때,
필요한 점의 총 개수는 10개가 될 것이다.
2차원으로 늘렸을 때 각 점의 간격을 0.1로 유지하기 위해서는 10 x 10 = 100개의 데이터가 필요하다.
이런 방식으로 100차원만 되더라도 10000개의 데이터가 필요해진다.
즉 좋은 모델을 만들기 위해서 필요한 특정 밀도를 만드는데에 있어서 필요한 데이터의 수가 기하급수적으로 증가하게 된다.
만약 적은데이터로 이 밀도를 맞추려면 Extrapolation을 해야하는데, 이렇게 되면 모델이 과대적합되기 쉽다.
또는 설명력이 작은 모델이 될 것이다.
차원축소를 위한 접근 방법
1. 투영 (Projection)
대부분의 데이터는 Feature를 축으로 하는 특정 공간의 점으로 존재한다.
이 때, 데이터셋은 그 공간에 고르게 분포하기 보다는 특정 공간에 강하게 연관되어 있다.
(그렇지 않다면 모델식을 구하는 것이 의미도 없겠죠)
그림으로 간단하게 알아보자.
다음과 같이 3개의 피쳐가 있는 공간은 이렇게 시각화 될 수 있다.
이 때 점들의 경향성은 특정 평면을 기준으로 약간의 값차이가 있을 뿐이다.
이때 이 평면을 subspace, 부분 공간이라 한다.
투영의 아이디어는,
그렇다면 저 평면의 공간에 대해 값들차이가 얼마나지 않으므로, x1, x2, x3의 축대신 평면을 만드는
두 축 (z1, z2)을 사용해서 데이터를 나타내자! 이다.
이 때 평면에 대해 수직으로 정확도의 손실을 보지만 차원을 줄일 수 있다.
그런데 이것은 부분공간이 선형적인 상황에서만 가능하다.
다음과 같이 생긴녀석은 할 수가 없다.
롤처럼 생겼다.
이녀석을 억지로 최적화해서 만들수 있는 초평면에 대해 투영을 하면, (아래 그림은 x1, x2에 대해 투영함)
왼쪽과 같이 나온다.
하지만 우리가 원하는 것은 오른쪽 그림과 같이 이녀석을 펼쳐서 예쁘게 만드는 것이다.
어떻게 할까?
매니폴드 학습 (Manifold Learning)
위의 예는 2D 매니폴드의 한 예다.
이것을 일반화하여 말해보면,
위 상황은 2차원 초평면으로 보일 수 있는 3차원 공간속의 일부로 판단 할 수 있다.
즉 이녀석을 펼쳐서 보거나, 또는 가까이서 보면 2차원 평면이지만 말려있기 때문에 이 전체 공간의 크기인
3차원으로 보여지는 것이다.
정리하면,
d차원 매니폴드는 국부적으로 d차원 초평면으로 보일 수 있는 n차원의 일부이다.
이 때 d<n이며 위의 예처럼 -1차원일 필요는 없다.
많은 차원축소 알고리즘은 이 매니폴드를 모델링 하는 방식으로 작동한다.
이를 매니폴드 학습 이라 한다.
이 학습은
" 실제 고차원 데이터 셋은 저차원 매니폴드에 가깝게 놓여있다. "
라는 매니폴드 가정 , 매니폴드 가설 에 근거한다.
이 논리를 이미지를 판별하는 것에 비유해보면,
모든 픽셀이 어떤 이미지를 판별하는데 있어 영향을 주는 것이 아닐 것이다.
극히 일부분의 변화가 판별하는데 영향을 준다.
따라서 모든픽셀(모든 feature)을 에 연관되어 있지 않고
연관된 일부 픽셀(새로 만들어진 z1, z2축)과 관련이 있을 것이다.
로 해석할 수 있다.
더 나아가서 한가지 가설과 암묵적으로 사용되기도 한다.
위에서 롤모양을 풀어해친 모양에서의 결정경계, 회귀선이 간단할 것이라는 가설.
하지만 이는 우리가 단언하기 힘듦을 직관적으로 알 수 있다.
그림을 보자.
1번 행일 것이라는 가정이다.
2번 행을 보면 아닐 수도 있다는 것을 알 수 있다.
PCA
- 차원축소하는 알고리즘
분산보존
위 그림을 보았을 때, 데이터 손실을 가장 줄이면서 저 데이터를 다 표현하려면 어떻게 해야할까?
c1선을 긋는 것이 좋을 것이다.
오른쪽 그림은 실선 반점선 점선에 투영을 했을 때 데이터의 분포를 보여준다.
데이터의 덩어리를 가장 잘 표현하는 것은 c1이다.
사실 위의 설명을 잘못되었지만 직관적인 이해를 돕는데는 좋다.
이제 제대로 설명해보면,
우리는 저 데이터의 크기를 대변해서 선을 긋는 것이 아니다.
우리가 해야하는 것은 수치적으로 원래 덩어리의 데이터의 손실량을 최소로 하는 선을 찾는 것이다.
그 행위는 (원래데이터 - 투영한 데이터)^2 을 최소화 하는 방향이다.
일종의 손실함수를 최소화 하는 것이다.
더하려다가 너무 설명을 잘하신 곳이 있어 링크로 대신한다.