Patrzę na pybrain do przyjmowania alarmów monitorowania serwera i określania głównej przyczyny problemu. Cieszę się ze szkolenia go przy użyciu nadzorowanego uczenia i doboru zestawów danych treningowych. Dane mają następującą strukturę:
- Typ serwera A # 1
- Typ alarmu 1
- Typ alarmu 2
- Typ serwera A # 2
- Typ alarmu 1
- Typ alarmu 2
- Typ serwera B # 1
- Typ alarmu 99
- Typ alarmu 2
Jest więc n serwerów z x alarmami, które mogą być UP
lub DOWN
. Zarówno n
i x
są zmienne.
Jeśli serwer A1 ma alarm 1 i 2 jako DOWN
, to możemy powiedzieć, że usługa a jest wyłączona na tym serwerze i jest przyczyną problemu.
Jeśli alarm 1 jest wyłączony na wszystkich serwerach, możemy powiedzieć, że przyczyną jest usługa a .
Przyczyną może być wiele opcji, więc prosta klasyfikacja nie wydaje się odpowiednia.
Chciałbym również powiązać późniejsze źródła danych z siecią. Takich jak skrypty wysyłające ping do niektórych usług zewnętrznych.
Wszystkie odpowiednie alarmy mogą nie zostać uruchomione jednocześnie, ze względu na szeregowe kontrole serwisowe, więc można zacząć od jednego serwera wyłączonego, a następnie innego serwera wyłączonego 5 minut później.
Na początku próbuję zrobić kilka podstawowych rzeczy:
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
INPUTS = 2
OUTPUTS = 1
# Build network
# 2 inputs, 3 hidden, 1 output neurons
net = buildNetwork(INPUTS, 3, OUTPUTS)
# Build dataset
# Dataset with 2 inputs and 1 output
ds = SupervisedDataSet(INPUTS, OUTPUTS)
# Add one sample, iterable of inputs and iterable of outputs
ds.addSample((0, 0), (0,))
# Train the network with the dataset
trainer = BackpropTrainer(net, ds)
# Train 1000 epochs
for x in xrange(10):
trainer.train()
# Train infinite epochs until the error rate is low
trainer.trainUntilConvergence()
# Run an input over the network
result = net.activate([2, 1])
Ale z trudem odwzorowuję zmienne liczby alarmów na statyczne liczby wejść. Na przykład, jeśli dodamy alarm do serwera lub dodamy serwer, cała sieć musi zostać przebudowana. Jeśli jest to coś, co należy zrobić, mogę to zrobić, ale chcę wiedzieć, czy jest lepszy sposób.
Inną opcją, o której staram się myśleć, jest inna sieć dla każdego typu serwera, ale nie widzę, jak mogę wyciągnąć wnioski dotyczące całego środowiska, ponieważ będą one dokonywały oceny na jednym hoście zamiast wszystkie hosty naraz.
Jakiego rodzaju algorytmu należy użyć i jak zmapować zestaw danych, aby wyciągać wnioski dotyczące całego środowiska ze zmiennymi danymi wejściowymi?
źródło
Odpowiedzi:
Moim zdaniem szukasz niewłaściwych metod rozwiązania problemu.
Nie masz danych liczbowych.
Uczenie maszynowe oparte na statystykach ma bardzo trudne problemy z takimi problemami. Twój problem brzmi bardziej jak jeden z problemów, które należy rozwiązać w systemach opartych na regułach. Moim pierwszym instynktem byłoby próba zrozumienia zasad i wprowadzenia ich do kodu prowadzącego do klasyfikacji.
Istnieją jednak metody uczenia się takich systemów opartych na regułach opartych na logice. Są one dziś dość niemodne w uczeniu maszynowym. https://en.wikipedia.org/wiki/Rule-based_system
źródło
Zgodnie z powyższym komentarzem proponuję wypróbować podejście oparte na regułach. Dla każdego posiadanego serwera, przeszukaj jego usługi. Jeśli wszystkie usługi są wyłączone na serwerze, oznacza to problem z serwerem. W przypadku każdej usługi, jeśli żaden serwer nie zgłasza, że usługa jest uruchomiona, oznacza to problem z usługą. W przypadku, gdy jest to jedno i drugie, otrzymasz powiadomienia dla każdego z nich, a następnie będziesz mógł sprawdzić, co się dzieje z którymkolwiek ze składników.
Koszt, utrzymanie i ryzyko złych wyników przy użyciu modelu ANN przewyższają proste, oparte na regułach rozwiązanie, a twój szef prawdopodobnie poklepie cię po plecach za robienie tego, co ma sens.
Jeśli naprawdę poważnie podchodzisz do utrzymania funkcjonalności serwerów i procesów, sugeruję zainwestowanie w usługę APM, która zapewnia niezawodne powiadomienia w czasie rzeczywistym o tym, co dzieje się w twoim środowisku produkcyjnym.
Jeśli próbujesz się dowiedzieć, jak działa ANN, wypróbuj inny problem. Każdy dobrze znany zestaw danych do klasyfikacji lub wykrywania anomalii zapewni ci o wiele lepszy wgląd w działanie ANN niż zestaw danych niestandardowych, co może być okropnie trudne do przekonania do skutecznego schematu uczenia się.
źródło