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)