생각이 담아두는 곳

3. 선형분류모형 본문

CS/ML

3. 선형분류모형

Chang_Tree 2020. 9. 11. 16:49

분류란? 

학습 데이터가 주어졌을 때, 해당 학습 데이터들의 독립변수들을 이용해서 클래스를 예측하는 것

클래스란? 

- 연속된 값이 아닌 특정 그룹들을 상징하는 이산적인 값 

 

일반적으로 클래스를 독립변수들에 대한 함수로 표현하는 모델을 찾아냄

위 표와 같이 골프를 칠 것인지 말 것인지도 분류에 해당한다. 

 

분류 모델을 어떤 것을 쓰느냐에 따라 새로운 데이터가 들어왔을 때, 클래스가 달라질 수 있다.  

 

그렇다면 분류모델의 성능평가는 어떻게 하는가? 

일반적으로 분류문제의 경우, 정확도를 기준으로 성능을 평가 

정확도 = (클래스를 올바르게 분류한 데이터의 수) / (전체 데이터의 수)

 

그러나 정확도를 기준으로 판단할 경우, 클래스가 불균등한 문제에서 원치 않은 결과를 초래할 수 있음

 

위 데이터셋에서 0으로 분류되는 데이터가 1보다 훨씬 많으므로, 0으로 분류하는걸 잘 맞추고 1로 분류하는걸 못하는 모델의 경우, 데이터가 0에 치우쳐 있다보니, 모델의 성능이 좋게 평가될 우려가 있음.  

-> 그렇다면 이러한 문제는 어떤 지표를 통해 걸러낼 수 있을까? 

지난번 선형회귀 문제에서 다중공선성을 파악하기 위해, 우리가 결정계수와 분산팽창계수등을 이용한 것처럼 이 또한 지표를 통해 어느정도 파악할 수 있다. 

 

모델1과 모델2 중에 어떤게 좋은 모델인가? 

아까 배운 Accuracy로 평가하자면 모델2가 더 좋은 모델이라고 볼 수 있다. 

그런데 보면, 모델2는 negative class data가 압도적으로 많은 것을 보고, 무작정 모든 데이터를 negative로 예측했다. 

이를 좋은 모델이라고 할 수 있는가?

Precision 은 내가 positive로 예측한 데이터들 중 실제 positive인 데이터의 비율이다. 

Recall 은 실제 positive 인 데이터 중, 내가 positive로 예측한 데이터의 비율이다.

두 모델을 비교해보면, accuracy는 모델2가 높지만, Recall을 보게 되면, 아예 positive로 예측한 데이터가 없으므로, 0%가 나오게 된다. 

Precision 과 Recall 둘 다 유사해 보이지만, 자세하게는 다르고 뭔 차이인지 이해가 안될수도 있을 것 같다. 

 

1. Precision은 높은데 Recall이 낮은 경우 

이 경우는 모델이 어떤 데이터를 positive라고 분류한 경우, 이 클래스가 맞을 확률은 높은데

실제로는 positive한 데이터가 많지만, 상당 부분을 negative로 예측한 것이다.

 

2. Precision은 낮은데 Recall이 높은 경우 

이 경우는 모델이 실제 positive한 데이터는 positive로 잘 분류하였지만,

negative 한 데이터들도 positive 로 잘못 예측한게 많은 경우이다. 

 

F1-score 라는 것도 있는데 이는

 

와 같다. Precision 과 recall 둘 다 고려하고 싶을 때 보는 지표 (조화평균)

두 개 다 높은 모델을 고르면 되지 않나 라고 반문할 수 있지만, 

Recall 과 Precision은 서로 상충된다. 

잘 생각해보자. Recall 을 높이기 위해서는 Negative로 예측하는 데이터를 더 많이 positive로 예측하게 모델을 수정하면 된다. 다만 이 경우, 당연히, 실제 negative인 데이터들도 positive 라고 예측할 확률이 올라간다.

이렇게 되면 Precision은 분모인 positive로 예측한 데이터의 수는 증가한다. 하지만 분자는 그대로이거나 줄어들 확률이 높다. 그렇게 되면 당연히 Precision은 내려간다. 이렇게 서로 상충되는 관계를 갖는 것이다. 

 

각 10개의 데이터 인스턴스가 있고, 각각의 true class 는 3열과 같다. 

2열은 모델이 각 인스턴스별로 positive로 예측할 확률, 정확하게 말하면 저 확률 이상이면, 그 인스턴스를 positive라고 판단한다는 것이다. 

TPR = Recall 과 같다. 여기서 Thres 가 cut-off인 것이다. 

 

그렇다면 저 두 모델 중 어떤 것을 선택해야할까? 바꿔 말해, 분류 모델의 경우 성능평가 지표로는 무엇이 있을까? 

ROC Curve 라는 것이 있다. 

x,y 축이 방금 전에 배웠던, FPR과 TPR 이고 제일 좋은 이상적인 모델의 경우 (0,1) 에 점이 찍히게 된다. 

이 경우, FPR 은 0, TPR은 1이 된다.

(0,0) 인 모델은 모든 데이터의 레이블을 negative 로

 (1,1) 인 모델은  모든 데이터의 레이블을 positive로 예측한 것이다. 

대각선으로 그려지는 것은 모든 데이터를 랜덤하게 찍은 것이다. (1/2)

 

그렇다면 이 지표를 통해서 어떤 모델이 좋은지 알려면 AOC, ROC 커브의 면적을 비교해보면 된다. 

즉 다시 말해, 좋은 모델일수록, 면적이 크고 좌측상단에 가까운 형태를 보인다. 

기존에 선형회귀분석은 어떠한 이산값이 y값이었지만, 레이블의 경우에는 해당 분류가 불가능하므로, one-hot vector를 생성한다. 

기존의 class를 벡터화 시키는 것인데 이전에 설명한대로, 만약 class가 5개라면 <0,0,1,0,0> 이런 식으로 해당하는 클래스의 원소는 1로 나머지는 0으로 설정하여 벡터화 시킨다. 

위처럼 함수를 만들어 계산하면, 새로운 데이터를 넣었을 때, <0.7, 0.4, 0.01, 0.1, 0.4> 이런 식으로 결과가 나온다면, 클래스1로 분류될 가능성이 높은 것이다. 

위 그림은 최소제곱법으로 분류 문제를 왜 해결하지 않는지 보여주는 예시이다. 

좌측그림은 잘 분류된 것처럼 보이지만 우측그림처럼 outlier가 있는 경우(우측 하단) 최소제곱법에 의해 선이 아래로 당겨지는데, 이는 그리 좋은 분류모델은 아니다. 따라서 최소제곱법은 분류 문제를 풀 때 사용되지 않는다. 

그렇다면 분뮤 문제에서는 무엇을 활용할까? 

 

첫번째로 소개하는 것은 Linear Discriminant Analysis , 선형 판별 분석(LDA)이다

 

이 방법을 사용하기 위해서는 아래 식을 구해야한다. 

확률인데, 우변의 분자부분이 f_k*π , f_k 는 우도함수, π는 사전확률을 의미한다.

우리가 구하려는 좌측의 확률은 의미하는 바가, 독립변수 x 가 주어졌을 때, 이 데이터가 k라는 클래스에 속할 확률이다. 

 

사전확률은 우리가 이미 알고 있다고 가정하에 출발한다. 혹시나 모른다면, 모든 클래스에 속할 확률을 동등하게 부여, 1/k로 설정한다.

우도함수는 클래스가 주어졌을 때, x가 속할 확률을 의미한다. LDA에서는 이 우도함수는 가우시안 분포를 따른다고 가정한다. 

위 식을 보게되면, 평균과 공분산 항을 볼 수 있는데, μ 와 Σ, 선형판별분석에서는 확률밀도함수의 공분산이 클래스별로 모두 같다고 가정한다. 

모든 클래스의 확률밀도함수의 공분산이 서로 같다. 

 

위 값이 0보다 크다면, 주어진 데이터는 클래스가 k 라고 판정되는 것이고, 작다면, l이라고 판정되는 것이다. 

또한 식을 풀어보면, x에 대한 선형식임을 알 수 있다. 

당연하지만, 같을 때가 decision boundary 이다. 즉 위 값이 0일 때
로그를 취한 가우시안 분포식

위에서는 평균과 공분산을 안다는 가정하에 모델을 만들었지만 현실에서는 아래와 같이 추정한다. 

차례대로 

전체 데이터 중, 그 클래스가 차지하는 비율 

클래스에 속한 데이터의 합/그 클래스에 속한 데이터의 수

공분산식, 위에서 구한, 사전확률과 평균을 이용해서 계산하면 된다. 

 

각 클래스별 공분산이 같다는 가정하에 출발한 LDA 였지만, 다르다는 가정하에는 Quadratic Discriminant Analysis (QDA) 를 사용할 수 있다. 

LDA를 다른 관점으로 살펴보면, 서로 다른 클래스끼리는 차이를 최대화하고, 같은 클래스 내에서의 차이는 최소화를 하는 것이다. 

위 그래프를 보게 되면, 기존의 좌측 그래프에서 decision boundary 를 우측처럼 그린 것을 알 수 있다. 직선 하단 분포를 보면, 겹치는 부분이 줄었고, 각 분포의 분산이 작아진 것을 알 수 있다. 

부끄럽지만 이 식에 대한 이해는 아직 부족하다. 단지 다른 관점으로 바라보아도 원하는 결과를 도출해낼 수 있다는게 요지이다. 

 

두번째로 소개하는 것은 로지스틱 회귀이다.

분류문제를 푸는데 웬 회귀라고 하실 수 있지만 로지스틱 회귀를 분류가 가능하게 확장한 모형이라고 생각하면 된다. 

다만 Target variable 이 categorical variable 형태인 class이어야 한다. 

categorical variable ? -> 질적 변수, 양적변수와는 다르게 남자 =1 여자 =0 으로 분류하였다면, 0.5는 아무런 의미가 없음 

로지스틱 회귀 분류는 가장 단순한 선형분류모형 중 하나로 

각 클래스의 속할 확률을 0~1 사이로 제공해주고 당연히 각 클래스별 확률을 다 더하면 1이다.

고양이 사진이 주어지고 그 사진이 고양이인지, 개인지 구분하는 문제가 있다고 하면, 고양이일 확률이 87% 라고 제시되는 예시와 같다.

이처럼 분모에 기준이 되는 확률을 넣고(일반적으로, 마지막 클래스) 

데이터가 각 클래스에 속할사후확률의 비율이 독립변수 x들과 선형의 관계를 이루고 있다고 가정하는 것이다. 

위 식들을 연립해서 풀면 아래와 같다. 



마지막 클래스인 K 일 때를 제외하고, 나머지는 위 식으로 표현되면, K인 경우만 아래와 같이 표현된다. 

저런 형태의 함수를 로지스틱 함수라고 한다. 하단은 로지스틱 함수식과 성질들.

아래는 이진분류에서의 로그우도함수로, cross-entropy 로 불린다. 이는 추후 딥러닝 소개글에서 자세히 다룬다. 

이 또한 정규화과정을 거칠 수 있다. 아래는 Lasso 식 정규화. 

계수들이 0이 되면 계속 0으로 유지하는 것을 볼 수 있다. 

로지스틱 회귀 분석 예시, 아래에 로그 우도 함수 L을 최대로 만드는 계수를 구한다. 

 

'CS > ML' 카테고리의 다른 글

3. 선형분류모형 - 실습  (0) 2020.09.14
2. 선형회귀분석(2) - 실습  (0) 2020.09.10
2. 선형회귀분석(2)  (0) 2020.09.08
1. 선형회귀분석 - 실습  (0) 2020.09.04
1. 선형회귀분석  (0) 2020.09.03
Comments