예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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