Cách dự đoán xác suất trạng thái hoặc trạng thái cho dữ liệu mới với gói DepmixS4, cho Mô hình Markov ẩn


8

Có vẻ như tôi có thể tìm hiểu các thông số tốt và tìm thấy xác suất sau cho dữ liệu huấn luyện nhưng tôi không biết làm thế nào để đưa ra dự đoán mới về dữ liệu mới. Vấn đề đặc biệt xuất phát từ xác suất chuyển đổi thay đổi trên các đồng biến, do đó việc viết mã để dự đoán dữ liệu mới không phải là chuyện nhỏ.

Cách tiếp cận tiêu chuẩn là xác định hỗn hợp (phụ thuộc) và phù hợp với mô hình:

mod <- depmix(EventTime ~ 1, data = data[1:40320,], nstates = 2, family
=multinomial("identity"), transition = ~ Count, instart = runif(2))

fm <- fit(mod, emcontrol=em.control(classification="soft", maxit = 60))

Những gì chúng ta có ở trên sẽ hoạt động tương tự như HMM nhị phân vì nó đang cố gắng phân loại xem một sự kiện có xảy ra dưới dạng biến phụ thuộc 1/0 di chuyển qua chuỗi hay không. Biến số chuyển tiếp là biến số đếm tần số sẽ ảnh hưởng trực tiếp đến xác suất chuyển tiếp của các trạng thái sau đó sẽ kiểm soát xác suất phát xạ của biến phụ thuộc 1/0.

Có thể lấy các tham số của mô hình và đặt các tham số sang mô hình mới khác. Tuy nhiên, không có phương pháp dự đoán rõ ràng, mặc dù nên có một nơi nào đó trong ruột của thư viện.

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

Lưu ý, trong tài liệu này có thể chạy thuật toán viterbi để tạo trạng thái cho dữ liệu mới. Tuy nhiên, điều này không đặc biệt hữu ích với tôi và nó dường như hoàn toàn phù hợp với dữ liệu cho thấy nó vẫn học để phù hợp với dữ liệu mới.

probs2 <- viterbi(modNew)

Lưu ý, tôi là người mới trong chủ đề này. Giai đoạn thực hiện này là khó khăn đối với tôi, nhưng dường như nó là một phần cơ bản của phân tích.


Sau setpars, áp dụng viterbi (modNew) Nó sẽ tạo một bảng có xác suất trạng thái
Andrey Boarão

Câu trả lời:


0

Lắp mô hình mới và sau đó gọi posterior().

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

modNew <- fit(modNew)

predStates <- posterior(modNew)

predStates$state

3
Tôi không hiểu tại sao chúng ta nên chỉnh lại mô hình vì các tham số đã được "học" lần đầu tiên, tôi có sai không?
Patrick

0

Bạn đã giải quyết điều này? Nếu không, có lẽ bạn có thể thử:

sum(forwardbackward(setpars(depmix(list(var~1), data=newData, nstates=3,family=list(gaussian())), getpars(originalModel)))[["alpha"]][nrow(data),])

Lớp lót này có xác suất dữ liệu mới bằng cách chạy thuật toán chuyển tiếp trên mô hình ban đầu của bạn. Xin vui lòng cho tôi biết nếu bạn đi đến một giải pháp tốt hơn, vì tôi đang tự giải quyết vấn đề này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.