def main(args): # define clustering methods cmethod = {Clustering.single: clustering.single_linkage, Clustering.complete: clustering.complete_linkage, Clustering.average: clustering.average_linkage} # get the expected file from the input file dirname = os.path.dirname(args.i) filename = os.path.splitext(os.path.basename(args.i))[0] expected_file = os.path.join(os.path.normpath(dirname), f'{filename}_expected.csv') expected = None if os.path.exists(expected_file): with open(expected_file, 'r') as f: reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) expected = list(reader) else: expected = [] points = np.genfromtxt(args.i, delimiter=',') ## Knee detection code ## points_reduced, points_removed = rdp.rdp(points, args.r) knees = kneedle.auto_knees(points_reduced) t_k = pp.filter_worst_knees(points_reduced, knees) t_k = pp.filter_corner_knees(points_reduced, t_k) filtered_knees = pp.filter_clustring(points_reduced, t_k, cmethod[args.c], args.t, args.m) if args.a: knees = pp.add_points_even(points, points_reduced, filtered_knees, points_removed) else: knees = rdp.mapping(filtered_knees, points_reduced, points_removed) ########################## """
def kneedle_novel(points, args): reduced, removed = rdp.rdp(points, args.r) points_reduced = points[reduced] knees = kneedle.auto_knees(points_reduced, p=kneedle.PeakDetection.All) knees = pp.filter_worst_knees(points_reduced, knees) knees = pp.filter_corner_knees(points_reduced, knees, t=args.c) knees = pp.filter_clustring(points_reduced, knees, clustering.average_linkage, args.t, args.k) knees = rdp.mapping(knees, reduced, removed) return knees
def postprocessing(points, knees, c=Clustering.average, t=0.1, m=ClusterRanking.left): knees = filter_worst_knees(points, knees) knees = filter_corner_knees(points, knees) cmethod = { Clustering.single: clustering.single_linkage, Clustering.complete: clustering.complete_linkage, Clustering.average: clustering.average_linkage } current_knees = filter_clustring(points, knees, cmethod[c], t, m) return current_knees
def kneedle_novel(points, args): reduced, removed = rdp.rdp(points, args.r) points_reduced = points[reduced] knees = kneedle.auto_knees(points_reduced, p=kneedle.PeakDetection.All) #x = points_reduced[:, 0] #y = points_reduced[:, 1] #plt.plot(x, y) #plt.plot(x[knees], y[knees], 'r+') #plt.show() knees = pp.filter_worst_knees(points_reduced, knees) knees = pp.filter_corner_knees(points_reduced, knees, t=args.c) knees = pp.filter_clusters(points_reduced, knees, clustering.average_linkage, args.t, args.k) knees = rdp.mapping(knees, reduced, removed) return knees
def postprocessing(points, knees, args): logger.info('Post Processing') #logger.info('Knees: %s', knees) logger.info('Initial #Knees: %s', len(knees)) wknees = filter_worst_knees(points, knees) #plot_knees(plt, points, knees, 'Worst Knees') logger.info('After Worst #Knees: %s', len(knees)) knees = filter_corner_knees(points, wknees) #plot_knees(plt, points, knees, 'Corner Knees') #diff = np.setdiff1d(wknees, knees) #plot_knees(plt, points, diff, 'Diff Knees') logger.info('After Corner #Knees: %s', len(knees)) #logger.info('Worst Knees: %s', len(knees)) cmethod = {Clustering.single: clustering.single_linkage, Clustering.complete: clustering.complete_linkage, Clustering.average: clustering.average_linkage} current_knees = filter_clustring(points, knees, cmethod[args.c], args.t, args.m) logger.info('Clustering Knees: %s', len(current_knees)) return current_knees
def main(args): # get the expected file from the input file dirname = os.path.dirname(args.i) filename = os.path.splitext(os.path.basename(args.i))[0] expected_file = os.path.join(os.path.normpath(dirname), f'{filename}_expected.csv') expected = None if os.path.exists(expected_file): with open(expected_file, 'r') as f: reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) expected = list(reader) else: expected = [] expected = np.array(expected) points = np.genfromtxt(args.i, delimiter=',') ## Knee detection code ## reduced, removed = rdp.rdp(points, args.r) points_reduced = points[reduced] knees = np.arange(1, len(reduced)) t_k = pp.filter_worst_knees(points_reduced, knees) t_k = pp.filter_corner_knees(points_reduced, t_k, t=args.c) filtered_knees = pp.filter_clusters(points_reduced, t_k, clustering.average_linkage, args.t, args.k) ########################################################################################## # add even points if args.a: knees = pp.add_points_even(points, reduced, filtered_knees, removed) else: knees = rdp.mapping(filtered_knees, reduced, removed) rmspe_k = evaluation.rmspe(points, knees, expected, evaluation.Strategy.knees) rmspe_e = evaluation.rmspe(points, knees, expected, evaluation.Strategy.expected) cm = evaluation.cm(points, knees, expected, t = 0.01) mcc = evaluation.mcc(cm) logger.info(f'RMSE(knees) RMSE(exp) MCC') logger.info(f'-------------------------------------------') logger.info(f'{rmspe_k:10.2E} {rmspe_e:10.2E} {mcc:10.2E}') # store outpout if args.o: dirname = os.path.dirname(args.i) filename = os.path.splitext(os.path.basename(args.i))[0] output = os.path.join(os.path.normpath(dirname), f'{filename}_output.csv') dataset = points[knees] with open(output, 'w') as f: writer = csv.writer(f) writer.writerows(dataset) # display result if args.g: x = points[:, 0] y = points[:, 1] plt.plot(x, y) plt.plot(x[knees], y[knees], 'r+') plt.show()
def main(args): # get the expected file from the input file dirname = os.path.dirname(args.i) filename = os.path.splitext(os.path.basename(args.i))[0] expected_file = os.path.join(os.path.normpath(dirname), f'{filename}_expected.csv') expected = None if os.path.exists(expected_file): with open(expected_file, 'r') as f: reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) expected = list(reader) else: expected = [] expected = np.array(expected) points = np.genfromtxt(args.i, delimiter=',') rs = [0.75, 0.80, 0.85, 0.90, 0.95] ts = [0.01, 0.02, 0.03, 0.04, 0.05] evaluations = [] for r in rs: ## Knee detection code ## points_reduced, points_removed = rdp.rdp(points, r) knees = np.arange(1, len(points_reduced)) t_k = pp.filter_worst_knees(points_reduced, knees) t_k = pp.filter_corner_knees(points_reduced, t_k) for t in ts: ## Clustering ## filtered_knees = pp.filter_clustring(points_reduced, t_k, clustering.average_linkage, t, ClusterRanking.left) final_knees = pp.add_points_even(points, points_reduced, filtered_knees, points_removed) ## Evaluation ## error_rmspe = evaluation.rmspe(points, final_knees, expected, evaluation.Strategy.knees) error_rmspe_exp = evaluation.rmspe(points, final_knees, expected, evaluation.Strategy.expected) _, _, _, _, cost_trace = evaluation.accuracy_trace( points, final_knees) _, _, _, _, cost_knee = evaluation.accuracy_knee( points, final_knees) evaluations.append( [error_rmspe, error_rmspe_exp, cost_trace, cost_knee]) ## Compute the Correlation ## evaluations = np.array(evaluations) rho = np.corrcoef(evaluations.T) rmspe_rmspe_exp = rho[0, 1] rmspe_cost_trace = rho[0, 2] rmspe_cost_knee = rho[0, 3] rmspe_exp_cost_trace = rho[1, 2] rmspe_exp_cost_knee = rho[1, 3] cost_trace_cost_knee = rho[2, 3] #logger.info(f'{rho}') logger.info( f'{rmspe_rmspe_exp}, {rmspe_cost_trace}, {rmspe_cost_knee}, {rmspe_exp_cost_trace}, {rmspe_exp_cost_knee}, {cost_trace_cost_knee}' )
def test_filter_corner_knees_00(self): points = np.array([[1,3], [2,3], [3,3], [4,2.5], [5,2], [6,1.5], [7, 1]]) knees = np.array([1,2,3]) result = pp.filter_corner_knees(points, knees, .5) desired = np.array([1,3]) np.testing.assert_array_equal(result, desired)
def test_filter_corner_knees_01(self): points = np.array([[33.0, 0.25715391], [4.29000000e+02, 2.49621243e-01], [4.62000000e+02, 1.72661497e-01]]) knees = np.array([1]) result = pp.filter_corner_knees(points, knees, .5) desired = np.array([]) np.testing.assert_array_equal(result, desired)