다운로드
작성자: admin 작성일시: 2016-06-02 22:20:54 조회수: 6090 다운로드: 450
카테고리: 시계열 분석 태그목록:

히든 마코프 모형

독립 혼합 모형(Independent Mixuture Model)

독립 혼합 모형(Independent Mixuture Model)은 연속 확률 변수이지만 단일한 확률 분포를 가지지 않고 복수의 연속 확률 분포 중 하나를 확률적으로 선택하는 모형을 말한다. 이 때 연속 확률 분포의 선택은 독립적인 이산 확률분포를 사용한다.

$$ \begin{eqnarray*} p(x) &=& \sum_{i=1}^m {P}(C=i)\cdot {P}(X=x|C=i) \\ &=& \sum_{i=1}^m \delta_i p_i(x) \end{eqnarray*} $$
  • $p(x)$ : 전체 Independent Mixuture 분포
  • $p_i(x)$ : Independent Mixuture의 각 성분(component)이 되는 개별적인 연속 확률분포
  • $\delta_i$ : mixing parameter. 특정시간에 대해 모든 성분 중 특정한 $p_i(x)$가 선택될 확률. 이산 확률 분포
  • $\sum\delta_i = 1$ : mixing parameter에 대한 확률 제한 조건

독립 혼합 모형의 예: 베르누이-정규 혼합 모형

베르누이-정규 혼합 모형(Bernoulli Normal-Mixuture Model)은 베르누이 확률 변수의 값에 따라 두 개의 서로 다른 연속 정규 분포 중 하나를 선택하는 확률 분포이다.

마코프 체인(Markov Chain)

마코프 체인은 다음과 같은 마코프(Markov) 특성을 가지는 이산시간 확률 프로세스를 말한다.

$$ P(C_{t+1} \mid C_t, \cdots, C_1) = P(C_{t+1} \mid C_t) $$

이 때 특정 시간 $t$ 동안 특정한 한 상태 $i$ 에서 특정한 다른 상태 $j$ 로 전이할 확률을 전이 확률(Transition Probability) 이라고 한다.

$$ \gamma_{ij}(t) = P(C_{s+t}=j|C_{s}=i) $$

또한 모든 상태 조합에 대한 전이 확률을 나타낸 것이 전이 확률 행렬(Transition Probability Matirx)이다.

$$ \Gamma(t) = \{ \gamma_{ij}(t) \}, \;\;\; \Gamma = \Gamma(1) $$

체프먼-콜모고로프 방정식(Chapman-Kolmogorov Equation에 의하면 시간 $t+u$ 의 전이확률행렬은 시간 $t$ 의 전이확률행렬과 시간 $u$ 의 전이확률행렬의 곱으로 나타난다.

$$ \Gamma(t+u) = \Gamma(t)\Gamma(u) $$

히든 마코프 모형(Hidden Markov Model)

히든 마코프 모형(Hidden Markov Model)은 독립 혼합 모형에서 연속 확률 분포를 선택하는 이산 확률 과정 $C_t$가 마코프 체인이고 연속 확률 분포$X_t$ 가 그 시점의 이산 확률 과정의 값에만 의존하는 모형을 말한다. 그러나 연속 확률 분포의 값 $X_t$ 만 측정 가능하고 이산 확률 과정의 값 $C_t$ 는 측정할 수 없다.

$$ P(C_t \mid |C_{t-1}, \cdots, C_1) = P(C_t \mid C_{t-1}) $$$$ P(X_t \mid X_t, \cdots, X_1, C_t, \cdots, C_1) = P(X_t \mid C_t) $$

hmmlearn 패키지

Python에는 다양한 HMM 시뮬레이션 및 추정용 패키지가 제공된다. 여기에서는 그 중 하나인 hmmlearn 패키지를 사용해보자.

hmmlearn의 hmm 서브 패키지에서는 다음과 같은 세가지 HMM 모형 클래스를 제공한다.

  • GaussianHMM
    • Hidden Markov Model with Gaussian emissions.
  • GMMHMM
    • Hidden Markov Model with Gaussian mixture emissions.
  • MultinomialHMM
    • Hidden Markov Model with multinomial (discrete) emissions

GaussianHMM 클래스를 사용하면 카테고리-다변수 정규분포 혼합 모형을 시뮬레이션 할 수 있다.

이 때 다음과 같은 속성을 설정할 수 있다.

  • startprob_: 초기 확률 벡터
  • transmat_: 전이 확률 행렬
  • means_: 정규 분포의 기댓값 벡터
  • covars_: 정규 분포의 공분산 행렬

가장 간단한 베르누이-정규 분포를 시험해보자.

In [1]:
from hmmlearn import hmm
np.random.seed(3)

model = hmm.GaussianHMM(n_components=2, covariance_type="diag")
model.startprob_ = np.array([0.9, 0.1])
model.transmat_ = np.array([[0.95, 0.05], [0.15, 0.85]])
model.means_ = np.array([[1.0], [-3.0]])
model.covars_ = np.array([[15.0], [40.0]])
X, Z = model.sample(500)
In [2]:
plt.subplot(311)
plt.plot(X)
plt.title("random variable")
plt.subplot(312)
plt.plot(Z)
plt.title("discrete state")
plt.subplot(313)
plt.plot((1 + 0.01*X).cumprod())
plt.title("X cumulated")
plt.tight_layout()
plt.show()
In [3]:
sns.distplot(X)
plt.show()

디코드

관측된 히든 마코프 모형의 연속 확률 변수 값으로부터 내부의 이산 확률 변수 값을 추정하는 과정을 디코드(decode)라고 한다. 디코드 알고리즘 중 가장 많이 사용되는 것은 Viterbi 알고리즘이다.

hmmlearn 패키지의 HMM 클래스들은 모형 추정을 위한 fit 메서드와 디코딩을 위한 decode 메서드를 제공한다. 다음은 위에서 시뮬레이션한 결과를 디코딩한 예이다.

In [4]:
model2 = hmm.GaussianHMM(n_components=2, n_iter=len(X)).fit(X)
model2
Out:
GaussianHMM(algorithm='viterbi', covariance_type='diag', covars_prior=0.01,
      covars_weight=1, init_params='stmc', means_prior=0, means_weight=0,
      min_covar=0.001, n_components=2, n_iter=500, params='stmc',
      random_state=None, startprob_prior=1.0, tol=0.01, transmat_prior=1.0,
      verbose=False)
In [5]:
Z_hat = model2.decode(X)[1]
X_cum = (1 + 0.01*X).cumprod()
X_cum_hat = X_cum.copy()
X_cum_hat[Z_hat == 0] = np.nan
In [6]:
plt.subplot(211)
plt.plot(X_cum, lw=5)
plt.plot(X_cum_hat, 'r-', lw=5)
plt.title("X cumulated")
plt.subplot(212)
plt.plot(Z, 'bo-')
plt.plot(Z_hat, 'ro-')
plt.title("discrete state")
plt.tight_layout()
plt.show()

질문/덧글

오타 질문드립니다. youn*** 2019년 5월 6일 2:26 오후

다음 문장이
독립 혼합 모형의 예: 베르누이-정규 혼합 모형 (Binomial Normal-Mixuture Model)

이문장이 되어야 하지 않을지 질문드립니다.
독립 혼합 모형의 예: 베르누이-정규 혼합 모형 (Bernoulli Normal-Mixuture Model)

답변: 오타 질문드립니다. 관리자 2019년 5월 10일 9:28 오전

수정하였습니다. 지적 감사합니다.

본문을 읽다가 이해가 안되는 점이 있어서 질문 드려봅니다. youn*** 2019년 5월 6일 2:27 오후

다음 문장의 아래 그림에서
다른 연속 정규 분포 중 하나를 선택하는 확률 분포이다.

(1) 베르누이 확률변수의 값에 따라 하나의 연속 정규분포를 선택하는 것 같은데요.
여기에서 베르누이 확률변수값이 어디에 나와있는지 모르겠습니다. Observation 은 아닌것같고요.
검은색으로 칠해진 곳에 따라 연속정규분포가 선택되는것같은데 베르누이 값은 나와있지 않은건가요?

(2) 베르누이 확률변수가 0 또는 1을 갖는다고 하면, 그 값들과 mixing parameter 가 어떻게 상호작용해서
연속확률변수 하나를 선택하는지 궁금합니다.

(3) observation 이 무엇인지 궁금합니다.

(4) 히든 마코프 모형 그림에서 하얀색원과 검은색원 그리고 화살표에 표시되있는 숫자들과 이산확률 과정 $C_t$ 가 어떻게 하나의 연속확률분포를 선택하는지 헷갈립니다.
첫번째 부분을 보면 0.3, 0.7 에서 0.3 쪽으로 가는것도 궁금하고요.

(5) 이산 확률과정에 의해서 연속확률변수가 선택된다는 문장과 이산 확률 과정의 값은 측정할 수 없다는게 이해가 안됩니다.
이산 확률과정의 값을 알아야 연속확률변수를 선택할 수 있게 되는것이 아닌가요?

답변: 본문을 읽다가 이해가 안되는 점이 있어서 질문 드려봅니다. 관리자 2019년 5월 10일 9:30 오전

(1) 둘 중에 하나를 선택하는 것이 베르누이 분포입니다.
(2) 히든 마코프 모형에서는 실제 메카니즘은 가정하지 않습니다. 그 부분은 현상에 따라 달라집니다.
(3) 우리가 관찰할 수 있는 데이터를 말합니다.
(4) 네트워크 모형을 참고하세요.
(5) 확률 프로세스를 만드는 자연현상은 이산 확률값을 알지만 우리는 모른다는 뜻입니다.