Vous disposez de données de séries chronologiques qui sont utilisées pour mesurer l'accélération. Vous devez identifier lorsque la machine est dans son état nominal (OFF) et son état anormal (ON). Ce problème serait mieux résolu en utilisant des algorithmes de détection d'anomalies. Mais, il y a tellement de façons que vous pouvez aborder ce problème.
Préparer vos données
Toutes les méthodes reposeront sur la méthode d'extraction d'entités que vous sélectionnez. En supposant que nous continuons à utiliser la fenêtre de temps de 3 échantillons comme vous l'avez suggéré. Dans cet algorithme, vous calculerez une statistique pour cet état nominaly= 0. Je suggérerais la moyenne, comme je suppose que vous le faites déjà, de prendre la moyenne des trois accélérations résultantes de l'échantillon. Vous serez alors laissé avec un grand nombre de valeurs dans un ensemble d'entraînementS défini comme
S= {s0,s1, . . . ,sn}
où s est la moyenne des échantillons d'arbres dans une fenêtre. s est défini comme
sje=13∑jek = i - 2Xk
où X est votre échantillon d'observations et i ≥ 2.
Collectez ensuite plus de données si cela est possible avec la machine active de telle sorte que y= 1.
Vous pouvez maintenant choisir si vous souhaitez former votre algorithme sur un ensemble de données à une classe (détection d'anomlay pur). Un ensemble de données biaisé (détection d'anomalies) ou un ensemble de données bien équilibré. L'équilibre de l'ensemble de données est le rapport entre les deux classes de votre ensemble de données. Un ensemble de données parfait pour un classificateur à 2 classes serait 1: 1. 50% des données appartenant à chaque classe. Vous semblez avoir un ensemble de données biaisé, en supposant que vous ne voulez pas gaspiller beaucoup d'électricité.
Notez que rien ne vous empêche de conserver les échantillons voisins divisés en tant qu'instance dans votre jeu de données. Par exemple:
Xje Xi - 1 Xi - 2 | yje
Cela créerait un espace d'entrée en trois dimensions pour une sortie spécifique qui est définie pour l'échantillon actuellement prélevé.
Un ensemble de données biaisé
Solution facile
La façon la plus simple que je suggérerais. Supposons que vous utilisez une seule statistique pour définir ce qui se passe dans la fenêtre d'exemple 3. À partir des données collectées, obtenez le maximums de vos points nominaux (y= 0) et le minimum s de vos points anormaux (y= 1). Ensuite, prenez la marque à mi-chemin entre ces deux et utilisez-la comme seuil.
Si un nouvel échantillon de test s^ est supérieur au seuil, puis attribuez y= 1.
Vous pouvez étendre cela en calculant la moyenne s pour tous vos échantillons nominaux y= 0. Calculez ensuite la moyenne de vos échantillons anormauxy= 1. Si un nouvel échantillon se rapproche de la moyenne des échantillons anormaux, classifiez-le commey= 1.
Mais je veux devenir chic!
Il existe un certain nombre d'autres techniques que vous pouvez utiliser pour effectuer cette tâche exacte.
- k-voisins les plus proches
- Les réseaux de neurones
- Régression linéaire
- SVM
Autrement dit, presque tous les algorithmes d'apprentissage automatique sont bien adaptés à cette fin. Cela dépend simplement de la quantité de données dont vous disposez et de sa distribution.
Je veux vraiment utiliser SVM
Si tel est le cas, gardez les trois échantillons complètement séparés. Votre matrice de formation comportera 3 colonnes, comme indiqué ci-dessus. Et puis vous aurez vos sortiesy. L'utilisation de SVM en python est très simple: 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)
Cela forme votre modèle. Ensuite, vous voudrez prédire le résultat pour un nouvel échantillon.
clf.predict([[2., 2., 1]])