def detect(self, method, model, data):
'''
:param method: -> method name
:param model: -> trained clusterer
:param data: -> dataframe with data
:return: -> dictionary that contains the list of anomalous timestamps
'''
smodel = self.__loadClusterModel(method, model)
anomalieslist = []
if not smodel:
dpredict = 0
else:
if data.shape[0]:
if isinstance(smodel, IsolationForest):
print "Detected IsolationForest model"
print "Contamination -> %s" % smodel.contamination
print "Max_Features -> %s" % smodel.max_features
print "Max_Samples -> %s" % smodel.max_samples_
print "Threashold -> %s " % smodel.threshold_
try:
dpredict = smodel.predict(data)
print "IsolationForest Prediction Array -> %s" %str(dpredict)
except Exception as inst:
logger.error('[%s] : [ERROR] Error while fitting isolationforest model to event with %s and %s',
datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'), type(inst), inst.args)
dpredict = 0
elif isinstance(smodel, DBSCAN):
print "Detected DBSCAN model"
print "Leaf_zise -> %s" % smodel.leaf_size
print "Algorithm -> %s" % smodel.algorithm
print "EPS -> %s" % smodel.eps
print "Min_Samples -> %s" % smodel.min_samples
print "N_jobs -> %s" % smodel.n_jobs
try:
dpredict = smodel.fit_predict(data)
except Exception as inst:
logger.error('[%s] : [ERROR] Error while fitting sDBSCAN model to event with %s and %s',
datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'), type(inst),
inst.args)
dpredict = 0
else:
dpredict = 0
logger.warning('[%s] : [WARN] Dataframe empty with shape (%s,%s)',
datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'), str(data.shape[0]),
str(data.shape[1]))
print "Empty dataframe received with shape (%s,%s)" % (str(data.shape[0]),
str(data.shape[1]))
print "dpredict type is %s" % (type(dpredict))
if type(dpredict) is not int:
anomalyarray = np.argwhere(dpredict == -1)
for an in anomalyarray:
anomalies = {}
anomalies['utc'] = int(data.iloc[an[0]]['key'])
anomalies['hutc'] = ut2hum(int(data.iloc[an[0]]['key']))
anomalieslist.append(anomalies)
anomaliesDict = {}
anomaliesDict['anomalies'] = anomalieslist
logger.info('[%s] : [INFO] Detected anomalies with model %s using method %s are -> %s',
datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'), model, method, str(anomaliesDict))
return anomaliesDict
评论列表
文章目录