Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기
통계/머신러닝

18. 다중 클래스(Multi-Class) 분류를 위한 One vs Rest, One vs One 방법을 알아보자.

by 부자 꽁냥이 2022. 5. 9.

이진(Binary) 클래스에서는 잘 동작하는 분류기(모형)들이 다중 클래스(Multi-Class) 분류 문제로 확장하기가 어려운 경우가 있다. 이때에는 다중 클래스(Multi-Class) 분류 문제를 여러 개의 이진 분류 문제로 쪼개서 해결할 수 있다.

 

다중 클래스(Multi-Class)에서 한 클래스를 1 나머지를 0으로 코딩하여 이진 분류기를 여러개 생성하는 One vs Rest 방법이 있고 다중 클래스 문제를 서로 다른 모든 클래스의 쌍으로 쪼개서 푸는 One vs One 방법이 있다. 

 

이번 포스팅에서는 이 방법에 대한 내용을 소개한다.

 

- 목차 -

1. One vs Rest

2. One vs One



이곳은 꽁냥이가 머신러닝을 공부한 내용을 정리하는 곳입니다.

이 포스팅에서는 수식을 포함하고 있습니다. 티스토리 피드에서는 수식이 제대로 표시되지 않을 수 있으니 웹브라우저 또는 모바일 웹브라우저로 보시길 바랍니다.



   1. One vs Rest

- 정의 -

One vs Rest 방법은 다중 클래스 문제를 여러 개의 이진 분류 문제로 바꾸는데 이때 하나의 이진 분류기는 한 클래스를 1, 나머지 클래스를 0으로 취급하여 학습된다.

a. 과정

먼저 K개의 클라스가 있다고 하자. 그리고 데이터 (xi,ci),i=1,,n가 있다. 이때 xip차원 설명 변수 벡터이고 ci{1,,K}이다.

 

이러한 상황에서 One vs Rest 방법은 총 K개의 이진(Binary) 분류기가 다음과 같이 만들어진다.

 

k{1,,K}에 대하여

(1) 만약 ci=k라면 zi=ci, 아닌 경우 zi=0으로 설정한다.

(2) 새롭게 만들어진 데이터 (xi,zi),i=1,,n에 대하여 이진 분류기를 학습한다.

b. 예측

새로운 데이터 x가 들어왔을 때 zi=k,k=1,,K일 확률(또는 점수)을 나타내는 fk(x)를 계산한다. 이런 식으로 K개의 확률(또는 점수)을 계산하고 이를 최대화하는 k를 최종 예측 라벨로 선정한다. 

ˆc=argmaxkfk(x)

 

만약 분류기가 확률을 계산할 수 없고(예: 서포트 벡터 머신) 라벨만을 예측하는 경우에는 가장 많이 나온 라벨을 예측 라벨로 한다.

- 예제 -

먼저 3개의 클래스가 있다고 하자. 각각 라벨은 1, 2, 3으로 하겠다. 그렇다면 아래와 같이 3개의 이진 분류기를 학습하고 각 클래스에 대한 확률(또는 점수)을 계산한다. 

 

one vs rest 설명

위 그림에서 라벨 1과 나머지(2, 3)에 대해서 이진 분류기를 학습하고 새로운 데이터 x에 대하여 라벨 1일 확률이 f1(x)=0.2으로 계산된 것이다. 라벨 2와 나머지 (1, 3)에 대해서도 이진 분류기를 학습하고 새로운 데이터 x에 대하여 라벨 2일 확률이 f2(x)=0.8로 계산 된 것이다.

 

그렇다면 새로운 데이터 x의 라벨은 어떻게 예측될까? f2(x)의 값이 제일 크므로 예측 라벨은 2가 된다.

argmaxk{1,2,3}{f1(x),f2(x),f3(x)}=argmaxk{1,2,3}{0.2,0.8,0.4}=2

- 장단점 -

a. 장점

구현이 쉽다.

b. 단점

One vs Rest 방법은 K 클래스인 경우 K개의 이진 분류기를 학습한다. 이때 각 분류기가 확률이 아닌 다른 점수(Score)를 계산한다면 이러한 점수들은 이진 분류기 별로 스케일 차이가 날 수 있다. 이는 이진 분류기들의 각 클래스에 대한 점수 비교를 어렵게 한다.

 

또한 원(Raw) 데이터 상으로 각 클래스별로 균형 잡힌(Balanced) 데이터인데 이를 한 클래스대 나머지로 설정해버리면 나머지 클래스 데이터가 일방적으로 많게 되어 불균형(Unbalanced) 데이터가 된다. 이는 각 이진 분류기가 학습이 잘 안 되는 결과를 초래할 수 있다.


   2. One vs One

- 정의 -

One vs One 방법은 다중 클래스(Multi-Class)를 가진 데이터를 서로 다른 두 개의 클래스를 갖는 데이터로 쪼개고 이를 이진 분류기로 학습하는 방법이다.

a. 과정

먼저 K개의 클래스가 있다고 하자. 그리고 데이터 (xi,ci),i=1,,n가 있다. 이때 xi는 p차원 설명 변수 벡터이고 ci{1,,K}이다.

 

그렇다면 K개 중에서 서로 다른 2개를 뽑는 조합의 수 J=K(K1)/2만큼의 이진 분류기를 학습하게 되는데 과정은 다음과 같다.

 

j{1,,J}에 대하여

j번째 클래스 쌍을 (m,n)이라 하자. 즉, 1nK,1mK이다. 이때 전체 데이터 중에서 ci{m,n}인 데이터를 추출한 뒤 이를 이용하여 이진 분류기를 학습한다.

b. 예측

새로운 데이터가 x 들어왔을 때 j번째 이진 분류기에 확률(또는 점수) 값을 fj(x)라 하자. 이때 fj(x)를 최대화하는 jJ 다음과 같다고 해보자.

J=argmaxj{1,,J}fj(x)

 

새로운 데이터가 x 들어왔을 때 예측 라벨은 다음과 같다.

fJ(x)'s Label

위 식은 예제를 보면 이해가 될 것이다.

 

만약 분류기가 확률을 계산할 수 없고(예: 서포트 벡터 머신) 라벨만을 예측하는 경우에는 가장 많이 나온 라벨을 예측 라벨로 한다.

- 예제 -

이번에도 라벨이 3개 있다고 하고 각 라벨은 1, 2, 3이다. 이 경우 아래와 같이 3(=(3x2)/2) 개의 이진 분류기를 학습하게 된다. 

새로운 x에 대하여 j번째 학습된 이진 분류기의 라벨이 k인 확률 fjk(x)가 다음과 같이 계산되었다고 하자.

이 경우 예측 확률의 최대값은 f12(x)=0.8이고 이에 대응하는 라벨인 2를 최종 예측 라벨로 선정하게 된다.

- 장단점 -

a. 장점

구현이 쉽다.

b. 단점

라벨 개수가 많아지면 학습해야 할 이진 분류기가 많아지게 된다. 그리고 확률이 아닌 점수와 같은 형태로 예측하게 된다면 One vs Rest에서의 단점과 같이 스케일이 문제가 될 수 있다.


이번 포스팅에서는 기존 이진 분류 모형이 다중 분류(Multi-Class) 문제로 확장하기 어려울 때 사용하는 방법들인 One vs One, One vs Rest를 알아보았다. 이는 다중 분류(Multi-Class) 서포트 벡터 머신에서 사용되기도 하므로 알아두면 이를 이해하는데 도움이 될 것이라 생각한다.

 

참고자료

Multi-Class - 위키백과