def optimize_machine(paths): # optimizes over all the timeseries provided in the path list # returns a list of algorithms and a list of corresponding anomalies anomaly_dict= dict() anomaly_list= list() index= 1 for path in paths: anomaly_dict[path]= dict() print "finding anomaly for path no." + str(index), path index+= 1 for algo, feature, w_size in algo_iter(): # TODO: replace with my_dict try: var= anomaly_dict[path][algo] except KeyError: anomaly_dict[path][algo]= dict() try: var= anomaly_dict[path][algo][feature] except KeyError: anomaly_dict[path][algo][feature]= dict() anomaly_list.append(gateway.get_anomalies(path, algo, feature, percent=2, mul_dev= 3, window_size= w_size)) print len(anomaly_list[-1]) anomaly_dict[path][algo][feature][w_size]= anomaly_list[-1] final_anomalies, weights= aggregate(anomaly_list, ratio= 0.01) min_algo= list() anomalies= list() for path in paths: min_algo.append(find_optimal_algo(anomaly_dict[path], final_anomalies)) a= min_algo[-1] anomalies.append(anomaly_dict[path][a[0]][a[1]][a[2]]) return min_algo, anomalies, final_anomalies, weights
def optimize_timeseries(path, mul_dev= 3, percent= 0.5, alpha = 0.7, top= None): # returns anomalies sorted by weights and not time anomaly_dict= dict() anomaly_list= list() for algo in gateway.algo_iter(methods= ["naive"]): # TODO: replace with my_dict anomaly_list.append(gateway.get_anomalies(path, algo[0], algo[1], percent= percent, mul_dev= mul_dev, window_size= algo[2])) anomaly_dict[algo]= anomaly_list[-1] #final_anomalies= aggregate(anomaly_list) weights= anomalies_to_expweights(anomaly_list) max_overlap= -1 for algo in gateway.algo_iter(methods= ["naive"]): # overlap penalized exponentially wrt length of anomaly list try: overlap= anomaly_weight_overlap(anomaly_dict[algo], weights)/math.exp(alpha * len(anomaly_dict[algo])) except OverflowError: overlap= 0 #print algo, overlap if max_overlap < overlap: max_overlap= overlap max_algo= algo print "max algo= ", max_algo #arranged_anomalies= arrange_anomalies(anomaly_dict[max_algo], weights) #print arranged_anomalies, len(arranged_anomalies) #if top==None: # top= len(arranged_anomalies) #return arranged_anomalies[:top], max_algo return anomaly_dict[max_algo], max_algo
def ts_majority_vote(path, ratio=0.005): anomaly_list = list() for algo, feature, w_size in algo_iter(): anomaly_list.append( gateway.get_anomalies(path, algo, feature, window_size=w_size, percent=10, mul_dev=1.5)) final_anomalies, weights = aggregate(anomaly_list, ratio) return final_anomalies
def optimize_timeseries( path, mul_dev=3, percent=0.5, alpha=0.7, top=None): # returns anomalies sorted by weights and not time anomaly_dict = dict() anomaly_list = list() for algo in gateway.algo_iter(methods=["naive"]): # TODO: replace with my_dict anomaly_list.append( gateway.get_anomalies(path, algo[0], algo[1], percent=percent, mul_dev=mul_dev, window_size=algo[2])) anomaly_dict[algo] = anomaly_list[-1] #final_anomalies= aggregate(anomaly_list) weights = anomalies_to_expweights(anomaly_list) max_overlap = -1 for algo in gateway.algo_iter(methods=["naive"]): # overlap penalized exponentially wrt length of anomaly list try: overlap = anomaly_weight_overlap( anomaly_dict[algo], weights) / math.exp( alpha * len(anomaly_dict[algo])) except OverflowError: overlap = 0 #print algo, overlap if max_overlap < overlap: max_overlap = overlap max_algo = algo print "max algo= ", max_algo #arranged_anomalies= arrange_anomalies(anomaly_dict[max_algo], weights) #print arranged_anomalies, len(arranged_anomalies) #if top==None: # top= len(arranged_anomalies) #return arranged_anomalies[:top], max_algo return anomaly_dict[max_algo], max_algo
def optimize_machine( paths): # optimizes over all the timeseries provided in the path list # returns a list of algorithms and a list of corresponding anomalies anomaly_dict = dict() anomaly_list = list() index = 1 for path in paths: anomaly_dict[path] = dict() print "finding anomaly for path no." + str(index), path index += 1 for algo, feature, w_size in algo_iter(): # TODO: replace with my_dict try: var = anomaly_dict[path][algo] except KeyError: anomaly_dict[path][algo] = dict() try: var = anomaly_dict[path][algo][feature] except KeyError: anomaly_dict[path][algo][feature] = dict() anomaly_list.append( gateway.get_anomalies(path, algo, feature, percent=2, mul_dev=3, window_size=w_size)) print len(anomaly_list[-1]) anomaly_dict[path][algo][feature][w_size] = anomaly_list[-1] final_anomalies, weights = aggregate(anomaly_list, ratio=0.01) min_algo = list() anomalies = list() for path in paths: min_algo.append(find_optimal_algo(anomaly_dict[path], final_anomalies)) a = min_algo[-1] anomalies.append(anomaly_dict[path][a[0]][a[1]][a[2]]) return min_algo, anomalies, final_anomalies, weights
def ts_majority_vote(path, ratio= 0.005): anomaly_list= list() for algo, feature, w_size in algo_iter(): anomaly_list.append(gateway.get_anomalies(path, algo, feature, window_size= w_size, percent= 10, mul_dev= 1.5)) final_anomalies, weights= aggregate(anomaly_list, ratio) return final_anomalies