def run_dataset(paras):
    dataset, sparsity, trade_off, learning_rate, max_iter, epsilon, write_to_dir, tao, num_nodes, deg, normalize = paras

    if not write_to_dir:
        logger = logging.getLogger('fei')
    else:
        log_fn = '{}_nodes_{}_deg_{}_sparsity_{:d}_trade_{}_lr_{}_{}_parallel.txt'.format(
            DATASET, num_nodes, deg, sparsity, trade_off, learning_rate,
            normalize)

        if os.path.isfile(os.path.join(write_to_dir, log_fn)):
            print('file exist !!!')
            return

        logger = logging.getLogger(log_fn)
        formatter = logging.Formatter('')
        file_handler = logging.FileHandler(filename=os.path.join(
            write_to_dir, log_fn),
                                           mode='w')
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)

    all_performance = []
    logger.debug('-' * 5 + ' setting ' + '-' * 5)
    logger.debug('sparsity: {:d}'.format(sparsity))
    logger.debug('learning rate: {:.5f}'.format(learning_rate))
    logger.debug('trade off: {:.5f}'.format(trade_off))
    logger.debug('tao: {:d}'.format(tao))

    for i, instance in enumerate(dataset):

        logger.debug('instance: {:d}'.format(i))

        # normalize = True
        if normalize:
            logger.debug('feature normalized')
            instance['features'] = instance['features'] / np.max(
                instance['features'])

        opt_x, run_time = optimize(instance,
                                   sparsity,
                                   trade_off,
                                   learning_rate,
                                   max_iter,
                                   epsilon,
                                   logger=None,
                                   tao=tao)

        logger.debug('run time: {:.5f}'.format(run_time))

        raw_pred_subgraph = np.nonzero(opt_x)[0]

        prec, rec, fm, iou = evaluate_block(instance['true_subgraph'],
                                            raw_pred_subgraph)

        logger.debug('-' * 5 + ' performance of raw prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(prec))
        logger.debug('recall   : {:.5f}'.format(rec))
        logger.debug('f-measure: {:.5f}'.format(fm))
        logger.debug('iou      : {:.5f}'.format(iou))

        refined_pred_subgraph = post_process_block(instance['graph'],
                                                   raw_pred_subgraph,
                                                   dataset=DATASET)
        refined_prec, refined_rec, refined_fm, refined_iou = evaluate_block(
            instance['true_subgraph'], refined_pred_subgraph)

        logger.debug('-' * 5 + ' performance of refined prediction ' + '-' * 5)
        logger.debug('refined precision: {:.5f}'.format(refined_prec))
        logger.debug('refined recall   : {:.5f}'.format(refined_rec))
        logger.debug('refined f-measure: {:.5f}'.format(refined_fm))
        logger.debug('refined iou      : {:.5f}'.format(refined_iou))

        all_performance.append((prec, rec, fm, iou, refined_prec, refined_rec,
                                refined_fm, refined_iou, run_time))

    all_performance = np.array(all_performance)
    avg_performance = np.mean(all_performance, axis=0)
    logger.debug('-' * 5 + ' average performance ' + '-' * 5)
    logger.debug('average presision: {:.5f}'.format(avg_performance[0]))
    logger.debug('average recall   : {:.5f}'.format(avg_performance[1]))
    logger.debug('average f-measure: {:.5f}'.format(avg_performance[2]))
    logger.debug('average iou      : {:.5f}'.format(avg_performance[3]))
    logger.debug('avg refined prec : {:.5f}'.format(avg_performance[4]))
    logger.debug('avg refined rec  : {:.5f}'.format(avg_performance[5]))
    logger.debug('avg refined fm   : {:.5f}'.format(avg_performance[6]))
    logger.debug('avg refined iou  : {:.5f}'.format(avg_performance[7]))
    logger.debug('average run time : {:.5f}'.format(avg_performance[8]))
示例#2
0
def run_dataset(paras):
    dataset, sparsity, threshold, trade_off, learning_rate, max_iter, epsilon, write_to_dir = paras

    # print log setting
    if not write_to_dir:
        logger = logging.getLogger('fei')
    else:
        log_fn = '{}_sparsity_{:d}_threshold_{}_trade_off_{}_lr_{}.txt'.format(
            DATASET, sparsity, threshold, trade_off, learning_rate)

        if os.path.isfile(os.path.join(write_to_dir, log_fn)):
            print('file exists !!!')
            return

        logger = logging.getLogger(log_fn)
        formatter = logging.Formatter('')
        file_handler = logging.FileHandler(filename=os.path.join(
            write_to_dir, log_fn),
                                           mode='w')
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)

    all_performance = []
    logger.debug('-' * 5 + ' setting ' + '-' * 5)
    logger.debug('sparsity: {:d}'.format(sparsity))
    logger.debug('learning rate: {:.5f}'.format(learning_rate))
    logger.debug('trade off: {:.5f}'.format(trade_off))

    for i, instance in enumerate(dataset):

        logger.debug('instance: {:d}'.format(i))

        opt_x, opt_y, run_time = optimize(instance,
                                          sparsity,
                                          threshold,
                                          trade_off,
                                          learning_rate,
                                          max_iter,
                                          epsilon,
                                          logger=logger)

        logger.debug('run time: {:.5f}'.format(run_time))

        second_graph = instance['second_graph']

        raw_pred_subgraph_x = np.nonzero(opt_x)[0]

        x_prec, x_rec, x_fm, x_iou = evaluate_block(instance['true_subgraph'],
                                                    raw_pred_subgraph_x)

        logger.debug('-' * 5 + ' performance of x prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(x_prec))
        logger.debug('recall   : {:.5f}'.format(x_rec))
        logger.debug('f-measure: {:.5f}'.format(x_fm))
        logger.debug('iou      : {:.5f}'.format(x_iou))
        logger.debug('raw x density second graph: {:.5f}'.format(
            nx.density(nx.subgraph(second_graph, list(raw_pred_subgraph_x)))
        ))  # note, calculating density is conducted on the second graph

        raw_pred_subgraph_y = np.nonzero(opt_y)[0]

        print('length y', len(raw_pred_subgraph_y))

        y_prec, y_rec, y_fm, y_iou = evaluate_block(instance['true_subgraph'],
                                                    raw_pred_subgraph_y)

        logger.debug('-' * 5 + ' performance of y prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(y_prec))
        logger.debug('recall   : {:.5f}'.format(y_rec))
        logger.debug('f-measure: {:.5f}'.format(y_fm))
        logger.debug('iou      : {:.5f}'.format(y_iou))
        logger.debug('raw y density second graph: {:.5f}'.format(
            nx.density(nx.subgraph(second_graph, list(raw_pred_subgraph_y)))))

        # connected in first graph
        connected_pred_subgraph_x = post_process_block(
            instance['first_graph'], raw_pred_subgraph_x, dataset=DATASET
        )  # note, connected operation is conducted on the first graph, raw_x is necessarily connected since some entries may be zeros
        connected_x_prec, connected_x_rec, connected_x_fm, connected_x_iou = evaluate_block(
            instance['true_subgraph'], connected_pred_subgraph_x)

        logger.debug('-' * 5 + ' performance of connected x prediction ' +
                     '-' * 5)
        logger.debug('refined precision: {:.5f}'.format(connected_x_prec))
        logger.debug('refined recall   : {:.5f}'.format(connected_x_rec))
        logger.debug('refined f-measure: {:.5f}'.format(connected_x_fm))
        logger.debug('refined iou      : {:.5f}'.format(connected_x_iou))
        logger.debug('connected x density second graph: {:.5f}'.format(
            nx.density(nx.subgraph(second_graph, connected_pred_subgraph_x))))

        connected_pred_subgraph_y = post_process_block(instance['first_graph'],
                                                       raw_pred_subgraph_y,
                                                       dataset=DATASET)
        connected_y_prec, connected_y_rec, connected_y_fm, connected_y_iou = evaluate_block(
            instance['true_subgraph'], connected_pred_subgraph_y)

        logger.debug('-' * 5 + ' performance of connected y prediction ' +
                     '-' * 5)
        logger.debug('refined precision: {:.5f}'.format(connected_y_prec))
        logger.debug('refined recall   : {:.5f}'.format(connected_y_rec))
        logger.debug('refined f-measure: {:.5f}'.format(connected_y_fm))
        logger.debug('refined iou      : {:.5f}'.format(connected_y_iou))
        logger.debug('refined y density second graph: {:.5f}'.format(
            nx.density(nx.subgraph(second_graph, connected_pred_subgraph_y))))

        # print(type(raw_pred_subgraph_x))
        # print(type(raw_pred_subgraph_y))

        intersect_pred_subgraph = set(list(raw_pred_subgraph_x)) & set(
            list(raw_pred_subgraph_y))

        intersect_prec, intersect_rec, intersect_fm, intersect_iou = evaluate_block(
            instance['true_subgraph'], intersect_pred_subgraph)

        logger.debug('-' * 5 + ' intersect performance of prediction ' +
                     '-' * 5)
        logger.debug('precision: {:.5f}'.format(intersect_prec))
        logger.debug('recall   : {:.5f}'.format(intersect_rec))
        logger.debug('f-measure: {:.5f}'.format(intersect_fm))
        logger.debug('iou      : {:.5f}'.format(intersect_iou))
        logger.debug('intersect density second graph: {:.5f}'.format(
            nx.density(nx.subgraph(second_graph, intersect_pred_subgraph))))

        connected_intersect_pred_subgraph = post_process_block(
            instance['first_graph'], intersect_pred_subgraph, dataset=DATASET)
        connected_intersect_prec, connected_intersect_rec, connected_intersect_fm, connected_intersect_iou = evaluate_block(
            instance['true_subgraph'], connected_intersect_pred_subgraph)

        logger.debug('-' * 5 +
                     ' connected intersect performance of prediction ' +
                     '-' * 5)
        logger.debug('precision: {:.5f}'.format(connected_intersect_prec))
        logger.debug('recall   : {:.5f}'.format(connected_intersect_rec))
        logger.debug('f-measure: {:.5f}'.format(connected_intersect_fm))
        logger.debug('iou      : {:.5f}'.format(connected_intersect_iou))
        logger.debug('connected intersect density second graph: {:.5f}'.format(
            nx.density(
                nx.subgraph(second_graph, connected_intersect_pred_subgraph))))

        union_pred_subgraph = set(list(raw_pred_subgraph_x)) | set(
            list(raw_pred_subgraph_y))
        union_prec, union_rec, union_fm, union_iou = evaluate_block(
            instance['true_subgraph'], union_pred_subgraph)

        logger.debug('-' * 5 + ' union performance of prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(union_prec))
        logger.debug('recall   : {:.5f}'.format(union_rec))
        logger.debug('f-measure: {:.5f}'.format(union_fm))
        logger.debug('iou      : {:.5f}'.format(union_iou))
        logger.debug('union density second graph: {:.5f}'.format(
            nx.density(nx.subgraph(second_graph, union_pred_subgraph))))

        connected_union_pred_subgraph = post_process_block(
            instance['first_graph'], union_pred_subgraph, dataset=DATASET)
        connected_union_prec, connected_union_rec, connected_union_fm, connected_union_iou = evaluate_block(
            instance['true_subgraph'], connected_union_pred_subgraph)

        logger.debug('-' * 5 + ' connected union performance of prediction ' +
                     '-' * 5)
        logger.debug('precision: {:.5f}'.format(connected_union_prec))
        logger.debug('recall   : {:.5f}'.format(connected_union_rec))
        logger.debug('f-measure: {:.5f}'.format(connected_union_fm))
        logger.debug('iou      : {:.5f}'.format(connected_union_iou))
        logger.debug('connected union density second graph: {:.5f}'.format(
            nx.density(nx.subgraph(second_graph,
                                   connected_union_pred_subgraph))))
示例#3
0
def run_dataset(paras):

    dataset, sparsity, threshold, trade_off, learning_rate, max_iter, epsilon, write_to_dir = paras

    if not write_to_dir:
        logger = logging.getLogger('fei')
    else:
        log_fn = '{}_sparsity_{:d}_threshold_{}_trade_{}_lr_{}.txt'.format(DATASET, sparsity, threshold, trade_off, learning_rate)

        if os.path.isfile(os.path.join(write_to_dir, log_fn)):
            print('file exists !!!')
            return

        logger = logging.getLogger(log_fn)
        formatter = logging.Formatter('')
        file_handler = logging.FileHandler(filename=os.path.join(write_to_dir, log_fn), mode='w')
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)

    all_performance = []
    logger.debug('-' * 5 + ' setting ' + '-' * 5)
    logger.debug('sparsity: {:d}'.format(sparsity))
    logger.debug('learning rate: {:.5f}'.format(learning_rate))
    logger.debug('trade off: {:.5f}'.format(trade_off))

    for i, instance in enumerate(dataset):

        logger.debug('instance: {:d}'.format(i))

        true_subgraph = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

        # if normalize:
        #     logger.debug('feature normalized')
        #     instance['features'] = instance['features'] / np.max(instance['features'])

        opt_x, opt_y, run_time = optimize(instance, sparsity, threshold, trade_off, learning_rate, max_iter, epsilon, logger=logger)

        logger.debug('run time: {:.5f}'.format(run_time))

        raw_pred_subgraph_x = np.nonzero(opt_x)[0]

        print('rawx', raw_pred_subgraph_x)

        # prec, rec, fm, iou = evaluate_block(instance['true_subgraph'], raw_pred_subgraph_x)
        prec, rec, fm, iou = evaluate_block(true_subgraph, raw_pred_subgraph_x)

        logger.debug('-' * 5 + ' performance of x prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(prec))
        logger.debug('recall   : {:.5f}'.format(rec))
        logger.debug('f-measure: {:.5f}'.format(fm))
        logger.debug('iou      : {:.5f}'.format(iou))

        raw_pred_subgraph_y = np.nonzero(opt_y)[0]

        print('rawy', raw_pred_subgraph_y)

        # prec, rec, fm, iou = evaluate_block(instance['true_subgraph'], raw_pred_subgraph_y)
        prec, rec, fm, iou = evaluate_block(true_subgraph, raw_pred_subgraph_y)

        logger.debug('-' * 5 + ' performance of y prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(prec))
        logger.debug('recall   : {:.5f}'.format(rec))
        logger.debug('f-measure: {:.5f}'.format(fm))
        logger.debug('iou      : {:.5f}'.format(iou))

        # connected in first graph
        refined_pred_subgraph_x = post_process_block(instance['first_graph'], raw_pred_subgraph_x, dataset=DATASET)
        # refined_prec, refined_rec, refined_fm, refined_iou = evaluate_block(instance['true_subgraph'], refined_pred_subgraph_x)
        refined_prec, refined_rec, refined_fm, refined_iou = evaluate_block(true_subgraph, refined_pred_subgraph_x)

        print('refined x', refined_pred_subgraph_x)
        logger.debug('-' * 5 + ' performance of refined x prediction ' + '-' * 5)
        logger.debug('refined precision: {:.5f}'.format(refined_prec))
        logger.debug('refined recall   : {:.5f}'.format(refined_rec))
        logger.debug('refined f-measure: {:.5f}'.format(refined_fm))
        logger.debug('refined iou      : {:.5f}'.format(refined_iou))

        refined_pred_subgraph_y = post_process_block(instance['first_graph'], raw_pred_subgraph_y, dataset=DATASET)
        # refined_prec, refined_rec, refined_fm, refined_iou = evaluate_block(instance['true_subgraph'], refined_pred_subgraph_y)
        refined_prec, refined_rec, refined_fm, refined_iou = evaluate_block(true_subgraph, refined_pred_subgraph_y)

        print('refined y', refined_pred_subgraph_y)
        logger.debug('-' * 5 + ' performance of refined y prediction ' + '-' * 5)
        logger.debug('refined precision: {:.5f}'.format(refined_prec))
        logger.debug('refined recall   : {:.5f}'.format(refined_rec))
        logger.debug('refined f-measure: {:.5f}'.format(refined_fm))
        logger.debug('refined iou      : {:.5f}'.format(refined_iou))

        combine_pred_subgraph = raw_pred_subgraph_x & raw_pred_subgraph_y

        print('combine', combine_pred_subgraph)

        # combine_prec, combine_rec, combine_fm, combine_iou = evaluate_block(instance['true_subgraph'], raw_pred_subgraph_y)
        combine_prec, combine_rec, combine_fm, combine_iou = evaluate_block(true_subgraph, raw_pred_subgraph_y)

        logger.debug('-' * 5 + ' performance of combine prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(combine_prec))
        logger.debug('recall   : {:.5f}'.format(combine_rec))
        logger.debug('f-measure: {:.5f}'.format(combine_fm))
        logger.debug('iou      : {:.5f}'.format(combine_iou))

        refined_combine_pred_subgraph = post_process_block(instance['first_graph'], combine_pred_subgraph, dataset=DATASET)

        print('refined combine', refined_combine_pred_subgraph)
        # refined_combine_prec, refined_combine_rec, refined_combine_fm, refined_combine_iou = evaluate_block(instance['true_subgraph'], raw_pred_subgraph_y)
        refined_combine_prec, refined_combine_rec, refined_combine_fm, refined_combine_iou = evaluate_block(true_subgraph, refined_combine_pred_subgraph)

        logger.debug('-' * 5 + ' performance of y prediction ' + '-' * 5)
        logger.debug('precision: {:.5f}'.format(refined_combine_prec))
        logger.debug('recall   : {:.5f}'.format(refined_combine_rec))
        logger.debug('f-measure: {:.5f}'.format(refined_combine_fm))
        logger.debug('iou      : {:.5f}'.format(refined_combine_iou))