Bagaimana saya melatih HMM untuk klasifikasi?

12

Jadi saya mengerti bahwa ketika Anda melatih HMM untuk klasifikasi, pendekatan standarnya adalah:

  1. Pisahkan set data Anda ke dalam set data untuk setiap kelas
  2. Latih satu HMM per kelas
  3. Pada set tes, bandingkan kemungkinan masing-masing model untuk mengklasifikasikan setiap jendela

Tapi bagaimana cara melatih HMM di setiap kelas? Apakah saya hanya menggabungkan data yang berkaitan dengan satu kelas bersama? Tetapi bukankah data deret waktu dimaksudkan untuk berurutan - dan jika saya melakukan itu maka saya mengatakan bahwa beberapa titik data berturut-turut padahal tidak?

Agar lebih konkret saya memiliki beberapa data EEG yang merupakan matriks 96xT di mana saya memiliki 96 vektor fitur yang merupakan kepadatan spektral daya dari frekuensi yang berbeda dari saluran yang berbeda dan T adalah lamanya waktu sinyal (pada tingkat sampling tertentu)

Ini dapat dibagi menjadi windows yang saya tahu dari protokol eksperimental (data diberi label) dan jadi saya dapat mengumpulkan set matriks 96 * t untuk setiap kelas. Di mana t kurang dari T dan menunjukkan ukuran masing-masing jendela.

Bagaimana cara melatih HMM pada data ini? Jika itu membantu saya mencoba menggunakan toolkit pmtk3, tapi saya benar-benar terbuka untuk menggunakan apa pun - itu hanya harus mampu menangani pengamatan bernilai nyata karena kepadatan spektral daya terus menerus tidak terpisah (kotak alat MATLAB default hanya dapat menangani dengan pengamatan diskrit).

Tujuannya adalah untuk dapat mengklasifikasikan jendela data EEG ke kondisi mental yang diberikan setelah dilatih pada data yang diberi label. Ini adalah masalah antarmuka otak-komputer menggunakan data Persaingan BCI Berlin .

Alex McMurray
sumber
1
Apakah halaman ini sesuai dengan yang Anda butuhkan?
fxm
Tampaknya - saya akan mencobanya untuk memastikan. Ini jelas memungkinkan untuk model Gaussian dan Mixture of Gaussian daripada hanya multinomial. Dan tampaknya Anda dapat secara global melatih model pada banyak pengamatan. Jadi ini terlihat bagus. Saya telah bermaksud untuk belajar Python dengan benar karena memiliki penggunaan yang lebih luas. Terima kasih :)
Alex McMurray

Jawaban:

9

Pendekatan yang Anda gambarkan untuk menggunakan HMM untuk klasifikasi benar-benar hanya berlaku untuk pengaturan di mana Anda memiliki urutan independen yang ingin Anda klasifikasikan. Misalnya, jika saya mengklasifikasikan sentimen kalimat sebagai positif atau negatif, saya bisa membuat HMM untuk masing-masing seperti yang telah Anda jelaskan. Lihat jawaban terkait yang saya berikan di sini . Perhatikan bagaimana ini bertumpu pada asumsi saya dapat memecah urutan menjadi potongan-potongan yang bermakna untuk diklasifikasikan sebelum saya membandingkan posisi. Ini tampaknya tidak menjadi masalah bagi Anda karena Anda secara efektif memiliki satu seri waktu panjang yang besar . Inilah yang akan saya coba.T

Anda sebutkan di reddit bahwa Anda ragu untuk menetapkan satu negara untuk setiap kelas. Sudahkah Anda mencoba ini? Ini mungkin tidak bekerja seburuk yang Anda pikirkan. Masalah estimasi juga jauh lebih mudah dalam hal ini. Memperkirakan probabilitas transisi mudah, Anda hanya menghitung dasarnya. Selain itu, Anda bisa menyesuaikan probabilitas emisi untuk setiap negara berdasarkan data yang Anda amati dan kelas terkait, mengabaikan aspek temporal.

Jika Anda yakin ini adalah ide yang buruk, atau berkinerja buruk tetapi masih ingin tetap menggunakan model generatif, Anda dapat menggunakan sesuatu seperti HMM Hierarchical. Misalnya, Anda bisa membiarkan negara bagian tingkat atas mewakili kelas dan kemudian membiarkan HMM tingkat lebih rendah untuk memodelkan variasi temporal di dalam kelas. Anda juga bisa menggunakan satu HMM besar untuk mencapai hal serupa. Jika Anda memiliki kelas, mengalokasikan negara untuk masing-masing kelas (jadi menyatakan sama sekali) dari bentuk , , . Selama pelatihan Anda akan perlu untuk memaksa HMM untuk probabilitas positif hanya menetapkan untuk transisi ke keadaan pada waktu manaKNN×Kskik=1,,Ki=1,Ntk cocok dengan label pada waktu . Saya mungkin telah mengatakan ini sedikit canggung jadi saya harap jelas apa yang saya maksud. Jelas Anda dapat menggeneralisasi ini untuk memiliki jumlah negara yang berbeda per kelas. Mungkin ada jenis lain dari Dynamic Bayesian Networks yang dapat Anda gunakan juga. Tesis Kevin Murphy adalah referensi yang bagus. Dia juga membahas mengubah HHMM menjadi HMM.t

Terakhir, Anda bisa beralih ke model diskriminatif seperti Bidang Acak Bersyarat. Model diskriminatif akan memungkinkan Anda untuk dengan mudah menggabungkan fitur yang lebih kompleks dan lebih langsung mengatasi masalah yang ada (memperkirakan kepadatan bersyarat). Mungkin ini yang saya coba dulu.

alto
sumber
Nilai-nilai yang diamati adalah kontinu jadi saya akan cocok dengan gaussian atau GMM. Sebagaimana dibahas di reddit, ini membatasi kemampuan model. Saya menggunakan model ini untuk melihat bagaimana aspek temporal memengaruhi akurasi klasifikasi dibandingkan dengan model statis. Saya sadar bahwa model diskriminatif mungkin lebih baik untuk klasifikasi dan telah membaca sedikit dari tesis Murphy. Ini sepertinya menarik tetapi HMM direkomendasikan kepada saya oleh profesor saya (ini adalah proyek terbuka) jadi saya akan mencobanya. Saya ingin bekerja lebih banyak dengan sinyal EEG / MEG di masa depan jadi saya akan mencoba metode lain di beberapa titik. :)
Alex McMurray
1
Pada akhirnya saya menggunakan sklearn dan dukungannya untuk banyak pengamatan. Tampaknya berfungsi dengan benar. Saya harus menggali ke dalam kode dan melihat bagaimana sebenarnya berurusan dengannya.
Alex McMurray
1
Alex, dapatkah Anda memberikan tautan atau contoh ke apa yang Anda rujuk sebagai "sklearn dan dukungannya untuk banyak pengamatan"? Saya telah berurusan dengan masalah ini (dan masalah terkait bagaimana "memberi tahu" HMM bahwa banyak pengamatan menjadi satu label kelas) selama bertahun-tahun sekarang dan akan senang mengetahui bagaimana Anda mengatasinya.
Rubenulis