fit-hidden-markov-model
정보
이 스킬은 시간 시계열 데이터에 은닉 마르코프 모델(HMM)을 적합화하며, 학습에는 Baum-Welch 알고리즘을, 상태 순서 추론에는 비터비 디코딩을 사용합니다. 시장 상태나 음소와 같은 잠재 체제로 시퀀스를 분할하고, 서로 다른 수의 은닉 상태를 가진 모델을 비교하는 데 적합합니다. 주요 기능으로는 정보 기준을 통한 모델 선택과 전진-후진 확률 계산이 포함됩니다.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/fit-hidden-markov-modelClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
擬隱馬可夫模型
以 Baum-Welch 期望最大化(EM)算法擬隱馬可夫模型(HMM)於序觀察數據、以 Viterbi 解最可能之隱狀序、並藉信息標準擇最優之隱狀數。
適用時機
- 察一序發射而生之潛狀不可直接察
- 疑數據由有限之機制間切換之系統生
- 需分時序為潛相(如市場機制、語音音素、生物序列註釋)
- 欲於生成模型下算已察序之概率
- 於所予觀察下需最可能之隱狀序(解碼)
- 為最佳之複雜-擬合權衡比異隱狀數之模型
輸入
必要
| 輸入 | 類型 | 說明 |
|---|---|---|
observations | 序/矩陣 | 已察數據序(單元或多元) |
n_hidden_states | 整數 | 待擬之隱狀數(或模型選擇之範圍) |
emission_type | 字串 | 發射之分布族:"gaussian"、"discrete"、"poisson"、"multinomial" |
選擇性
| 輸入 | 類型 | 預設 | 說明 |
|---|---|---|---|
initial_params | dict | 隨機/啟發 | 初始轉移矩陣、發射參數與起始概率 |
n_restarts | 整數 | 10 | 隨機重啟數以緩局部最優 |
max_iterations | 整數 | 500 | 每重啟之最大 EM 迭代數 |
convergence_tol | float | 1e-6 | EM 之對數似然收斂閾 |
state_range | int 清單 | [n_hidden_states] | 模型選擇之狀數範圍 |
covariance_type | 字串 | "full" | 高斯發射:"full"、"diagonal"、"spherical" |
regularization | float | 1e-6 | 加於協方差矩陣對角以防奇異之小常數 |
步驟
步驟一:定隱狀與觀察模型
1.1. 指隱狀數 K(或步驟五模型選擇之候選範圍)。
1.2. 依數據類型擇發射分布族:
- 連續數據:高斯(單元或多元)
- 計數數據:Poisson 或負二項
- 類別數據:離散/多項
1.3. 定模型組件:
- 轉移矩陣
A,大小K x K:A[i,j] = P(z_t = j | z_{t-1} = i) - 每狀
k之發射參數theta_k:分布特定(如高斯之均值與協方差) - 初始狀分布
pi:pi[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] = 1beta[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 * pAICc = AIC + 2*p*(p+1) / (T - p - 1)(小樣本修正)
5.4. 擇 BIC 最低(偏一致性)或 AIC 最低(偏預測)之模型。報二者。
5.5. 表結果:對每 K,示對數似然、參數數、BIC、AIC、收斂狀態。
5.6. 若最優 K 於 state_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 模型。
相關技能
- Model Markov Chain -- 解隱層所依之轉移結構之前置
- Simulate Stochastic Process -- 可生合成 HMM 數據供測試並自已擬模型模以行後驗預測檢
GitHub 저장소
연관 스킬
content-collections
메타이 스킬은 콘텐츠 콜렉션(Content Collections)을 위한 프로덕션 검증된 설정을 제공합니다. 콘텐츠 콜렉션은 Markdown/MDX 파일을 Zod 검증이 포함된 타입 안전한 데이터 콜렉션으로 변환해주는 TypeScript 최우선 도구입니다. 블로그, 문서 사이트 또는 콘텐츠 중심의 Vite + React 애플리케이션을 구축할 때 타입 안전성과 자동 콘텐츠 검증을 보장하기 위해 사용하세요. Vite 플러그인 구성과 MDX 컴파일부터 배포 최적화 및 스키마 검증에 이르기까지 모든 것을 다룹니다.
polymarket
메타이 스킬은 개발자들이 Polymarket 예측 시장 플랫폼을 활용한 애플리케이션을 구축할 수 있도록 지원하며, 거래 및 시장 데이터를 위한 API 통합 기능을 포함합니다. 또한 WebSocket을 통한 실시간 데이터 스트리밍을 제공하여 실시간 거래와 시장 활동을 모니터링할 수 있습니다. 이를 통해 거래 전략을 구현하거나 실시간 시장 업데이트를 처리하는 도구를 생성하는 데 활용할 수 있습니다.
creating-opencode-plugins
메타이 스킬은 개발자들이 명령어, 파일, LSP 작업 등 25개 이상의 이벤트 유형에 연결되는 OpenCode 플러그인을 만들 수 있도록 돕습니다. JavaScript/TypeScript 모듈을 위한 플러그인 구조, 이벤트 API 명세, 구현 패턴을 제공합니다. OpenCode AI 어시스턴트의 라이프사이클을 사용자 정의 이벤트 기반 로직으로 가로채거나, 모니터링하거나, 확장해야 할 때 사용하세요.
sglang
메타SGLang은 RadixAttention 프리픽스 캐싱을 활용하여 JSON, 정규식, 에이전트 워크플로우를 위한 고속 구조화 생성에 특화된 고성능 LLM 서빙 프레임워크입니다. 특히 반복되는 프리픽스가 있는 작업에서 상당히 빠른 추론 속도를 제공하여 복잡한 구조화 출력 및 다중 턴 대화에 이상적입니다. 제약 디코딩이 필요하거나 광범위한 프리픽스 공유가 있는 애플리케이션을 구축할 때는 vLLM과 같은 대안보다 SGLang을 선택하십시오.
