선형 분류 문제를 차원 감소의 관점에서도 살펴볼 수 있다.
우선, 두 클래스의 경우를 고려, 다음의 식을 통해서 D 차원의 입력 벡터 x 를 일차원에 투영한다고 해본다.
y 에 임계값을 추가해서 y >= -w_0 인 경우에는 클래스 C_1 으로, 아닌 경우에는 클래스 C_2 로 분류한다면 앞 절에서 살펴본 것과 같은 표준 선형 분류기를 얻게 된다.
일반적으로 일차원에 투영할 경우 상당한 양의 정보를 잃게 되며, 원래의 D 차원에서는 잘 분리되었던 클래스들이 일차원에서는 겹칠 수도 있다.
하지만 가중 벡터 w 의 성분들을 잘 조절하면 클래스 간의 분리를 최대화하는 투영을 선택할 수 있다.
우선, 클래스 C_1 에 속하는 N_1 개의 포인트들과 클래스 C_2 에 속하는 N_2 개의 포인트들을 고려해보자. 그러면 각 클래스의 평균 벡터는 다음과 같다.
w 에 투영되었을 경우에 클래스 간의 분리 정도를 측정할 수 있는 가장 쉬운 방법은 투영된 클래스의 평균들이 얼마나 분리되어 있는가를 살펴보는 것이다. 이에 따르면 다음의 값을 극대화하도록 w 를 선택해야 할지도 모른다.
위 식은 클래스 C_k 에 투영된 데이터들의 평균에 해당한다. w 의 크기를 키움으로써 임의로 이 값을 키울 수 있다.
이 문제를 해결하기 위해서는 w 가 단위 길이를 가지도록 제한해야 한다.
라그랑주 승수법을 이용하여 제약 조건하에서의 극대화를 하면
라는 것을 알 수 있다. 이 방식에는 여전히 문제가 남아 있다.
이 그림에서는 원래의 이차원 공간에서는 잘 분리되었던 두 클래스들이 두 클래스들의 평균을 연결한 선에 대해 투영했을 때는 중복되는 것을 볼 수 있다.
이 어려움은 클래스 분포가 심한 비대각 공분산을 가지고 있기 때문에 생긴다.
피셔가 제안한 아이디어는 투영된 클래스 평균 사이의 분리 정도를 크게 하는 동시에 각 클래스 내의 분산을 작게 하는 함수를 최대화함으로써 클래스 간의 중복을 최소화하자는 것이다.
식 1의 투영식은 x 상의 라벨링된 데이터 포인트 집합을 일차원 공간 y 상의 라벨링된 집합으로 변환시킨다. 따라서 변환된 데이터 클래스 C_k 상의 클래스 내 분산은 다음과 같이 주어진다.
여기서 y_n = w^T x_n 이다. 전체 데이터 집합의 클래스 내 분산은 단순히 s_1^2 + s_2^2 으로 정의할 수 있다.피셔 기준은 클래스 간 분산과 클래스 내 분산의 비율로 정의된다.
피셔 기준을 다음과 같이 w 에 대해 종속적인 형태로 적을 수 있다.
S_B 는 클래스 간 공분산 행렬이다.
S_W 는 전체 클래스 내 공분산 행렬이다.
J(w) 식을 w 에 대해 미분하면 J(w) 가 다음의 경우에 극대화됨을 알 수 있다.
S_B 식으로부터 S_B w 는 항상 (m_2 - m_1) 방향에 있음을 알 수 있다. 또한, 우리는 w 의 크기에 대해서는 신경 쓰지 않고 오직 방향에만 관심이 있으므로 스칼라 인지인 (w^T S_B w)와 (w^T S_W w ) 를 생략할 수 있다. 양변에 S_W^-1 을 곱하면 다음을 얻게 된다.
만약 클래스 내 공분산이 등방이고 따라서 S_W 가 단위 행렬에 비례한다면, w 는 클래스 평균들의 차이에 대해 비례한다는 것을 확인할 수 있다.
위 식의 결과는 피셔의 선형 판별이라고 알려져 있다. 엄밀히 말하면 이는 판별 함수가 아닌, 일차원에 투영을 하기 위한 방향들 중 한 방향에 해당한다. 임계값을 정하고 y(x) >= y_0 인 경우에는 C_1 으로 분류, 나머지 경우에는 C_2 로 분류하는 식으로 투영된 데이터를 이용해서 판별 함수를 만들 수가 있다.
예를 들어, 클래스 조건부 밀도를 가우시안 분포로 모델 후, 최대 가능도에 따른 가우시안 분포의 매개변수를 찾을 수 있다. 투영된 클래스들의 가우시안 근사를 찾아낸 후에 최적 임계값을 찾을 수 있다. y = w^T x 는 확률 변수들의 합으로 그렇기 때문에 중심 극한 정리에 따라서 가우시안 가정이 정당화될 수 있다.
'개념 정리' 카테고리의 다른 글
판별 함수(다중 클래스에 대한 피셔 판별식) (1) | 2022.12.18 |
---|---|
판별 함수(최소 제곱법과의 관계) (1) | 2022.12.18 |
판별 함수(분류를 위한 최소 제곱법) (0) | 2022.12.18 |
판별 함수(다중 클래스) (0) | 2022.12.18 |
판별 함수(두 개의 클래스) (2) | 2022.12.18 |