분류모형 개요

2019-04-15

.

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

  • 분류문제를 푸는 방법은 한가지가 아니라 여러가지가 존재한다.

  • 크게 나누어서는 두가지가 있다. 하나는 결정론적인 방법과 다른 하나는 확률적모델이다. 예를 들어서 두개의 피쳐 x1(꽃잎의 길이),x2(꽃잎의 폭)가 있다고 하자. 어떤 종류의 꽃은 꽃잎의 길이와 꽃잎의 폭이 다 크고, 어떤 종류의 꽃은 다 작은 경우가 있어서 이 특정 종류의 꽃을 분류하고자 하면 우리가 생각할 수 있는 방법은 이 서로 다른 종류의 꽃을 나누는 선을 긋는 것이다. 선을 그어서 예를 들어서 왼쪽은 A 종류, 오른쪽은 B종류 이런식으로 구분하는 방법이 있는데 얘를 결정론적인 방법이라고 하는데 판별함수를 쓴다고해서 판별함수방법이라고 부른다.

  • 또는 판별함수를 쓰는 것이 아니라 확률을 쓰는 방법도 있다. 확률을 쓰는 방법은 기본적으로 얘는 또 두가지로 나누어진다. 생성(generative) 모형과 판별적(discriminative) 모형으로 나누어진다.

  • 그래서 정리하면 분류모형에는 크게 세가지가 있다. 판별함수모형, 확률론적 생성모형, 확률론적 판별모형이다. 아래의 정리는 대표적인 분류모형들에 대해 이 세가지 모형을 기준으로 정리한 것이다.

1) 확률론적 생성모형 : QDA, LDA, 나이브베이즈 모형 등

2) 확률론적 판별모형 : 로지스틱 회귀, 의사결정나무 등

3) 판별함수모형 : 퍼셉트론, 서포트 벡터머신, 신경망 등

  • 확률론적 방법은 다른말로 조건부확률방법이라고도 부른다. 왜냐하면 확률을 사용하는데 그냥확률을 사용하는것이 아니라 우리가 prediction을 할때는 y값을 예측을 해야하는데 이때 y값에 대한 확률분포를 안다는 것은 y가 어디가 많이 잘나오고 어디가 잘 안나온다는 것을 안다는 것이다. 그런데 이 y값이 피쳐가 어떤가에 따라 달라지기 때문에 prediction을 할때는 항상 입력이 되는 조건이 있고 그때 y값의 분포가 나오게 되는 것이다. 다시말해 x에 따라 각각 분포가 달라지기 때문에 조건부 확률을 구해야 한다. 그래서 확률론적인 방법이라고 하면 전부 조건부 확률인것이다.

  • 분류문제를 풀때 확률을 쓸때는 가장 간단한 방법은 예를 들어서 클래스가 k종류가 있다면 1,2,3,4,5,…,k 중에 어떤 클래스냐 라고 판별할때는 확률을 k개를 다 구하게 된다. x가 들어갔을때 y가 1일 확률, x가 들어갔을때 y가 2일 확률, x가 들어갔을때 y가 3일 확률 … x가 들어갔을때 y가 k일 확률 전부 다 구하게 된다. 그런다음에 p1가 가장 높은지, p2가 높은지,…,pk가 높은지 얘들을 다 비교해서 가장 큰값을 찾으면 되는 것이다. 그래서 p1이 가장 높은 것이다라고 하면 답은 클래스가 1이 되는 것이다. 이게 확률론적 방법이다.

  • 파이썬 사이킷런 패키지에서는 사용하는 분류모델들 중 만약에 확률론적인 방법을 사용하는 모델이에는 ‘predict_proba’ 또는 ‘predict_log_proba’라는 메서드가 구현되어 있다. 이 메서드들은 독립변수 x가 주어지면 종속변수 y의 모든 카테고리 값에 대해 조건부확률 또는 조건부확률의 로그값을 계산해준다. 확률론적 생성모형과, 확률론적 판별모형 모두 이 predict_proba가 계산 가능하다.

  • 참고로 그냥확률을 나타낸거랑 로그로 확률을 나타낸거랑 무슨차이냐면 그냥 확률을 나타낸 것은 인식하기는 좋은데, 비슷비슷한 얘들의 차이가 잘 티가 안나는 경우가 있다 이럴 경우에 로그를 해주면 이 차이가 명확하게 드러난다. 사실 log proba를 쓰는 이유는 이런 장점보다는 다른모델과 이 모델을 합쳐야 할 때가 있는데 수학적으로는 곱하기 연산을 해야하는데 로그로 바꿔주면 곱하기 연산이 아니라 더하기 연산으로 계산을 쉽게 할 수 있다.

  • 확률론적 모형은 두가지가 있는데 먼저 확률론적 생성모형에 대해 알아보자. 확률론적 생성모형은

\(\ P(x \mid y=k)\)를 추정한 다음

베이즈 정리를 이용해서 P(y=k / x)를 계산하는 방법이다.

다시말해 우리가 최종적으로 구하고 싶은 것은 x가 조건으로 주어졌을때 y가 k인 확률을 구하는 것이다.

수식은 아래와 같다.

\[\ P(y=k \mid x) = \dfrac{P(x \mid y=k)P(y=k)}{P(x)}\]

위의 수식에서 구하기 쉬운것부터 구해보자. likelihood( \(\ P(x \mid y=k)\) )를 구하고, y=k인 확률을 곱한다음에 P(x)로 나누어지는 베이즈 정리를 풀면된다.

  • 그러면 왜 이렇게 복잡하게 푸냐라고 할 수 있는데, 얘가 계산하기가 더 쉽기 때문이다 예를들어서 x가 환자를 진단한 진단영상의 특징이라고 하고, y는 이 사람이 병에 걸렸는지 안걸렸는지를 판별하는 문제라고 하자. 그런데 병원에 가면 우리는 이미 라벨링이 끝난데이터 즉 환자라고 딱지가 붙어있는 사람들의 진단영상 특징자료, 정상인이라고 딱지가 붙어있는 사람들의 진단영상 특징자료 이것들을 구할 수 있다. 이는 환자라는 병에 걸렸다는 조건이 이미 만족되어 있는 사람들의 진단영상 특징, 정상인이라는 병에 걸리지 않았다는 조건이 이미 만족되어 있는 사람들의 진단영상 특징을 데이터로 구할 수 있다는 것이다. 그러면 우리는 likelihood( \(\ P(x \mid y=k)\) )를 뽑아낼 수 있다. 예를들어서 이 x가 혈액을 검사한 수치라고 치자. 그러면 환자인 사람의 검사수치의 확률을 구할 수 있다. 예를 들어서 환자들은 보통 검사하면 수치가 1000정도가 나온다고 하면 이것은 환자인 사람의 x의 분포라고 할 수 있는 것이다. 또한 정상인들의 혈액검사 수치만 모았을때 분포는 500근처에서 이 x값이 나온다고 한다면 우리는 y=k일때 x의 확률을 쉽게 구할 수 있는 것이다.

  • 이렇게 구하기 쉬운것부터 시작해서 베이즈정리를 사용해서 우리가 진짜로 원하는 조건부 확률을 구해나가는 방식을 생성모형이라고 한다.

  • 생성모형의 특징중에 하나는 y=k일때의 x의 확률을 다 알고, y=k일 확률까지해서 다 더하면 P(x) 즉, 아래의 수식을 구할 수 있다. 다시말해 전체 확률의 법칙을 이용하여 아래의 수식과 같이 특징 데이터 x의 무조건부 확률분포 P(x)를 구할 수 있다.

\[\ P(x) = \sum_{k=1}^K P(x \mid y=k)P(y=k)\]
  • 그래서 생성모형의 경우에는 다른 모형과 다른것은 p(x)라는 것을 계산할 수 있다. 혈액수치가 특정 수치가 나올 확률 또는 환자의 엑스레이 사진이 특정모양이 나올 확률을 계산할 수 있다.

  • 의사들은 환자 차트를 보다보면 “어 이거 이상한데, 이 숫자 정확하게 쓴거 맞아?”라고 찾아낼 수 있다. 어떻게 찾아내냐면 x(환자의 차트)가 들어왔는데 그걸보고 이상한 데이터라고 얘기한다는 것은 이 x는 있을 수 없는 데이터라는 것을 계산한다는 것이다. 있을 수 없는 데이터라는 것은 나올 확률이 아주아주 적은 데이터라는 것이다.

  • 그래서 \(\ P(x) = \sum_{k=1}^K P(x \mid y=k)P(y=k)\) 를 알게되면 데이터만 봐도 이 데이터가 정상적인 데이터인지 정상적인 데이터가 아닌지 알 수 있는 것이다. 이것은 생성모델의 특징인데 단점은 얘는 계산을 쓸때없이 많이 하는 것처럼 보인다. 각 클래스별로 x가 나오는 확률을 다 일일이 다 계산하기 때문이다.

  • 클래스가 환자냐 정상인이냐처럼 두개정도 있다면 상관없는데 예를 들어서 사람사진을 보고서는 이게 누구사진이냐라는 것을 분류하는 문제라면 만약에 분류해야할 사람이 1000명이라면 likelihood 이 부분 모델링을 사람마다 전부 모델링해줘야 한다. 그러면 모델링하는데 너무나도 시간이 많이 걸린다. 그리고 사실 이런 모델링이 나중에 분류하는데 꼭 필요한 것은 아니다. 이거를 몰라도 모델링을 할 수 있다.

  • likelihood를 몰라도 모델링을 할 수는 있다. 그러나 이걸 안다는 것은 y가 주어졌을때 x를 도로 뽑아낼 수 있다는 말이다. 의사에게 병에 걸린 사람의 차트를 아무거나 적어보라고 할때 의사는 이걸 적을 수 있다. 의사는 마음속으로 likelihood 정보를 갖고 있다는 것이다.

  • 이거를 개와 고양이 사진을 구별하는 문제라고 하면, 개라고 하면 개의 그림을 그릴 수 있어야 한다. 개의 그림을 그려보라고 하면 개의 그림을 그릴 수 있어야 한다. 그리고 고양이라고 y값을 알려주면 고양이의 이미지를 그릴 수 있어야 한다. 그게 이 likelihood를 안다는 것이다.

  • 생성모형의 장점중에 하나는 클래스 갯수가 많은 경우에도 적용 가능하다는 점이다. 클래스 수가 3개가 넘어가는 어떤 경우에는 생성모형이 적합경우가 종종있다.

  • 생성모형에는 여러가지가 있는데 QDA, 나이브베이즈 모형 등이 있다.

  • 그러나 우리가 고양이 그림을 손으로 못그린다고해서 개인지 고양이인지 모르는 것은 아니다. 보통의 경우에는 likelihood 정보는 우리가 최종문제를 풀기위해 너무 과다한 정보인 경우가 많다. 굳이 여기까지는 몰라도 되는 것이다. 딱 구별할 수 있는 고 능력만 있으면 되지 꼭 개나 고양이를 그릴 수 있어야하는 건 아니다. 이런 아이디어에서 나온것이 확률론적 판별모형이다.

  • 판별모형은 생성모형이 좋기는 좋은데 너무 데이터를 과다하게 요구하거나 계산양이 쓸때없이 많은 경우가 있다. 쉽게 말해서 개랑 고양이를 구별만 하면 되는데 개하고 고양이를 그리는 것까지 알아야하냐 이것은 너무 과도하다. 개랑 고양이를 구별하는 것만 알고 싶다라는 아이디어가 확률론적 판별모형이다.

  • 확률론적 판별모형은 어떤 함수라고 생각한다. 예를들어서 리트리버 사진을 넣으면 이 사진이 개일 확률이 계산이되고, 요크셔테리어 사진을 넣으면 이게 개일 확률이 얼마가 나오고, 길고양이 사진을 넣었을때 개일 확률이 계산되는 x가 들어오면 확률이 줄었다 늘어나는 결국에는 x에 대한 어떤 함수아니냐. x값이 달라지면 출력값이 0 ~ 1을 왔다갔다 하는 어떤 함수 아니냐라는 아이디어다.

  • 그러면 이 함수만 바로 구하자. 확률분포를 다이렉트로 함수로 모델링하는 방식이다. 굳이 likelihood 같은거 구하고 베이즈 정리로 복잡하게 계산하지 말자는 것이다. 이 확률론적 판별모형의 대표주자가 로지스틱 회귀모델이다.

  • 로지스틱 회귀모형은 결론적으로 0 ~ 1로 출력되는 조건을 만족하면서 x가 커지면 확률이 커지고, x가 작아지면 확률이 작아지는 함수이다.

  • 예를 든다면 특정사람의 시험에 합격할 확률을 예측을 들 수 있다. 로지스틱 회구모델로 출력되는 함수가 0.5보다 크면 합격할 것이라고 판별할 것이고, 0.5보다 작으면 불합격할 것이라고 판별할 것이다. 이때 피쳐는 공부에 투자한 시간 등이 있을것이다.

  • 우리가 분류를 하는데 있어서 예를들어서 개와 고양이 사진을 구별하기 위해 중간과정으로 확률을 구했다. 그러나 로지스틱 회귀분석을 보면 알 수 있듯이 0.5라는 경계선이 있는 것을 알 수 있다. 경계선이 있고 이 경계선을 기준으로 해서 0.5 이상은 합격하는 지역, 0.5 이하는 불합격하는 지역이 구별이 된다. 그러면 우리가 생각할 수 있는 것이 0.5를 기준으로 경계선을 그어서 구분 할 수 있으니까 이 경계선을 어디에 긋는지만 알면 되지 않느냐 굳이 복잡하게 확률같은거 안구해도 되지 않느냐해서 나온 아이디어가 판별함수 모형이다.

  • 판별함수는 경계선을 나타내는 함수를 하나 찾아낸다. f(x) = 0 인 것을 찾아내면 클래스 1은 f(x) > 0이고 다시말해 판별함수값이 양수이고, 클래스 0은 f(x) < 0 다시말해 판별함수값이 음수이다. 판별함수값의 절대값이 작을수록 f(x) = 0 (경계선)에 가까운 놈인 것이고, 판별함수값의 절대값이 큰놈은 경계선에서 멀리 있는 놈이라고 할 수 있다. 그래서 경계선을 나타내는 어떤 함수만 찾으면 된다는 것이다. 확률같은거 계산필요없이.

  • 판별함수의 대표주자인 퍼셉트론을 예로들어보면 퍼셉트론은 기본적으로 직선인 경계선을 찾아낸다. 판별함수 기반모형의 가장 큰 단점은 클래스가 두개인 것만 할 수 있다. 경계선을 찾아내는 모형이다보니 경계선을 기준으로 왼쪽과 오른쪽으로 밖에 나눌 수 없다. 다시말해서 두개의 클래스만 나누는 일만 할 수 있다.

  • 또한 데이터 중에는 직선으로 데이터를 구별할 수 없는 것도 있는데 이런 경우는 곡선으로 경계선을 그릴 수 있는 모형을 찾아야 하는데 그런 모형은 대표적으로 커널서포트 벡터머신, 딥러닝의 인공신경망 등이 있다.

  • 위의 내용들을 총 정리하면 분류모형에는 크게 세가지 종류가 있다.

1) 확률론적인 방법 : 각 클래스에 대한 확률을 다 계산해서 확률을 비교해서 제일 확률값이 높은 것을 찾는 방법

1-1) 확률론적 생성모형 : likelihood를 일일이 다 구한 다음에 거기에서 다시 조건부 확률을 구하는 방법

1-2) 확률론적 판별모형 : 뭐하러 likelihood 때문에 고생하냐 차피 확률은 x의 함수이기 때문에 그 함수의 모양만 찾아내자는 방법

2) 판별함수모형 : 뭐하로 확률을 다 구하냐 경계선, 영역만 구하자