MCP HubMCP Hub
Volver a habilidades

fit-hidden-markov-model

pjt222
Actualizado 2 days ago
3 vistas
17
2
17
Ver en GitHub
Metageneral

Acerca de

Esta habilidad ajusta Modelos Ocultos de Markov (HMM) a series temporales utilizando el algoritmo Baum-Welch para el entrenamiento y la decodificación de Viterbi para la inferencia de secuencias de estados. Está diseñada para segmentar secuencias en regímenes latentes, como estados de mercado o fonemas, y para comparar modelos con diferentes números de estados ocultos. Las características clave incluyen la selección de modelos mediante criterios de información y el cálculo de probabilidades hacia adelante y hacia atrás.

Instalación rápida

Claude Code

Recomendado
Principal
npx skills add pjt222/agent-almanac -a claude-code
Comando PluginAlternativo
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternativo
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/fit-hidden-markov-model

Copia y pega este comando en Claude Code para instalar esta habilidad

Documentación

擬隱馬可夫模型

以 Baum-Welch 期望最大化(EM)算法擬隱馬可夫模型(HMM)於序觀察數據、以 Viterbi 解最可能之隱狀序、並藉信息標準擇最優之隱狀數。

適用時機

  • 察一序發射而生之潛狀不可直接察
  • 疑數據由有限之機制間切換之系統生
  • 需分時序為潛相(如市場機制、語音音素、生物序列註釋)
  • 欲於生成模型下算已察序之概率
  • 於所予觀察下需最可能之隱狀序(解碼)
  • 為最佳之複雜-擬合權衡比異隱狀數之模型

輸入

必要

輸入類型說明
observations序/矩陣已察數據序(單元或多元)
n_hidden_states整數待擬之隱狀數(或模型選擇之範圍)
emission_type字串發射之分布族:"gaussian""discrete""poisson""multinomial"

選擇性

輸入類型預設說明
initial_paramsdict隨機/啟發初始轉移矩陣、發射參數與起始概率
n_restarts整數10隨機重啟數以緩局部最優
max_iterations整數500每重啟之最大 EM 迭代數
convergence_tolfloat1e-6EM 之對數似然收斂閾
state_rangeint 清單[n_hidden_states]模型選擇之狀數範圍
covariance_type字串"full"高斯發射:"full""diagonal""spherical"
regularizationfloat1e-6加於協方差矩陣對角以防奇異之小常數

步驟

步驟一:定隱狀與觀察模型

1.1. 指隱狀數 K(或步驟五模型選擇之候選範圍)。

1.2. 依數據類型擇發射分布族:

  • 連續數據:高斯(單元或多元)
  • 計數數據:Poisson 或負二項
  • 類別數據:離散/多項

1.3. 定模型組件:

  • 轉移矩陣 A,大小 K x KA[i,j] = P(z_t = j | z_{t-1} = i)
  • 每狀 k發射參數 theta_k:分布特定(如高斯之均值與協方差)
  • 初始狀分布 pipi[k] = P(z_1 = k)

1.4. 驗觀察數據正格:序中無缺值、維數一致、長度足於參數數。

預期: 清指之 HMM 架構,含 K 狀、擇之發射族、淨之觀察數據長 T >> K^2

失敗時: 若數據含缺值,補值或移影響之段。若 T 相對 K 過小,減 K 或取更多數據。

步驟二:初始化參數

2.1. 為 n_restarts 重啟各生初始參數:

  • 轉移矩陣:隨機隨機矩陣(各行自 Dirichlet 分布抽)或微擾之均勻矩陣。
  • 發射參數:於觀察上用 K-means 聚類以初始化均值;為高斯發射算聚類方差。
  • 初始分布:均勻或與 K-means 聚類大小成比例。

2.2. 首重啟用 K-means 知初始化(通常最強起)。後續重啟用隨機擾。

2.3. 驗所有初始參數有效:

  • 轉移矩陣行和為 1 且所有項為正。
  • 發射參數於有效域(如協方差矩陣為正定)。
  • 初始分布和為 1。

預期: n_restarts 組有效初始參數,至少一數據導之初始化。

失敗時: 若 K-means 不收,以純隨機初始化與更多重啟用。若協方差矩陣奇異,加正則常於對角。

步驟三:行 Baum-Welch EM 估參數

3.1. E 步(前向-後向算法):

  • 以遞推算前向概率 alpha[t,k] = P(o_1,...,o_t, z_t=k | model):
    • 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)
  • 算後向概率 beta[t,k] = P(o_{t+1},...,o_T | z_t=k, model):
    • beta[T,k] = 1
    • beta[t,k] = sum_j(A[k,j] * b_j(o_{t+1}) * beta[t+1,j])
  • 算狀後驗 gamma[t,k] = P(z_t=k | O, model):
    • gamma[t,k] = alpha[t,k] * beta[t,k] / P(O | model)
  • 算轉移後驗 xi[t,i,j] = P(z_t=i, z_{t+1}=j | O, model)。

3.2. M 步(參數重估):

  • 更轉移矩陣:A[i,j] = sum_t(xi[t,i,j]) / sum_t(gamma[t,i])
  • 以加權充分統計更發射參數:
    • 高斯均值:mu_k = sum_t(gamma[t,k] * o_t) / sum_t(gamma[t,k])
    • 高斯協方差:加權散布矩陣加正則
    • 離散:b_k(v) = sum_t(gamma[t,k] * I(o_t=v)) / sum_t(gamma[t,k])
  • 更初始分布:pi[k] = gamma[1,k]

3.3. 算對數似然:log P(O | model) = log sum_k(alpha[T,k])。用 log-sum-exp 伎以防下溢。

3.4. 縮放: 為長序用縮之前向-後向變以防數值下溢。於每時步歸一 alpha 並累對數縮放因子。

3.5. 重 E 步與 M 步至對數似然變低於 convergence_tol 或至 max_iterations

3.6. 跨所有重啟,留末對數似然最高之參數組。

預期: 跨迭代之單調非降對數似然,於 max_iterations 內收。終參有效(隨機矩陣、正定協方差)。

失敗時: 若對數似然降,E 步或 M 步有 bug——驗公式。若收很慢,試更佳初始化或增 max_iterations。若協方差成奇異,增正則。

步驟四:施 Viterbi 解最可能狀序

4.1. 初始化 Viterbi 變:

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

4.2. 對 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. 終:

  • z*_T = argmax_k(delta[T,k])
  • 最佳路對數概率:max_k(delta[T,k])

4.4. 對 t = T-1,...,1 回追:

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

4.5. 出解碼狀序 z* = (z*_1, ..., z*_T) 及其對數概率。

4.6. 比 Viterbi 路概率與自前向算法之總序概率以評最佳路之主宰度。

預期: 單一最可能狀序長 T,每項於 {1,...,K}。Viterbi 對數概率當 <= 總對數似然。

失敗時: 若 Viterbi 路對數概率為負無窮,某轉移或發射概率於不當為零處為零。加底值以防 log(0)。

步驟五:行模型選擇(跨模型階之 BIC/AIC)

5.1. 對 state_range 中每候選隱狀數 K,擬全 HMM(步驟二至四)。

5.2. 算自由參數 p 之數:

  • 轉移矩陣:K * (K - 1)(每行為單形)
  • 發射參數:依族(如 d 維全協方差之高斯:K * (d + d*(d+1)/2)
  • 初始分布:K - 1

5.3. 算信息標準:

  • BIC = -2 * log_likelihood + p * log(T)
  • AIC = -2 * log_likelihood + 2 * p
  • AICc = AIC + 2*p*(p+1) / (T - p - 1)(小樣本修正)

5.4. 擇 BIC 最低(偏一致性)或 AIC 最低(偏預測)之模型。報二者。

5.5. 表結果:對每 K,示對數似然、參數數、BIC、AIC、收斂狀態。

5.6. 若最優 Kstate_range 之界,擴範圍並重擬。

預期: BIC/AIC 中之明最小值識最優隱狀數。所擇模型當已收且狀有可解之意。

失敗時: 若無明最小(BIC 單調降),模型或誤配——考慮異發射族。若所有模型之對數似然皆差,數據或不循 HMM 結構。

步驟六:以保留數據與後驗解碼驗

6.1. 分數據為訓練與驗證集(如 80/20,若可得多序則用之)。

6.2. 於訓練數據擬模型。以前向算法於保留數據算對數似然(勿重擬參數)。

6.3. 後驗解碼(Viterbi 之替):

  • 於每時步,指後驗概率最高之狀:z^_t = argmax_k(gamma[t,k])
  • 此最大化正確解碼狀之期望數(vs Viterbi 最大化聯合路概率)。

6.4. 比 Viterbi 與後驗解碼:

  • 算二解碼序之一致率。
  • 不一致之區示模糊之狀指。

6.5. 評狀可解性:

  • 察各狀之發射參數(均值、方差、離散分布)。
  • 驗狀對應域語境中有意義之機制。
  • 察(A 之對角所隱之)狀駐時合理。

6.6. 算每觀察之保留對數似然並跨模型階比以確訓練集之模型選擇。

預期: 保留對數似然合理近於訓練對數似然(無嚴重過擬)。Viterbi 與後驗解碼於 90%+ 之時步上同。狀有明可解之發射分布。

失敗時: 若保留似然遠劣於訓練,模型過擬——減 K 或增正則。若狀不可解,試異初始化或異發射族。

驗證

  • 各重啟之 Baum-Welch 迭代上之對數似然單調非降
  • 轉移矩陣為行隨機(行和為 1,所有項非負)
  • 發射參數於有效域(正定協方差、有效概率分布)
  • Viterbi 路對數概率不超總序對數概率
  • 於所擇模型階,BIC/AIC 曲線示明最小
  • 保留對數似然確模型於訓練集外之通化
  • 前向與後向概率算合:P(O) = sum_k(alpha[T,k]) = sum_k(pi[k] * b_k(o_1) * beta[1,k])

常見陷阱

  • EM 之局部最優:Baum-Welch 算法收於局部最大,非必全局。恒用多隨機重啟並擇最佳。
  • 數值下溢:前向-後向概率隨序長指數縮。用對數空間算或縮變以防下溢至零。
  • 狀過多之過擬:每額外隱狀加 O(K + d^2) 參數。於模型選擇用 BIC(非僅似然)並於保留數據驗。
  • 標籤切換:隱狀僅於置換下可識。跨重啟比模型時,以發射參數配狀,非以索引。
  • 退化狀:狀或崩而僅釋單一觀察(高斯近零方差)。於協方差矩陣正則化防此。
  • 混 Viterbi 與後驗解碼:Viterbi 予單一最佳聯合路;後驗解碼予每時步之最佳邊緣狀。其答異問題且可顯著不一致。
  • 忽狀駐時:標準 HMM 所隱之幾何駐時分布或於有長機制期之數據擬差。若駐時非幾何,考慮隱半 Markov 模型。

相關技能

Repositorio GitHub

pjt222/agent-almanac
Ruta: i18n/wenyan-lite/skills/fit-hidden-markov-model
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Habilidades relacionadas

content-collections

Meta

Esta habilidad proporciona una configuración probada en producción para Content Collections, una herramienta centrada en TypeScript que transforma archivos Markdown/MDX en colecciones de datos con tipado seguro mediante validación Zod. Úsala al construir blogs, sitios de documentación o aplicaciones Vite + React con mucho contenido para garantizar seguridad de tipos y validación automática de contenido. Abarca todo, desde la configuración del plugin de Vite y compilación MDX hasta la optimización de despliegue y validación de esquemas.

Ver habilidad

polymarket

Meta

Esta habilidad permite a los desarrolladores crear aplicaciones con la plataforma de mercados de predicción Polymarket, incluyendo la integración de API para operaciones y datos de mercado. También proporciona transmisión de datos en tiempo real a través de WebSocket para monitorear operaciones en vivo y actividad del mercado. Úsela para implementar estrategias de trading o crear herramientas que procesen actualizaciones de mercado en tiempo real.

Ver habilidad

creating-opencode-plugins

Meta

Esta habilidad ayuda a los desarrolladores a crear complementos de OpenCode que se conectan a más de 25 tipos de eventos, como comandos, archivos y operaciones LSP. Proporciona la estructura del complemento, las especificaciones de la API de eventos y los patrones de implementación para módulos en JavaScript/TypeScript. Úsala cuando necesites interceptar, monitorear o extender el ciclo de vida del asistente de IA de OpenCode con lógica personalizada basada en eventos.

Ver habilidad

sglang

Meta

SGLang es un framework de alto rendimiento para el servicio de LLM que se especializa en generación rápida y estructurada para JSON, expresiones regulares y flujos de trabajo de agentes utilizando su caché de prefijos RadixAttention. Ofrece una inferencia significativamente más rápida, especialmente para tareas con prefijos repetidos, lo que lo hace ideal para salidas complejas y estructuradas, y conversaciones multiturno. Elige SGLang sobre alternativas como vLLM cuando necesites decodificación restringida o estés construyendo aplicaciones con uso extensivo de prefijos compartidos.

Ver habilidad