Tôi muốn sử dụng BIC cho lựa chọn mô hình HMM:
BIC = -2*logLike + num_of_params * log(num_of_data)
Vậy làm thế nào để tôi đếm số lượng tham số trong mô hình HMM. Hãy xem xét một HMM 2 trạng thái đơn giản, nơi chúng tôi có dữ liệu sau:
data = [1 2 1 1 2 2 2 1 2 3 3 2 3 2 1 2 2 3 4 5 5 3 3 2 6 6 5 6 4 3 4 4 4 4 4 4 3 3 2 2];
model = hmmFit(data, 2, 'discrete');
model.pi = 0.6661 0.3339;
model.A =
0.8849 0.1151
0.1201 0.8799
model.emission.T =
0.2355 0.5232 0.2259 0.0052 0.0049 0.0053
0.0053 0.0449 0.2204 0.4135 0.1582 0.1578
logLike = hmmLogprob(model,data);
logLike = -55.8382
Vì vậy, tôi nghĩ:
Nparams = size(model.A,2)*(size(model.A,2)-1) +
size(model.pi,2)-1) +
size(model.emission.T,1)*(size(model.emission.T,2)-1)
Nparams = 13
Vì vậy, cuối cùng chúng ta có:
BIC = -2*logLike + num_of_params*log(length(x))
BIC = 159.6319
Tôi đã tìm thấy một giải pháp trong đó công thức cho num_of_params
(đối với mô hình Markov đơn giản) trông giống như:
Nparams = Num_of_states*(Num_of_States-1) - Nbzeros_in_transition_matrix
Vậy đâu là giải pháp phù hợp? Tôi có phải tính đến một số xác suất bằng không trong ma trận chuyển tiếp hoặc phát xạ không?
==== Cập nhật kể từ ngày 07.15.2011 ====
Tôi nghĩ rằng tôi có thể cung cấp một số giải thích rõ ràng về tác động của kích thước dữ liệu (sử dụng ví dụ phân phối hỗn hợp của Gaussian)
X là ma trận n-by-d trong đó (n-hàng tương ứng với các quan sát; cột d tương ứng với các biến (Ndimensions).
X=[3,17 3,43
1,69 2,94
3,92 5,04
1,65 1,79
1,59 3,92
2,53 3,73
2,26 3,60
3,87 5,01
3,71 4,83
1,89 3,30 ];
[n d] = size(X);
n = 10; d =2;
Mô hình sẽ có số lượng tham số sau cho GMM:
nParam = (k_mixtures – 1) + (k_mixtures * NDimensions ) + k_mixtures * Ndimensions %for daigonal covariance matrices
nParam = (k_mixtures – 1) + (k_mixtures * NDimensions ) + k_mixtures * NDimensions * (NDimensions+1)/2; %for full covariance matrices
Nếu chúng ta coi X là dữ liệu 1 chiều , hơn chúng ta có num_of_data = (n*d)
, thì đối với dữ liệu 2 chiều chúng ta có num_of_data = n
.
Dữ liệu 2 chiều : nParam = 11; logLike = -11.8197; BIC = 1.689
Dữ liệu 1 chiều : nParam = 5; logLike = -24.8753; BIC = -34,7720
Tôi có một thực hành rất ít với HMM. Có bình thường khi có HMM với (5000, 6000 và nhiều tham số hơn) không?