def svm_local(isDecision=False, n_predict=0, n_neighbors=5000, isSgd=True):
    start = time.time()
    db_manager = DbManager()
    db_manager.connect('../db/annotated.db')
    print("Start converting train points")
    train_points_tmp = train_points.tolist()
    train_classes_tmp = train_classes.tolist()
    print("Conversion finished in time {0}s".format(time.time()-start))

    predict_classes = []
    for point_id, point_vector in enumerate(test_points):
        if point_id >= 100:
            break
        if point_id % 10 == 0:
            print("Start query test point {0}".format(point_id))

        neighbors = [int(x) for x in db_manager.query_knn('../db/annotated.db', point_id, n_neighbors=n_neighbors)[0].split()]
        neighbor_points = [train_points_tmp[neighbor_id] for neighbor_id in neighbors]
        neighbor_classes = [train_classes_tmp[neighbor_id] for neighbor_id in neighbors]

        svmManager = SvmManager(None, verbose=verbose, isSgd=isSgd)
        svmManager.fit(np.array(neighbor_points), np.array(neighbor_classes), store=False)
        if not isDecision:
            predict_classes.append(svmManager.predict([point_vector])[0]) #only one class result
        else:
            predict_classes.append(svmManager.decision_function([point_vector], n_predict)[0] )

    end = time.time()
    logging.info("testing local svm finished in {0}s with {1}".format(end - start, model_file))
    return predict_classes
def benchmark_knn():
    db_manager = DbManager()
    db_manager.connect()
    train_classes_tmp = train_classes.tolist()
    class_count_dict = {}
    for point_id, point_vector in enumerate(test_points):

        # test_folder = test_names[point_id][0].split('_')[0]
        test_class = test_classes[point_id]
        # if test_folder not in good_folders:
        #     continue
        if point_id >= 1000:
            break
        if point_id % 10 == 0:
            print("Start query test point {0}".format(point_id))
        neighbors = [int(x) for x in db_manager.query_knn(point_id, n_neighbors=n_neighbors)[0].split()]
        neighbor_classes = [train_classes_tmp[neighbor_id] for neighbor_id in neighbors]
        correct_classes = neighbor_classes.count(test_class)
        print( "{0} {1}".format( correct_classes, float(correct_classes)/len(neighbor_classes)))
        if test_class not in class_count_dict:
            class_count_dict[test_class] = [0,0];
        else:
            class_count_dict[test_class][0] += correct_classes
            class_count_dict[test_class][1] += len(neighbor_classes)  #200, 1000, 5000
    print(class_count_dict)