J'ai les données suivantes pour un petit projet parallèle. Cela vient d'un accéléromètre posé sur une laveuse / sécheuse et j'aimerais qu'il me dise quand la machine est terminée.
x est les données d'entrée (mouvement x / y / z comme une valeur), y est l'étiquette activée / désactivée
Parce que les valeurs de x se chevauchent pour y = 1 et y = 0, je pensais utiliser x et une fenêtre mobile de 3 minutes comme entrées pour un SVM:
xyz60=res.xyz.resample("60S").max()
X["x"]=xyz60
X["max3"]=xyz60.rolling(window=3, min_periods=1).max()
Est-ce une bonne approche pour ce genre de problème? Existe-t-il des alternatives qui pourraient produire de meilleurs résultats?
Réponses:
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
oùs est la moyenne des échantillons d'arbres dans une fenêtre. s est défini comme
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 quey= 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:
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 tests^ est supérieur au seuil, puis attribuez y= 1 .
Vous pouvez étendre cela en calculant la moyennes 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.
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 .
Cela forme votre modèle. Ensuite, vous voudrez prédire le résultat pour un nouvel échantillon.
la source