다중클래스 분류문제 기초개념

2019-03-21

.

그림, 실습코드 등 학습자료 출처 : https://datascienceschool.net

# 다중클래스 분류문제

  • 분류문제에서 고려해야 할 사항중에 하나가 다중클래스 분류문제이다. 구별해야 할 클래스가 0아니면 1 또는 true 아니면 false 등 두개중에 하나를 분류하는 것을 Binary Classifiaction이라고 한다.

  • 분류해야할 클래스가 3개 이상인 경우를 Multi Class classification이라고 한다. 우리가 알고 있는 분류 모형중에는 모형구조상 다중클래스를 풀 수 있는 모형이 있는 경우도 있다. 가장 대표적인 모형이 확률론적 생성모형이다. 이 확률론적 생성모형은 자체적으로 멀티클래스 문제를 풀수있다. 반면에 판별적인 모형들은 어떤 것들은 멀티클래스를 풀 수 있는 모형도 있어 멀티클래스 문제를 풀지 못하는 모형도 있다. 확률론적인 모형이 아닌 판별함수 모형은 구조적으로 이진클래스 문제밖에 풀 수 없다.

  • 만약에 우리가 쓸 수 있는 모형이 이런 이진분류밖에 없다면 어떻게 해야하는가. 우리는 이 이진분류모형을 잘 조합해서 다중분류를 할 수 있다. OvO (One-Vs-One) 방법이나 OvR (One-vs-the-Rest) 방법을 이용하면 여러개의 이진 클래스 분류 문제로 변환하여 풀 수 있다.

  • OvO의 대표적인 예시가 축구리그이다. 기본적으로 리그의 구조는 특정팀의 실력을 판단할때 항상 두팀을 두고 판단할 수 있다. 다시말해서 바이너리 클래스 밖에 할 수 없는데 우리는 여러개의 축구팀중에서 우승팀을 판단해야 한다. 그래서 리그는 두팀을 두고 판단할 수 있는 경우의 수를 모두 구한다. 다시말해서 이진분류를 여러번해서 이중에서 가장 많이 이긴팀을 뽑는것이다. 이러한 예시처럼 클래스별로 1대1로 판별을해서 가장 많은 판별값을 얻은 클래스를 선택하는 방법이 OvO 방법이다.

  • OvO방법으로 한다고 치면 만약에 4팀이 있다고 가정한다면 게임은 4개의 팀중에서 두팀이 붙을 수 있는 모든 콤비네이션을 다 찾으면 된다. 그러면 4 * 3 / 2 = 6게임이 되고 6게임을 치루어야지 겨우 1문제를 푸는 것이다. 이 방법은 팀이 점점 늘어나게 되면 우리가 풀어야할 이진분류의 문제수가 제곱에 비례해서 늘어나는 단점이 있다. 또한 각 클래스의 판별값이 각 클래스별로 모두 동점일 경우가 발생할 수도 있다. 그래서 이런 동점상황이 있는 경우는 이겼다 졌다 라는 결과만을 가지고서는 판별하는 것이 아니라 축구에서 골득실 등을 따지듯이 decision function 값 나온 것을 그것을 승점이라고 생각하고 더해줘서 따져보게 된다. decision function 값의 정도에 따라 확신의 정도가 다르기 때문에 이 값을 쓴다.

  • sklearn에는 OneVsOneClassifier 보조 클래스를 제공해주는데 이진클래스용 모형을 OvO 방법으로 다중 클래스용 모형으로 변환해준다. OneVsOneClassifier 클래스는 각 클래스가 얻는 조건부 확률값을 합한 값을 decision_function으로 산출해준다.

  • OvO 방법은 위에서 언급했듯이 클래스가 많으면 문제를 잘 못푸는 문제가 있다. 왜냐하면 풀어야 할 이진분류 문제가 너무 많아지게 되기 때문이다.

  • OvR문제는 클래스가 많아져도 풀 수 있다. 클래스가 100개면 100 문제만 풀면된다. 그래서 현실적으로는 OvR방식이 OvO방식보다 훨씬 많이 쓰인다.

  • OvR 방식을 예륻들면 우리가 분류해야할 클래스가 세개가 있다고 하자. 우리는 세문제를 풀어야 한다. A와 (B&C = A가 아닌 클래스)를 이진분류하는 문제 하나, B와 (A&C= B가 아닌 클래스)를 이진분류하는 문제 하나, C와 (A&B=C가 아닌 클래스)를 이진분류하는 문제 하나 총 세문제를 말하는 것이다.

  • sklearn에는 OneVsRestClassifier 보조 클래스를 제공해준다. 이진 클래스용 모형을 OvR 방법으로 다중 클래스용 모형으로 변환이 가능하다.

  • 일반적으로는 OvR이 OvO보다는 성능이 떨어진다. 왜냐하면 문제를 푸는 횟수차이가 나기 때문이다. 그러나 현실적으로는 OvO방법은 클래스가 많으면 아예 쓸 수가 없다.

  • 참고로 sklearn 전처리 함수중에 Label Binarizer 라는 것은 종속변수의 클래스를 원핫인코딩 하기 위한 명령어이다. 이걸 이용해서 명령어를 입력하면 각 열은 OvR 문제를 풀기위한 y 값이 된다.

예를 들어서 A, B, C 범주 형태의 데이터가 있으면 A,B,C 순서대로 1,0,0 / 0,1,0, / 0,0,1 로 코딩해준다.