Spaces:
Runtime error
Runtime error
| """ | |
| The implementation of the decision tree model for anomaly detection. | |
| Authors: | |
| LogPAI Team | |
| Reference: | |
| [1] Mike Chen, Alice X. Zheng, Jim Lloyd, Michael I. Jordan, Eric Brewer. | |
| Failure Diagnosis Using Decision Trees. IEEE International Conference | |
| on Autonomic Computing (ICAC), 2004. | |
| """ | |
| import numpy as np | |
| from sklearn import tree | |
| from ..utils import metrics | |
| class DecisionTree(object): | |
| def __init__(self, criterion='gini', max_depth=None, max_features=None, class_weight=None): | |
| """ The Invariants Mining model for anomaly detection | |
| Arguments | |
| --------- | |
| See DecisionTreeClassifier API: https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html | |
| Attributes | |
| ---------- | |
| classifier: object, the classifier for anomaly detection | |
| """ | |
| self.classifier = tree.DecisionTreeClassifier(criterion=criterion, max_depth=max_depth, | |
| max_features=max_features, class_weight=class_weight) | |
| def fit(self, X, y): | |
| """ | |
| Arguments | |
| --------- | |
| X: ndarray, the event count matrix of shape num_instances-by-num_events | |
| """ | |
| print('====== Model summary ======') | |
| self.classifier.fit(X, y) | |
| def predict(self, X): | |
| """ Predict anomalies with mined invariants | |
| Arguments | |
| --------- | |
| X: the input event count matrix | |
| Returns | |
| ------- | |
| y_pred: ndarray, the predicted label vector of shape (num_instances,) | |
| """ | |
| y_pred = self.classifier.predict(X) | |
| return y_pred | |
| def predict_proba(self, X): | |
| """ Predict anomalies with mined invariants | |
| Arguments | |
| --------- | |
| X: the input event count matrix | |
| Returns | |
| ------- | |
| y_pred: ndarray, the predicted label vector of shape (num_instances,) | |
| """ | |
| y_pred = self.classifier.predict_proba(X) | |
| return y_pred | |
| def evaluate(self, X, y_true): | |
| print('====== Evaluation summary ======') | |
| y_pred = self.predict(X) | |
| precision, recall, f1 = metrics(y_pred, y_true) | |
| print('Precision: {:.3f}, recall: {:.3f}, F1-measure: {:.3f}\n'.format(precision, recall, f1)) | |
| return precision, recall, f1 | |