示例#1
0
 def get_plot_lt_data(model, lt):
     data_set_names = util.OrderedSet(sorted(zip(*data_lt_dict.keys())[0]))
     noise_levels = util.OrderedSet(sorted(zip(*data_lt_dict.keys())[1]))
     data = list()
     for noise_level in noise_levels:
         across_dset_data = list()
         for data_set_name in data_set_names:
             stat, sterr = data_lt_dict[ ( data_set_name, noise_level, model, lt ) ]
             across_dset_data.append(stat)
         mean, sterr = summarize_mean_serr(across_dset_data)
         data.append( ( noise_level, mean, sterr ) )
     return data
示例#2
0
def plot_noise_results_across_data_sets\
                (data_dict, model, stat_name='F1', ax=None):
    """

    :param data_dict:
    :param model:
    :param stat_name:
    :param title_data_name:
    :param ax:
    :return:
    """

    data_set_names = util.OrderedSet(sorted(zip(*data_dict.keys())[0]))
    noise_levels = util.OrderedSet(sorted(zip(*data_dict.keys())[1]))

    def get_plot_data(model, lt):
        data = list()
        for noise_level in noise_levels:
            across_dset_data = list()
            for data_set_name in data_set_names:
                stat, sterr = data_dict[ ( data_set_name, noise_level, model, lt ) ]
                across_dset_data.append(stat)
            mean, sterr = summarize_mean_serr(across_dset_data)
            data.append( ( noise_level, mean, sterr ) )
        return data

    data_lt = get_plot_data(model, 'LT')
    data_nolt = get_plot_data(model, 'noLT')

    if ax is None:
        fig = plt.figure()
        ax = fig.gca()

    x, y, yerr = zip(*data_lt)
    x = precision_to_sigma(x)
    ax.errorbar(x, y, yerr=yerr, color='coral', fmt='--o', label='LT')
    x, y, yerr = zip(*data_nolt)
    x = precision_to_sigma(x)
    ax.errorbar(x, y, yerr=yerr, color='darkcyan', fmt='--o', label='noLT')
    # 'darkcyan', 'darkturquoise', 'indianred'

    ax.grid(True)

    # set_xticks_precision_to_sigma_ticks(x, ax)

    ax.set_xlabel(r'IID Normal noise: $\sigma$')
    ax.set_ylabel(stat_name)

    model_name = model.split('_')[0].swapcase()
    title = 'Model {0}'.format(model_name)

    ax.set_title(title, fontsize=10)
    ax.legend(loc='lower left')
def dict_to_prettytable(d, decimal_precision=3):
    dfmtr = '{{0:.{0}f}}'.format(decimal_precision)
    for data_set_name, lt_dict in d.iteritems():
        for data_set_LT, lt_num_dict in lt_dict.iteritems():
            header = [ 'Iteration' ] \
                     + [ '{0}'.format(key) for key in lt_num_dict.keys() ]
            table = prettytable.PrettyTable(header)

            iteration_keys = util.OrderedSet()

            for value_dict in lt_num_dict.itervalues():
                for iter_key in value_dict.iterkeys():
                    iteration_keys.add(iter_key)

            for iter_key in iteration_keys:
                row = [iter_key]
                for value_dict in lt_num_dict.itervalues():
                    if iter_key in value_dict:
                        value = value_dict[iter_key]
                        try:
                            value = float(value)
                            value = dfmtr.format(value)
                        except ValueError:
                            pass
                    else:
                        value = 'Null'
                    row.append(value)
                # print row
                table.add_row(row)

            print '\n{0} {1}:'.format(data_set_name, data_set_LT)
            print table
示例#4
0
def plot_lt_nolt_differences(data_dict, stat_name, data_set_name):

    # data_set_names = util.OrderedSet(sorted(zip(*data_dict.keys())[0]))
    noise_levels = util.OrderedSet(sorted(zip(*data_dict.keys())[1]))

    def get_plot_data(model):
        data = list()
        for noise_level in noise_levels:
            stat_LT, sterr = data_dict[ ( data_set_name, noise_level, model, 'LT' ) ]
            stat_noLT, sterr = data_dict[ ( data_set_name, noise_level, model, 'noLT' ) ]
            diff = stat_LT - stat_noLT
            data.append( ( noise_level, diff ) )
        return data

    data_hmm = get_plot_data('hmm_hdp_w0')
    data_hsmm = get_plot_data('hsmm_hdp_w0')

    fig = plt.figure()
    ax = fig.gca()

    x, y = zip(*data_hmm)
    ax.plot(x, y, label='hmm')
    x, y = zip(*data_hsmm)
    ax.plot(x, y, label='hsmm')

    ax.set_title('Data set: {0}'.format(data_set_name))
    ax.set_xlabel('precision')
    ax.set_ylabel('{0} difference: LT - noLT'.format(stat_name))
    ax.legend(loc='lower right')
示例#5
0
def plot_noise_results_in_ax\
                (ax, data_dict, model, stat_name='F1', data_set_name=None,
                 title_data_name=False):

    noise_levels = util.OrderedSet(sorted(zip(*data_dict.keys())[1]))

    def get_plot_data(model, lt):
        data = list()
        for noise_level in noise_levels:
            stat, sterr = data_dict[ ( data_set_name, noise_level, model, lt ) ]
            data.append( ( noise_level, stat, sterr ) )
        return data

    data_lt = get_plot_data(model, 'LT')
    data_nolt = get_plot_data(model, 'noLT')

    x, y, yerr = zip(*data_lt)
    ax.errorbar(x, y, yerr=yerr, fmt='-o', label='LT')
    x, y, yerr = zip(*data_nolt)
    ax.errorbar(x, y, yerr=yerr, fmt='-o', label='noLT')

    ax.set_xlabel('Precision')
    ax.set_ylabel(stat_name)
    if title_data_name:
        title = 'Data set \'{0}\', model \'{1}\''.format(data_set_name, model)
    else:
        title = 'Model \'{0}\''.format(model)
    ax.set_title(title)
    ax.legend(loc='lower right')
示例#6
0
def plot_lt_nolt_diff_across_data_sets(data_dict, stat_name, ax=None):

    data_set_names = util.OrderedSet(sorted(zip(*data_dict.keys())[0]))
    noise_levels = util.OrderedSet(sorted(zip(*data_dict.keys())[1]))

    def get_plot_data(model):
        data = list()
        for noise_level in noise_levels:
            diffs = list()
            for data_set_name in data_set_names:
                stat_LT, sterr = data_dict[ ( data_set_name, noise_level, model, 'LT' ) ]
                stat_noLT, sterr = data_dict[ ( data_set_name, noise_level, model, 'noLT' ) ]
                diff = stat_LT - stat_noLT
                diffs.append(diff)
            mean_diffs, sterr_diffs = summarize_mean_serr(diffs)
            data.append( ( noise_level, mean_diffs, sterr_diffs ) )
        return data

    data_hmm = get_plot_data('hmm_hdp_w0')
    data_hsmm = get_plot_data('hsmm_hdp_w0')

    if ax is None:
        fig = plt.figure()
        ax = fig.gca()

    x, y, yerr = zip(*data_hmm)
    x = precision_to_sigma(x)
    ax.errorbar(x, y, yerr=yerr, color='blue', fmt='--o', label='HMM')
    x, y, yerr = zip(*data_hsmm)
    x = precision_to_sigma(x)
    ax.errorbar(x, y, yerr=yerr, color='indianred', fmt='--o', label='HSMM')
    # 'orange'

    ax.grid(True)

    ax.set_xlim((0.2, 1.5))  # max(x)

    # set_xticks_precision_to_sigma_ticks(x, ax)

    ax.set_title('LT - noLT {0} Differences'.format(stat_name), fontsize=10)
    ax.set_xlabel(r'IID Normal noise: $\sigma$')
    ax.set_ylabel('{0} difference: LT - noLT'.format(stat_name))
    ax.legend(loc='upper right')

    return ax
示例#7
0
def plot_all_noise_results_across_data_sets_nodiff(data_dict, stat_name='F1'):

    mydpi = 96
    fig, axs = plt.subplots(nrows=1, ncols=2, sharex=True,
                            figsize=(1300/mydpi, 500/mydpi), dpi=mydpi)

    data_set_names = util.OrderedSet(sorted(zip(*data_dict.keys())[0]))
    fig.suptitle('Comparison of LT vs noLT across emission noise levels (as precision), '
                 + '{0} figures sets at each noise level'.format(len(data_set_names)),
                 y=1.0)

    plot_noise_results_across_data_sets\
        (data_dict, 'hmm_hdp_w0', stat_name=stat_name, ax=axs[0])
    plot_noise_results_across_data_sets\
        (data_dict, 'hsmm_hdp_w0', stat_name=stat_name, ax=axs[1])
    #plot_lt_nolt_diff_across_data_sets\
    #    (data_dict, stat_name, ax=axs[2])

    fig.subplots_adjust(wspace=0.4)

    plt.savefig('figures/F1_LTvsnoLT_over_noise_no_diff.pdf', format='pdf')
示例#8
0
def plot_all_noise_results_across_data_sets_with_fhmm\
                (data_lt_dict, data_factorial_dict, stat_name='F1',
                 show_diff=True,
                 show_p=True,
                 save_p=False):

    if show_diff:
        nsubplots = 3
    else:
        nsubplots = 2

    mydpi = 96
    fig, axs = plt.subplots(nrows=1, ncols=nsubplots, sharex=True,
                            figsize=(1300/mydpi, 500/mydpi), dpi=mydpi)

    data_set_names = util.OrderedSet(sorted(zip(*data_lt_dict.keys())[0]))
    fig.suptitle('Comparison of LT vs noLT across emission noise levels (as precision), '
                 + '{0} figures sets at each noise level'.format(len(data_set_names)),
                 y=1.0)

    plot_lt_nolt_fhmm_results\
        (data_lt_dict, data_factorial_dict, 'hmm_hdp_w0', factorial_type='hmm',
         stat_name=stat_name, ax=axs[0])
    plot_lt_nolt_fhmm_results\
        (data_lt_dict, data_factorial_dict, 'hsmm_hdp_w0', factorial_type='hsmm',
         stat_name=stat_name, ax=axs[1])

    if show_diff:
        plot_lt_nolt_diff_across_data_sets\
            (data_lt_dict, stat_name, ax=axs[2])

    fig.subplots_adjust(wspace=0.4)

    if save_p:
        plt.savefig('figures/F1_LT-noLT-Factorial_over_noise.pdf', format='pdf')

    if show_p:
        plt.show()