우리는 각 데이터가 어떤 군집에 속하는지 알 수가 없는 상황에서 비슷한 데이터끼리 여러 그룹으로 나누고 싶다.
이렇게 데이터의 라벨을 모르는 상태에서 어떻게 각 비슷한 데이터끼리 그룹으로 구분할 수 있을까?
여기서 우리가 관측한 데이터는 X, 각 데이터가 어느 군집에 속해있는지 나타내는 잠재변수를 Z라고 한다.
예를들어 관측된 데이터가 두 개의 베르누이 분포, 즉 동전 A와 동전 B에서 생성되었다는 사실은 알고 있고 각 동전은 서로 다른 앞면 확률을 가진다고 해보자.
우리는 실험을 통해 동전 A를 10번 던졌을 때 앞면이 7번, 동전 B를 10번 던졌을 때 앞면이 3번 나왔다는 것을 기록했다.
그래서 위 기록을 보면 동전 A의 확률분포는 7/10, 동전 B의 확률분포는 3/10이라는 것을 알 수 있다.
그런데 만약 실험결과가 동전 A를 통해 나온 것인지 동전 B를 사용했는지에 대한 정보가 사라졌다.
우리의 목적은 이 사라진 정보속에서 각 데이터가 어느 동전에서 나왔는지를 알고싶은 것이다. (이를 확률변수로 나타내면, X = 관측된 앞면의 결과, Z = 각 실험결과가 어느 동전에서 생성되었는지를 나타내는 정보가 된다.)
각 실험이 어느 동전에서 나왔는지를 판단하려면, 먼저 동전 A와 B의 앞면 확률 p_A,p_B, 실험에서 두 동전의 사용비율을 알아야 한다.(왜 이것이 필요정보들인지는 아래 예시를 통해 설명한다)
이것을 \(\theta\)라고 하겠다. \(\theta\)는 실험 데이터를 구분하기 위해 필요한 정보들이라 보면된다.
\(\theta\)를 알아야 Z를 구할 수 있고 Z를 알아야 \(\theta\)를 구할 수 있다.
EM알고리즘은 이 문제를 해결해준다.
구체적인 예시를 통해 어떻게 해결하는지 알아보자.
Z와 \(\theta\)를 처음부터 동시에 정확하게 구분하려하지 않는다.
대신 먼저 동전의 앞면 확률을 임의로 설정한다.
이 값들은 처음에는 정확하지 않아도 된다. 현재 임시 파라미터 p_A, p_B가 주어지면 각 실험 결과가 어느 동전에서 나왔을 가능성이 높은지를 계산할 수 있다.
예를들어 동전 A에서 앞면이 나왔을 확률이
동전 B에서 앞면이
나왔을 확률이 0.4라고 해보자
그리고 각 실험에서 동전이 사용되었을 확률이 0.5로 동일하다고 가정해보자.
첫 번째 실험을 통해 관측했던 데이터가 10번의 동전을 던져서 앞면이 7번 나온것이라 해보자.
우리가 구하고 싶은 것은 이 실험이 동전 A로 수행되었을 확률이다.
앞면이 나올 확률이 0.8인 동전 A에서 10번의 시행중 앞면 7번이 나올 확률은
앞면이 나올 확률이 0.4인 동전 B에서 10번의 시행중 앞면 7번이 나올 확률은
가 된다.
우리가 구하고자 하는 것은
였음으로 Bayes정리에 의해
이다.
분모는
이므로 값을 대입하면
이고 분자는
따라서
이번에는 이 실험이 동전 B로 수행되었을 확률은
의미는 첫 번째 실험은 동전 A에서 나왔을 가능성이 약 83%이고 동전 B에서 나왔을 가능성이 약 17%라고 계산된다. 이것을 EM알고리즘 중 E-step이라고 한다.
E-step에서 구한 이 가능성을 이용해서 다음 M-step에서
를 계산한다.
EM은 현재 추정된 각 동전의 앞면 확률을 이용하여 각 실험이 어느 동전에서 나왔을 확률을 계산하고, 그 확률을 바탕으로 각 동전의 앞면 확률을 다시 추정하는 것입니다.
군집분포의 파라미터는 (파이, 뮤, 시그마)로 구성되어있으며 파이는 k번째 군집의 비율, 뮤는 k번째 군집의 중심, 시그마는 k번째 군집의 퍼진 정도와 방향을 나타낸다.
Comment