MCP HubMCP Hub
스킬 목록으로 돌아가기

fit-hidden-markov-model

pjt222
업데이트됨 Yesterday
3 조회
17
2
17
GitHub에서 보기
기타general

정보

이 스킬은 잠재 상태를 가진 시계열 데이터에 대해 Baum-Welch EM 알고리즘을 사용하여 은닉 마르코프 모델을 적합시킵니다. 상태 시퀀스에 대한 비터비 디코딩, 순방향-역방향 확률, 그리고 다양한 은닉 상태 수 간의 모델 선택 기능을 제공합니다. 관측값이 관찰되지 않은 잠재 상태에서 비롯되는 금융, 음성 또는 생물학적 시퀀스의 체제 분할에 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/fit-hidden-markov-model

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서

Fit Hidden Markov Model

Ajustar un modelo oculto de Markov (HMM) a datos de observación secuenciales usando el algoritmo de expectativa-maximización de Baum-Welch, decodificar la secuencia de estados ocultos más probable vía Viterbi, y seleccionar el número óptimo de estados ocultos mediante criterios de información.

Cuándo Usar

  • Observas una secuencia de emisiones pero los estados generativos subyacentes no son directamente observables
  • Sospechas que tus datos son generados por un sistema que alterna entre un número finito de regímenes
  • Necesitas segmentar una serie temporal en fases latentes (ej., regímenes de mercado, fonemas del habla, anotación de secuencias biológicas)
  • Quieres calcular la probabilidad de una secuencia observada bajo un modelo generativo
  • Necesitas la secuencia de estados ocultos más probable dadas las observaciones (decodificación)
  • Estás comparando modelos con diferentes números de estados ocultos para el mejor compromiso complejidad-ajuste

Entradas

Requerido

EntradaTipoDescripción
observationssecuencia/matrizSecuencia de datos observados (univariante o multivariante)
n_hidden_statesenteroNúmero de estados ocultos a ajustar (o un rango para selección de modelo)
emission_typecadenaFamilia de distribución para emisiones: "gaussian", "discrete", "poisson", "multinomial"

Opcional

EntradaTipoDefectoDescripción
initial_paramsdictaleatorio/heurísticoMatriz de transición inicial, parámetros de emisión y probabilidades iniciales
n_restartsentero10Número de reinicios aleatorios para mitigar óptimos locales
max_iterationsentero500Iteraciones EM máximas por reinicio
convergence_tolflotante1e-6Umbral de convergencia de log-verosimilitud para EM
state_rangelista de enteros[n_hidden_states]Rango de conteos de estados para selección de modelo
covariance_typecadena"full"Para emisiones gaussianas: "full", "diagonal", "spherical"
regularizationflotante1e-6Constante pequeña añadida a la diagonal de matrices de covarianza para prevenir singularidad

Procedimiento

Paso 1: Definir Estados Ocultos y Modelo de Observación

1.1. Especificar el número de estados ocultos K (o un rango candidato para selección de modelo en el Paso 5).

1.2. Elegir la familia de distribución de emisión basándose en el tipo de datos:

  • Datos continuos: Gaussiana (univariante o multivariante)
  • Datos de conteo: Poisson o binomial negativa
  • Datos categóricos: discreta/multinomial

1.3. Definir los componentes del modelo:

  • Matriz de transición A de tamaño K x K: A[i,j] = P(z_t = j | z_{t-1} = i)
  • Parámetros de emisión theta_k para cada estado k: específicos de la distribución (ej., media y covarianza para gaussiana)
  • Distribución de estado inicial pi: pi[k] = P(z_1 = k)

1.4. Verificar que los datos de observación estén correctamente formateados: sin valores faltantes en la secuencia, dimensionalidad consistente y longitud suficiente relativa al número de parámetros.

Esperado: Una arquitectura HMM claramente especificada con K estados, una familia de emisión elegida y datos de observación limpios de longitud T >> K^2.

En caso de fallo: Si los datos contienen valores faltantes, imputar o eliminar los segmentos afectados. Si T es demasiado pequeño relativo a K, reducir K o adquirir más datos.

Paso 2: Inicializar Parámetros

2.1. Generar parámetros iniciales para cada uno de los n_restarts reinicios:

  • Matriz de transición: Matriz estocástica aleatoria (cada fila extraída de una distribución de Dirichlet) o una matriz uniforme ligeramente perturbada.
  • Parámetros de emisión: Usar clustering K-means sobre las observaciones para inicializar medias; calcular varianzas de clusters para emisiones gaussianas.
  • Distribución inicial: Uniforme o proporcional a tamaños de clusters de K-means.

2.2. Para el primer reinicio, usar la inicialización informada por K-means (generalmente el inicio más fuerte). Para reinicios posteriores, usar perturbaciones aleatorias.

2.3. Verificar que todos los parámetros iniciales sean válidos:

  • Las filas de la matriz de transición suman 1 con todas las entradas positivas.
  • Los parámetros de emisión están en el dominio válido (ej., las matrices de covarianza son definidas positivas).
  • La distribución inicial suma 1.

Esperado: n_restarts conjuntos de parámetros iniciales válidos, con al menos una inicialización basada en datos.

En caso de fallo: Si K-means falla en converger, usar inicialización puramente aleatoria con más reinicios. Si las matrices de covarianza son singulares, agregar la constante de regularización a la diagonal.

Paso 3: Ejecutar Baum-Welch EM para Estimación de Parámetros

3.1. Paso-E (algoritmo Forward-Backward):

  • Calcular probabilidades forward alpha[t,k] = P(o_1,...,o_t, z_t=k | modelo) usando la recursión:
    • alpha[1,k] = pi[k] * b_k(o_1)
    • alpha[t,k] = sum_j(alpha[t-1,j] * A[j,k]) * b_k(o_t)
  • Calcular probabilidades backward beta[t,k] = P(o_{t+1},...,o_T | z_t=k, modelo):
    • beta[T,k] = 1
    • beta[t,k] = sum_j(A[k,j] * b_j(o_{t+1}) * beta[t+1,j])
  • Calcular posterior de estado gamma[t,k] = P(z_t=k | O, modelo):
    • gamma[t,k] = alpha[t,k] * beta[t,k] / P(O | modelo)
  • Calcular posterior de transición xi[t,i,j] = P(z_t=i, z_{t+1}=j | O, modelo).

3.2. Paso-M (Re-estimación de parámetros):

  • Actualizar matriz de transición: A[i,j] = sum_t(xi[t,i,j]) / sum_t(gamma[t,i])
  • Actualizar parámetros de emisión usando estadísticos suficientes ponderados:
    • Media gaussiana: mu_k = sum_t(gamma[t,k] * o_t) / sum_t(gamma[t,k])
    • Covarianza gaussiana: matriz de dispersión ponderada más regularización
    • Discreta: b_k(v) = sum_t(gamma[t,k] * I(o_t=v)) / sum_t(gamma[t,k])
  • Actualizar distribución inicial: pi[k] = gamma[1,k]

3.3. Calcular log-verosimilitud: log P(O | modelo) = log sum_k(alpha[T,k]). Usar el truco log-sum-exp para prevenir desbordamiento inferior.

3.4. Escalado: Usar variables forward-backward escaladas para prevenir desbordamiento numérico inferior en secuencias largas. Normalizar alpha en cada paso temporal y acumular factores de escalado logarítmicos.

3.5. Repetir Paso-E y Paso-M hasta que el cambio en log-verosimilitud esté por debajo de convergence_tol o se alcance max_iterations.

3.6. A través de todos los reinicios, mantener el conjunto de parámetros con la log-verosimilitud final más alta.

Esperado: Log-verosimilitud monótonamente no decreciente a través de las iteraciones, convergiendo dentro de max_iterations. Los parámetros finales son válidos (matrices estocásticas, covarianzas definidas positivas).

En caso de fallo: Si la log-verosimilitud decrece, hay un error en el Paso-E o Paso-M — verificar las fórmulas. Si la convergencia es muy lenta, intentar mejor inicialización o aumentar max_iterations. Si la covarianza se vuelve singular, aumentar la regularización.

Paso 4: Aplicar Decodificación de Viterbi para la Secuencia de Estados Más Probable

4.1. Inicializar variables de Viterbi:

  • delta[1,k] = log(pi[k]) + log(b_k(o_1))
  • psi[1,k] = 0 (sin predecesor)

4.2. Recurrir hacia adelante para t = 2,...,T:

  • delta[t,k] = max_j(delta[t-1,j] + log(A[j,k])) + log(b_k(o_t))
  • psi[t,k] = argmax_j(delta[t-1,j] + log(A[j,k]))

4.3. Terminar:

  • z*_T = argmax_k(delta[T,k])
  • Log-probabilidad de la mejor ruta: max_k(delta[T,k])

4.4. Retroceder para t = T-1,...,1:

  • z*_t = psi[t+1, z*_{t+1}]

4.5. Generar la secuencia de estados decodificada z* = (z*_1, ..., z*_T) y su log-probabilidad.

4.6. Comparar la probabilidad de la ruta de Viterbi con la probabilidad total de la secuencia del algoritmo forward para evaluar cuán dominante es la mejor ruta.

Esperado: Una única secuencia de estados más probable de longitud T con cada entrada en {1,...,K}. La log-probabilidad de Viterbi debería ser menor o igual a la log-verosimilitud total.

En caso de fallo: Si la ruta de Viterbi tiene log-probabilidad de infinito negativo, alguna probabilidad de transición o emisión es cero donde no debería serlo. Agregar valores mínimos para prevenir log(0).

Paso 5: Realizar Selección de Modelo (BIC/AIC a Través de Órdenes de Modelo)

5.1. Para cada número candidato de estados ocultos K en state_range, ajustar el HMM completo (Pasos 2-4).

5.2. Calcular el número de parámetros libres p:

  • Matriz de transición: K * (K - 1) (cada fila es un símplex)
  • Parámetros de emisión: depende de la familia (ej., gaussiana con covarianza completa en d dimensiones: K * (d + d*(d+1)/2))
  • Distribución inicial: K - 1

5.3. Calcular criterios de información:

  • BIC = -2 * log_verosimilitud + p * log(T)
  • AIC = -2 * log_verosimilitud + 2 * p
  • AICc = AIC + 2*p*(p+1) / (T - p - 1) (corrección para muestras pequeñas)

5.4. Seleccionar el modelo con el BIC más bajo (preferido por consistencia) o AIC (preferido para predicción). Reportar ambos.

5.5. Tabular resultados: para cada K, mostrar log-verosimilitud, número de parámetros, BIC, AIC y estado de convergencia.

5.6. Si el K óptimo está en la frontera de state_range, extender el rango y re-ajustar.

Esperado: Un mínimo claro en BIC/AIC que identifique el número óptimo de estados ocultos. El modelo seleccionado debería haber convergido y tener significados de estado interpretables.

En caso de fallo: Si no existe un mínimo claro (BIC monótonamente decreciente), el modelo puede estar mal especificado — considerar una familia de emisión diferente. Si todos los modelos tienen log-verosimilitud pobre, los datos pueden no seguir una estructura HMM.

Paso 6: Validar con Datos Retenidos y Decodificación Posterior

6.1. Dividir datos en conjuntos de entrenamiento y validación (ej., 80/20 o usar múltiples secuencias si están disponibles).

6.2. Ajustar el modelo con datos de entrenamiento. Calcular la log-verosimilitud en datos retenidos usando el algoritmo forward (no re-ajustar parámetros).

6.3. Decodificación posterior (alternativa a Viterbi):

  • Para cada paso temporal, asignar el estado con la mayor probabilidad posterior: z^_t = argmax_k(gamma[t,k])
  • Esto maximiza el número esperado de estados correctamente decodificados (vs. Viterbi que maximiza la probabilidad conjunta de la ruta).

6.4. Comparar decodificación de Viterbi y posterior:

  • Calcular la tasa de acuerdo entre las dos secuencias decodificadas.
  • Las regiones de desacuerdo indican asignaciones de estado ambiguas.

6.5. Evaluar la interpretabilidad de los estados:

  • Examinar los parámetros de emisión para cada estado (medias, varianzas, distribuciones discretas).
  • Verificar que los estados correspondan a regímenes significativos en el contexto del dominio.
  • Verificar que los tiempos de permanencia en estado (implicados por la diagonal de A) sean razonables.

6.6. Calcular la log-verosimilitud de datos retenidos por observación y comparar a través de órdenes de modelo para confirmar la selección de modelo del conjunto de entrenamiento.

Esperado: La log-verosimilitud de datos retenidos es razonablemente cercana a la log-verosimilitud de entrenamiento (sin sobreajuste severo). La decodificación de Viterbi y posterior coinciden en 90%+ de los pasos temporales. Los estados tienen distribuciones de emisión distintas e interpretables.

En caso de fallo: Si la verosimilitud retenida es mucho peor que la de entrenamiento, el modelo está sobreajustando — reducir K o aumentar la regularización. Si los estados no son interpretables, intentar diferentes inicializaciones o una familia de emisión diferente.

Validación

  • La log-verosimilitud es monótonamente no decreciente a través de las iteraciones de Baum-Welch para cada reinicio
  • La matriz de transición es fila-estocástica (filas suman 1, todas las entradas no negativas)
  • Los parámetros de emisión están en el dominio válido (covarianzas definidas positivas, distribuciones de probabilidad válidas)
  • La log-probabilidad de la ruta de Viterbi no excede la log-probabilidad total de la secuencia
  • Las curvas de BIC/AIC muestran un mínimo claro en el orden de modelo seleccionado
  • La log-verosimilitud de datos retenidos confirma que el modelo generaliza más allá del conjunto de entrenamiento
  • Los cálculos de probabilidad forward y backward concuerdan: P(O) = sum_k(alpha[T,k]) = sum_k(pi[k] * b_k(o_1) * beta[1,k])

Errores Comunes

  • Óptimos locales en EM: El algoritmo de Baum-Welch converge a un máximo local, no necesariamente al global. Siempre usar múltiples reinicios aleatorios y seleccionar el mejor.
  • Desbordamiento numérico inferior: Las probabilidades forward-backward se reducen exponencialmente con la longitud de la secuencia. Usar cómputo en espacio logarítmico o variables escaladas para prevenir desbordamiento inferior a cero.
  • Sobreajuste con demasiados estados: Cada estado oculto adicional agrega O(K + d^2) parámetros. Usar BIC (no solo verosimilitud) para selección de modelo y validar con datos retenidos.
  • Intercambio de etiquetas: Los estados ocultos son identificables solo hasta permutación. Al comparar modelos entre reinicios, emparejar estados por parámetros de emisión, no por índice.
  • Estados degenerados: Un estado puede colapsar para explicar una única observación (gaussiana con varianza cercana a cero). La regularización en matrices de covarianza previene esto.
  • Confundir Viterbi y decodificación posterior: Viterbi da la única mejor ruta conjunta; la decodificación posterior da el mejor estado marginal en cada paso temporal. Responden preguntas diferentes y pueden diferir significativamente.
  • Ignorar tiempos de permanencia en estado: La distribución geométrica de tiempo de permanencia implícita en los HMM estándar puede ser un ajuste pobre para datos con duraciones de régimen largas. Considerar modelos ocultos semi-Markov si los tiempos de permanencia no son geométricos.

Habilidades Relacionadas

  • Model Markov Chain -- prerrequisito para entender la estructura de transición que subyace a la capa oculta
  • Simulate Stochastic Process -- puede usarse para generar datos HMM sintéticos para pruebas y para simular a partir de un modelo ajustado para verificaciones predictivas posteriores

GitHub 저장소

pjt222/agent-almanac
경로: i18n/es/skills/fit-hidden-markov-model
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

llamaguard

기타

LlamaGuard는 폭력 및 혐오 발언 등 6가지 안전 범주에서 LLM 입력과 출력을 조정하기 위한 Meta의 70-80억 파라미터 모델입니다. 94-95% 정확도를 제공하며 vLLM, Hugging Face 또는 Amazon SageMaker를 사용해 배포할 수 있습니다. 이 기술을 사용하여 AI 애플리케이션에 콘텐츠 필터링 및 안전 가드레일을 손쉽게 통합하세요.

스킬 보기

cost-optimization

기타

이 Claude Skill은 리소스 적정화, 태깅 전략, 지출 분석을 통해 개발자들이 클라우드 비용을 최적화할 수 있도록 지원합니다. AWS, Azure, GCP에서 클라우드 비용을 절감하고 비용 거버넌스를 구현하기 위한 프레임워크를 제공합니다. 인프라 비용을 분석하거나, 리소스를 적정화하거나, 예산 제약을 충족해야 할 때 사용하세요.

스킬 보기

quantizing-models-bitsandbytes

기타

이 스킬은 bitsandbytes를 사용하여 LLM을 8비트 또는 4비트 정밀도로 양자화하며, 최소한의 정확도 손실로 50-75%의 메모리 감소를 달성합니다. 제한된 GPU 메모리에서 더 큰 모델을 실행하거나 추론을 가속화하는 데 이상적이며, INT8, NF4, FP4와 같은 형식을 지원합니다. 이 스킬은 HuggingFace Transformers와 통합되어 QLoRA 학습 및 8비트 옵티마이저를 가능하게 합니다.

스킬 보기

dispatching-parallel-agents

기타

이 Claude Skill은 3개 이상의 독립적인 문제를 동시에 조사하고 해결하기 위해 다중 에이전트를 배치합니다. 공유 상태나 의존성 없이 해결 가능한 무관련 장애 시나리오에 맞게 설계되었습니다. 핵심 기능은 병렬 문제 해결로, 각 독립 문제 영역마다 하나의 에이전트를 할당하여 효율성을 극대화합니다.

스킬 보기