Você tem dados de séries temporais que são usados para medir a aceleração. Você deve identificar quando a máquina está em seu estado nominal (DESLIGADO) e estado anômalo (LIGADO). Esse problema seria melhor resolvido usando algoritmos de detecção de anomalias. Mas existem muitas maneiras de abordar esse problema.
Preparando seus dados
Todos os métodos dependerão do método de extração de recurso que você selecionar. Supondo que continuemos a usar a janela de tempo de 3 amostras, conforme sugerido. Neste algoritmo, você calculará uma estatística para esse estado nominaly= 0. Sugiro a média, como suponho que você já esteja fazendo, calcule a média das três acelerações resultantes da amostra. Você ficará com um grande número de valores em um conjunto de treinamentoS definido como
S= {s0 0,s1, . . . ,sn}
Onde s é a média das amostras de árvore em uma janela. s é definido como
sEu=13∑Euk = i - 2xk
Onde x é a sua amostra de observações e i ≥ 2.
Em seguida, colete mais dados, se possível, com a máquina ativa, de modo que y= 1.
Agora você pode escolher se deseja treinar seu algoritmo em um conjunto de dados de uma classe (detecção pura de anomlay). Um conjunto de dados tendencioso (detecção de anomalias) ou um conjunto de dados bem equilibrado. O saldo do conjunto de dados é a proporção entre as duas classes no seu conjunto de dados. Um conjunto de dados perfeito para um classificador de 2 classes seria 1: 1. 50% dos dados pertencentes a cada classe. Você parece ter um conjunto de dados tendencioso, supondo que não queira desperdiçar muita eletricidade.
Observe que nada impede que você mantenha as amostras vizinhas divididas como uma instância em seu conjunto de dados. Por exemplo:
xEu xi - 1 xi - 2 | yEu
Isso criaria um espaço de entrada tridimensional para uma saída específica, definida para a amostra coletada atualmente.
Um conjunto de dados tendencioso
Solução Fácil
A maneira mais fácil que eu sugeriria. Suponha que você esteja usando uma única estatística para definir o que está acontecendo na janela de 3 amostras. A partir dos dados coletados, obtenha o máximos dos seus pontos nominais (y= 0) e o mínimo s dos seus pontos anômalos (y= 1) Então pegue a marca intermediária entre esses dois e use-a como seu limite.
Se uma nova amostra de teste s^ for maior que o limite, atribua y= 1.
Você pode estender isso calculando a média s para todas as suas amostras nominais y= 0. Em seguida, calcule a média para suas amostras anômalasy= 1. Se uma nova amostra se aproximar da média das amostras anômalas, classifique-a comoy= 1.
Mas eu quero ser chique!
Existem várias outras técnicas que você pode usar para executar esta tarefa exata.
- k-vizinhos mais próximos
- Redes neurais
- Regressão linear
- SVM
Simplificando, quase todos os algoritmos de aprendizado de máquina são adequados para essa finalidade. Depende apenas da quantidade de dados disponíveis e de sua distribuição.
Eu realmente quero usar SVM
Nesse caso, mantenha as três amostras completamente separadas. Sua matriz de treinamento terá 3 colunas, conforme discutido acima. E então você terá suas saídasy. Usar o SVM em python é muito fácil: 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)
Isso treina seu modelo. Então você desejará prever o resultado para uma nova amostra.
clf.predict([[2., 2., 1]])