MCP HubMCP Hub
Вернуться к навыкам

fit-hidden-markov-model

pjt222
Обновлено 2 days ago
1 просмотров
17
2
17
Посмотреть на GitHub
Метаgeneral

О программе

Этот навык обучает скрытые марковские модели (HMM) на временных рядах с использованием алгоритма Баума-Велча для обучения и декодирования Витерби для вывода последовательности состояний. Он предназначен для сегментации последовательностей на скрытые режимы, такие как рыночные состояния или фонемы, а также для сравнения моделей с разным количеством скрытых состояний. Ключевые возможности включают выбор модели через информационные критерии и расчёт прямых-обратных вероятностей.

Быстрая установка

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 для установки этого навыка

Документация

擬隱馬可夫模型

以 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 模型。

相關技能

GitHub репозиторий

pjt222/agent-almanac
Путь: i18n/wenyan-lite/skills/fit-hidden-markov-model
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

content-collections

Мета

Этот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.

Просмотреть навык

polymarket

Мета

Этот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.

Просмотреть навык

creating-opencode-plugins

Мета

Этот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.

Просмотреть навык

sglang

Мета

SGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.

Просмотреть навык