Saya memiliki data berikut untuk proyek sampingan kecil. Ini dari accelerometer yang duduk di atas mesin cuci / pengering dan saya ingin memberi tahu saya ketika mesin selesai.
x adalah data input (gerakan x / y / z sebagai satu nilai), y adalah label on / off
Karena nilai x tumpang tindih untuk y = 1 dan y = 0, saya berpikir untuk menggunakan x dan jendela 3 menit bergulir sebagai input untuk SVM:
xyz60=res.xyz.resample("60S").max()
X["x"]=xyz60
X["max3"]=xyz60.rolling(window=3, min_periods=1).max()
Apakah ini pendekatan yang baik untuk masalah seperti ini? Adakah alternatif yang mungkin menghasilkan hasil yang lebih baik?
Jawaban:
Anda memiliki data deret waktu yang digunakan untuk mengukur akselerasi. Anda harus mengidentifikasi kapan mesin dalam kondisi nominal (OFF) dan status anomali (ON). Masalah ini akan lebih baik diselesaikan dengan menggunakan algoritma deteksi anomali. Tapi, ada banyak cara yang bisa Anda gunakan untuk mengatasi masalah ini.
Mempersiapkan data Anda
Semua metode akan bergantung pada metode ekstraksi fitur yang Anda pilih. Dengan asumsi kami terus menggunakan jendela 3 sampel waktu seperti yang Anda sarankan. Dalam algoritma ini Anda akan menghitung statistik untuk kondisi nominal ini . Saya akan menyarankan maksud karena saya menganggap Anda sudah melakukan, ambil rata-rata dari tiga sampel percepatan yang dihasilkan. Anda kemudian akan dibiarkan dengan sejumlah besar nilai dalam set pelatihan didefinisikan sebagaiy= 0 S
di mana adalah mean dari sampel pohon di jendela. didefinisikan sebagais s
di mana adalah observasi sampel Anda dan .x saya ≥ 2
Kemudian kumpulkan lebih banyak data jika memungkinkan dengan mesin aktif sehingga .y= 1
Sekarang Anda dapat memilih apakah Anda ingin melatih algoritma Anda pada dataset satu kelas (deteksi anomlay murni). Dataset bias (deteksi anomali) atau dataset yang seimbang. Saldo dataset adalah rasio antara dua kelas dalam dataset Anda. Dataset yang sempurna untuk klasifikasi 2 kelas adalah 1: 1. 50% dari data milik masing-masing kelas. Anda tampaknya memiliki dataset yang bias, dengan asumsi Anda tidak ingin membuang banyak listrik.
Perhatikan bahwa tidak ada yang menghentikan Anda dari menjaga sampel tetangga dipecah sebagai contoh dalam dataset Anda. Sebagai contoh:
Ini akan membuat ruang input 3 dimensi untuk output spesifik yang ditentukan untuk sampel yang saat ini diambil.
Dataset yang Bias
Solusi mudah
Cara termudah yang saya sarankan. Asumsikan Anda menggunakan statistik tunggal untuk menentukan apa yang terjadi di seluruh jendela 3 sampel. Dari data yang dikumpulkan dapatkan maksimum dari poin nominal Anda ( ) dan minimum dari poin anomali Anda ( ). Kemudian ambil tanda setengah di antara keduanya dan gunakan itu sebagai ambang Anda.s y= 0 s y= 1
Jika sampel uji baru lebih besar dari ambang maka tetapkan .s^ y= 1
Anda dapat memperpanjang ini dengan menghitung rata-rata untuk semua sampel nominal Anda . Kemudian hitung rata-rata untuk sampel anomali Anda . Jika sampel baru jatuh lebih dekat ke rata-rata dari sampel anomali kemudian mengklasifikasikannya sebagai .s y= 0 y= 1 y= 1
Tapi saya ingin menjadi mewah!
Ada sejumlah teknik lain yang dapat Anda gunakan untuk melakukan tugas yang tepat ini.
Sederhananya, hampir setiap algoritma pembelajaran mesin sangat cocok untuk tujuan ini. Itu tergantung pada seberapa banyak data tersedia untuk Anda dan distribusinya.
Saya benar-benar ingin menggunakan SVM
Jika demikian, biarkan ketiga sampel tetap terpisah. Matriks pelatihan Anda akan memiliki 3 kolom seperti yang dibahas di atas. Dan kemudian Anda akan memiliki output . Menggunakan SVM dalam python sangat mudah: http://scikit-learn.org/stable/modules/svm.html .y
Ini melatih model Anda. Maka Anda akan ingin memprediksi hasil untuk sampel baru.
sumber