EDUCATION/DSS Online 6기

DAY38 - 상호정보량

Kululu_ 2021. 3. 9. 09:52

상호정보량

- 상호정보량은 쿨백 라이블러 발산을 이용해 두 확률변수가 독립인지를 판단하는 것입니다.

- 쿨백 라이블러 발산은 두 확률분포의 모양이 얼마나 다른가를 수치로 나타낸 값이므로, 한 확률분포를 $p(x,y)$인 결합확률분포로, 또 다른 확률분포를 $p(x) \times p(y)$로 설정하게 되면 그게 곧 상호정보량이 됩니다.

- 만약 두 확률변수가 독립이라면 $p(x,y)  = p(x)p(y)$이므로 쿨백 라이블러 발산이 0이 되게 됩니다.

- 상호정보량 값이 클 수록 두 확률변수의 상관관계가 강하다고 할 수 있습니다.

- 상관계수(피어슨 상관계수)는 선형 관계만 파악할 수 있는 반면 상호정보량은 그 외에 다른 상관관계도 알아낼 수 있습니다.

 

 

$$ \begin{align} MI[X,Y] = KL\big(p(x,y)||p(x)p(y)\big) = \sum_{i=1}^{K} p(x_i,y_i) \log_2 \left(\dfrac{p(x_i,y_i)}{p(x_i)p(y_i)}\right) \end{align} $$

 

- 파이썬에서는 sklearn.metrics의 mutual_info_score 함수로 구현할 수 있습니다.

 

실제로 밑에서 테스트한 데이터는 X2는 Y랑 아무런 상관없이 항상 0이므로 독립이라는 결과가 나오는 것을 알 수 있습니다.

 

만약 데이터를 테이블형태로 넣는 것이 편하다면 contingency 파라미터를 사용할 수 있습니다.

  Y = 0 Y = 1 Y = 2
X1 = 0 3 1 1
X1 = 1 0 2 2

처음 상호정보량을 계산한 데이터를 테이블형태로 나타내면 이렇게 되는데

테이블 형태로 contingency 에 data1이라고하는 아규먼트를 전달해주면 결과가 똑같이 나오는 것을 알 수 있습니다.

contingency를 사용할 때는 그 앞에 labes_true, labes_pred 자리에 어떤 데이터를 넣더라도 해당 데이터들은 무시하고 contingency에 전달된 테이블 형태의 데이터로 상호정보량을 계산합니다.

 

최대정보 상관계수

- 상호정보량은 두 범주형 확률변수가 독립인지를 판단할 수 있다고 하였는데, 만약 연속확률변수의 표본 데이터에서 상호정보량을 측정하려면 연속한 실수범위를 구간으로 나누어 추정하게 됩니다.

 

- 구간을 나누어 계산하는 과정에서 구간을 나누는 방법에 따라 상호정보량이 달라질 수 있는데, 이러한 점을 고려해 다양한 방법으로 상호정보량을 계산해본 후 가장 큰 값을 선택하여 정규화한 것을 "최대정보 상관계수"라고 합니다.