다운로드
작성자: admin 작성일시: 2019-07-27 17:04:13 조회수: 195 다운로드: 12
카테고리: 기초 수학 태그목록:

10.2 조건부엔트로피

이 절에서는 확률변수가 두 개 이상인 다변수 확률변수에서 엔트로피를 정의하는 방법을 설명한다.

결합엔트로피

결합엔트로피(joint entropy) 다변수 확률변수에서 정의한 엔트로피를 말한다.

이산확률변수 $X$, $Y$에 대해 결합엔트로피는 다음처럼 정의한다.

$$ H[X, Y] = - \sum_{i=1}^{K_X} \sum_{j=1}^{K_Y} \,p(x_i, y_j) \log_2 p(x_i, y_j) $$

이 식에서 $K_X$, $K_Y$는 각각 X와 Y가 가질 수 있는 값의 개수고 $p$는 확률질량함수다.

연속확률변수 $X$, $Y$에 대해 결합엔트로피는 다음처럼 정의한다.

$$ H[X, Y] = - \int_{x} \int_{y} \,p(x, y) \log_2 p(x, y) \; dxdy $$

이 식에서 $p$는 확률밀도함수다.

결합엔트로피도 확률변수가 여러개라는 점을 제외하면 일반적인 엔트로피와 같다. 모든 경우에 대해 골고루 확률이 분포되어 있으면 엔트로피값이 커지고 특정한 한 가지 표본에 대해 확률이 모여있으면 엔트로피가 0에 가까와진다.

조건부엔트로피

조건부엔트로피(conditional entroy)는 두 확률변수 $X$, $Y$의 상관관계를 측정하는 방법 중 하나다. 만약 확률변수 $X$, $Y$간에 어떤 상관관계가 있다면 $X$의 값이 달라짐에 따라 $y$의 분포, 나아가서 $Y$의 엔트로피가 달라질 것이다. 조건부엔트로피는 확률변수 $X$가 달라질 때 $Y$의 엔트로피가 어떤 값이 되는지를 구한다.

확률변수 $X$, $Y$가 모두 이산확률변수라고 가정하고 $X$가 특정한 값 $x_i$를 가질 때의 $Y$의 엔트로피 $H[Y \mid X=x_i]$는 다음처럼 조건부확률분포의 엔트로피로 정의한다.

$$ H[Y \mid X=x_i] = - \sum_{j=1}^{K_Y} p(y_j \mid x_i) \log_2 p(y_j \mid x_i) $$

조건부엔트로피는 확률변수 $X$가 가질 수 있는 모든 경우에 대해 $H[Y \mid X=x_i]$를 가중평균한 값으로 정의한다.

$$ \begin{align} H[Y \mid X] &= \sum_{i=1}^{K_X} \,p(x_i)\,H[Y \mid X=x_i] \\ &= - \sum_{i=1}^{K_X} \sum_{j=1}^{K_Y} p(y_j \mid x_i)p(x_i) \log_2 p(y_j \mid x_i) \\ &= - \sum_{i=1}^{K_X} \sum_{j=1}^{K_Y} p(x_i, y_j) \log_2 p(y_j \mid x_i) \\ \end{align} $$

연속확률변수의 경우에는 다음과 같다.

$$ H[Y \mid X=x] = - \int_{y} p(y \mid x) \log_2 p(y \mid x)\; dy $$$$ \begin{align} H[Y \mid X] &= - \int_{x} \,p(x) \,H[Y \mid X=x] \; dx \\ &= - \int_{x} p(x) \left( \int_{y} p(y \mid x) \log_2 p(y \mid x)\; dy \right) \; dx \\ &= - \int_{x} \int_{y} p(y \mid x_i) p(x) \log_2 p(y \mid x) \; dxdy \\ &= - \int_{x} \int_{y} \,p(x, y) \log_2 p(y \mid x) \; dxdy \\ \end{align} $$

따라서 조건부엔트로피의 최종적인 정의는 다음과 같다.

이산확률변수의 경우에는 다음처럼 정의한다.

$$ H[Y \mid X] = - \sum_{i=1}^{K_X} \sum_{j=1}^{K_Y} \,p(x_i, y_j) \log_2 p(y_j \mid x_i) $$

연속확률변수의 경우에는 다음처럼 정의한다.

$$ H[Y \mid X] = - \int_{x} \int_{y} \,p(x, y) \log_2 p(y \mid x) \; dxdy $$

상관관계가 없는 경우의 조건부엔트로피

예를 들어 두 확률변수 $X$, $Y$ 값의 관계가 다음과 같다고 하자. 이 두 확률변수는 서로 독립이다.

$Y = 0$ $Y = 1$
$X = 0$ $\frac{1}{9}$ $\frac{2}{9}$
$X = 1$ $\frac{2}{9}$ $\frac{4}{9}$

$X=0, X=1$일 때의 조건부확률분포에 대한 $Y$의 엔트로피는 0.92다.

$$ H[Y \mid X=0] = H[Y \mid X=1] = -\frac{1}{3} \log_2 \frac{1}{3} -\frac{2}{3} \log_2 \frac{2}{3} \approx 0.92 $$
In [1]:
sp.stats.entropy([1/3, 2/3], base=2)
Out:
0.9182958340544894

이 값을 가중평균하면 조건부엔트로피값은 0.92다.

$$ H[Y|X] = \frac{1}{3} H[Y \mid X=0] + \frac{2}{3} H[Y \mid X=1] \approx 0.92 $$
In [2]:
plt.figure(figsize=(8, 4))
ax1 = plt.subplot(121)
pXY = [[1/9, 2/9], [2/9, 4/9]]
sns.heatmap(pXY, annot=True, cbar=False)
plt.xlabel("Y")
plt.ylabel("X")
plt.title("결합확률분포 p(X,Y), H[X,Y]=1.84")

plt.subplot(222)
plt.bar([0, 1], [1/3, 2/3])
plt.ylim(0, 1)
plt.title("조건부확률분포 p(Y|X=0)")

plt.subplot(224)
plt.bar([0, 1], [1/3, 2/3])
plt.ylim(0, 1)
plt.title("조건부확률분포 p(Y|X=1)")

plt.tight_layout(w_pad=5)
plt.suptitle("조건부엔트로피 H[Y|X]=0.92", y=1.05)
plt.show()

상관관계가 있는 경우의 조건부엔트로피

이번에는 두 확률변수 $X$, $Y$간에 상관관계가 있는 경우로를 살펴보자. 예를 들어 $X$, $Y$ 값의 관계가 다음과 같다고 하자.

$Y = 0$ $Y = 1$
$X = 0$ 0.4 0.0
$X = 1$ 0.0 0.6

그런데 $X=0, X=1$일 때의 조건부확률분포에 대한 $Y$의 엔트로피는 모두 0이다.

$$ H[Y \mid X=0] = 0 $$$$ H[Y \mid X=1] = 0 $$

따라서 조건부엔트로피도 0이 된다.

$$ H[Y|X] = 0 $$
In [3]:
plt.figure(figsize=(8, 4))
ax1 = plt.subplot(121)
pXY = [[0.4, 0], [0, 0.6]]
sns.heatmap(pXY, annot=True, cbar=False)
plt.xlabel("Y")
plt.ylabel("X")
plt.title("결합확률분포 p(X,Y), H[X,Y]=1.85")

plt.subplot(222)
plt.bar([0, 1], [1, 0])
plt.ylim(0, 1)
plt.title("조건부확률분포 p(Y|X=0)")

plt.subplot(224)
plt.bar([0, 1], [0, 1])
plt.ylim(0, 1)
plt.title("조건부확률분포 p(Y|X=1)")

plt.tight_layout(w_pad=5)
plt.suptitle("조건부엔트로피 H[Y|X]=0.85", y=1.05)
plt.show()

확률변수가 독립일 때보다 상관관계가 있을 때 조건부엔트로피값이 더 작아진 것을 알 수 있다. 두 확률변수 $X,Y$간에 상관관계가 있으면 $X$값이 고정된 경우의 $Y$의 조건부확률분포가 한 쪽으로 집중이 되는 현상이 발생한다. 이렇게 되면 엔트로피값이 작아지므로 이를 평균한 전체적인 조건부엔트로피값이 작아진다.

조건부엔트로피를 사용한 스팸메일 분류문제

조건부엔트로피의 개념을 스팸메일 분류문제를 통해 알아보자. 스팸메일 분류모형을 만들기 위한 학습용 메일 데이터가 80개 있다. 이 중 40개가 정상 메일($Y=0$), 40개가 스팸 메일($Y=1$)이라고 가정하다.

스팸메일인지 아닌지를 특정 키워드가 존재하는지($X=1$) 혹은 존재하지 않는지($X=0$)의 여부로 알아보고자 한다. 키워드 후보로는 $X_1$, $X_2$, $X_3$ 세가지가 있다.

$X_1$, $Y$의 관계는 다음과 같다.

$Y = 0$ $Y = 1$
$X_1 = 0$ 30 10 40
$X_1 = 1$ 10 30 40
40 40 80

$X_2$, $Y$의 관계는 다음과 같다.

$Y = 0$ $Y = 1$
$X_2 = 0$ 20 40 60
$X_2 = 1$ 20 0 20
40 40 80

$X_3$, $Y$의 관계는 다음과 같다.

$Y = 0$ $Y = 1$
$X_3 = 0$ 0 40 40
$X_3 = 1$ 40 0 40
40 40 80

이 세가지 키워드 중 하나만 골라야 한다면 어떤 키워드가 가장 좋은 키워드인가? 당연히 $X_3$다. 그렇다면 $X_1$과 $X_2$ 중에서는 누가 더 좋은 키워드인가?

조건부엔트로피값을 사용하면 이 문제를 해결할 수 있다. 조건부엔트로피값이 가장 작아지는 것이 가장 좋은 키워드일 것이다.

$X_1,Y$의 조건부엔트로피는 다음과 같이 계산한다.

$$ \begin{aligned} H[Y \mid X_1 ] &= p(X_1=0)\,H[Y \mid X_1=0] + p(X_1=1)\,H[Y \mid X_1=1] \\ &= \dfrac{40}{80} \cdot 0.81 + \dfrac{40}{80} \cdot 0.81 = 0.81 \end{aligned} $$

$X_2,Y$의 조건부엔트로피는 다음과 같이 계산한다.

$$ \begin{aligned} H[Y \mid X_2 ] &= p(X_2=0)\,H[Y \mid X_2=0] + p(X_2=1)\,H[Y \mid X_2=1] \\ &= \dfrac{60}{80} \cdot 0.92 + \dfrac{20}{80} \cdot 0 = 0.69 \end{aligned} $$

$X_1,Y$의 조건부엔트로피는 다음과 같이 계산한다.

$$ \begin{aligned} H[Y \mid X_3 ] &= p(X_3=0)\,H[Y \mid X_3=0] + p(X_2=1)\,H[Y \mid X_3=1] = 0 \end{aligned} $$

조건부엔트로피의 값으로부터 $X_2$가 $X_1$보다 좋은 키워드임을 알 수 있다. 의사결정나무(decision tree)라는 분류모형은 조건부엔트로피를 사용하여 가장 좋은 특징값과 기준을 찾는다.

조건부엔트로피를 사용한 붓꽃 분류문제

다음은 붓꽃 데이터 중 세토사(setosa)와 베르시칼라(versicolor) 종의 데이터만 임포트하는 코드다.

In [4]:
from sklearn.datasets import load_iris

iris = load_iris()
idx = np.in1d(iris.target, [0, 1])
X = iris.data[idx, :]
y = iris.target[idx]
df = pd.DataFrame(X, columns=iris.feature_names)
df["species"] = iris.target[idx]
df.tail()
Out:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) species
95 5.7 3.0 4.2 1.2 1
96 5.7 2.9 4.2 1.3 1
97 6.2 2.9 4.3 1.3 1
98 5.1 2.5 3.0 1.1 1
99 5.7 2.8 4.1 1.3 1

꽃받침의 길이(sepal length)로 두 종을 구별하고 싶다고 하자. 기준값을 무엇으로 정해야 할까?

만약 5.4cm를 기준으로 구분하면 다음과 같다.

In [5]:
df["X1"] = df["sepal length (cm)"] > 5.6
pivot_table1 = df.groupby(["X1", "species"]).size().unstack().fillna(0)
pivot_table1
Out:
species 0 1
X1
False 47 16
True 3 34

이 때의 조건부엔트로피는 0.67이다.

In [6]:
def cond_entroy(v):
    eps = np.finfo("float").eps
    pYX0 = v[0, :] / np.sum(v[0, :])
    pYX1 = v[1, :] / np.sum(v[1, :])
    HYX0 = sp.stats.entropy(pYX0, base=2)
    HYX1 = sp.stats.entropy(pYX1, base=2)
    HYX = np.sum(v, axis=1) @ [HYX0, HYX1] / np.sum(v)
    return HYX

cond_entroy(pivot_table1.values)
Out:
0.6652410957524191

5.6cm를 기준으로 구분하면 다음과 같다.

In [7]:
df["X2"] = df["sepal length (cm)"] > 5.4
pivot_table2 = df.groupby(["X2", "species"]).size().unstack()
pivot_table2
Out:
species 0 1
X2
False 45 6
True 5 44

이 때의 조건부엔트로피는 0.50이다.

In [8]:
cond_entroy(pivot_table2.values)
Out:
0.49946678768551295

따라서 5.4cm를 기준값으로 잡는 것이 더 좋은 선택이다.

연습 문제 10.2.1

(1) 붓꽃 데이터에서 꽃받침의 길이(sepal length)의 최솟값과 최댓값 구간을 0.5 간격으로 나누어 각각의 값을 기준값으로 하였을 때 조건부엔트로피가 어떻게 변하는지 그래프로 그려라.

(2) 꽃받침의 길이를 특징으로 사용하였을 때 어떤 값을 기준값으로 하는 것이 가장 좋은가?

(3) 꽃받침의 폭(sepal width)에 대해 위의 분석을 실시하라. 이 때는 기준값이 어떻게 되는가?

(4) 꽃받침의 길이(sepal length)와 꽃받침의 폭(sepal width) 중 하나를 특징으로 선택해야 한다면 어떤 것을 선택해야 하는가?

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!