Sono disponibili dati di serie temporali che vengono utilizzati per misurare l'accelerazione. Tu che identificare quando la macchina è nel suo stato nominale (OFF) e stato anomalo (ON). Questo problema sarebbe meglio risolto utilizzando algoritmi di rilevamento anomalie. Ma ci sono così tanti modi in cui puoi affrontare questo problema.
Prepararti i dati
Tutti i metodi dipenderanno dal metodo di estrazione delle caratteristiche selezionato. Supponendo che continueremo a utilizzare la finestra temporale di 3 campioni come da lei suggerito. In questo algoritmo calcolerai una statistica per questo stato nominaley= 0. Vorrei suggerire la media mentre presumo che tu stia già facendo, prendere la media delle tre accelerazioni risultanti dal campione. Ti verrà quindi lasciato un gran numero di valori in un set di allenamentoS definito come
S= {S0,S1, . . . ,Sn}
dove S è la media dei campioni dell'albero in una finestra. S è definito come
Sio=13Σiok = i - 2XK
dove X sono le tue osservazioni campione e i ≥ 2.
Quindi raccogliere più dati se è possibile con la macchina attiva tale che y= 1.
Ora puoi scegliere se vuoi allenare il tuo algoritmo su un set di dati di una classe (rilevamento puro di anomlay). Un set di dati distorto (rilevamento anomalie) o un set di dati ben bilanciato. Il saldo del set di dati è il rapporto tra le due classi nel set di dati. Un set di dati perfetto per un classificatore di 2 classi sarebbe 1: 1. 50% dei dati appartenenti a ciascuna classe. Sembra che tu abbia un set di dati distorto, supponendo che tu non voglia sprecare molta elettricità.
Si noti che non vi è nulla che ti impedisca di mantenere i campioni vicini divisi come istanza nel set di dati. Per esempio:
Xio Xi - 1 Xi - 2 | yio
Ciò renderebbe uno spazio di input tridimensionale per un output specifico che è definito per il campione attualmente prelevato.
Un set di dati distorto
Soluzione facile
Il modo più semplice che suggerirei. Supponiamo che tu stia utilizzando una singola statistica per definire cosa sta succedendo nella finestra di esempio 3. Dai dati raccolti ottieni il massimoS dei tuoi punti nominali (y= 0) e il minimo S dei tuoi punti anomali (y= 1). Quindi prendi il segno a metà strada tra questi due e usalo come soglia.
Se un nuovo campione di prova S^ è maggiore della soglia quindi assegnare y= 1.
Puoi estenderlo calcolando la media S per tutti i campioni nominali y= 0. Quindi calcola la media per i tuoi campioni anomaliy= 1. Se un nuovo campione si avvicina alla media dei campioni anomali, classificarlo comey= 1.
Ma voglio essere sofisticato!
Esistono diverse altre tecniche che è possibile utilizzare per eseguire esattamente questo compito.
- k-vicini più vicini
- Reti neurali
- Regressione lineare
- SVM
In poche parole, quasi tutti gli algoritmi di apprendimento automatico sono adatti a questo scopo. Dipende solo dalla quantità di dati disponibili e dalla sua distribuzione.
Voglio davvero usare SVM
In questo caso, mantenere i tre campioni completamente separati. La matrice di allenamento avrà 3 colonne come discusso sopra. E poi avrai le tue uscitey. L'uso di SVM in python è molto semplice: http://scikit-learn.org/stable/modules/svm.html .
from sklearn import svm
X = [[0, 0, 0], [1, 1, 1], ..., [1, 0, 1]]
y = [0, 1, ..., 1]
clf = svm.SVC()
clf.fit(X, y)
Questo allena il tuo modello. Quindi vorrai prevedere il risultato per un nuovo campione.
clf.predict([[2., 2., 1]])