Newer
Older
adaptive-nback / benchmarks / benchmark_diagrams.py
Morteza Ansarinia on 1 Mar 2019 6 KB prepare demo and diagrams.
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

import benchmarks.common as common


def tlratio():
    data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv')
    data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv')

    data = data.append(data2,ignore_index=True)
    stats = []
    for trials in range(common.trials_range[1]):
        alg2 = (data.alg == 'nb_gm_002') & (data.trials == trials)
        alg4 = (data.alg == 'nb_gm_004') & (data.trials == trials)
        targets2 = data[alg2].targets if alg2.shape[0] > 0 else np.nan
        targets4 = data[alg4].targets if alg4.shape[0] > 0 else np.nan
        lures2 = data[alg2].lures if alg2.shape[0] > 0 else np.nan
        lures4 = data[alg4].lures if alg4.shape[0] > 0 else np.nan
        stats.append([trials, (targets2/lures2).mean(), (targets4/lures4).mean()])
    stats = pd.DataFrame(stats, columns=['trials', 'tl2', 'tl4']) #.dropna(subset=['skewness'])

    plt.style.use('ggplot')

    plt.ylim(bottom=0, top=30)
    plt.scatter(stats.trials, stats.tl2, color='blue', alpha=0.2, label='nb_gm_002')
    idx = np.isfinite(stats.trials) & np.isfinite(stats.tl2)
    p = np.poly1d(np.polyfit(stats.trials[idx], stats.tl2[idx], 1))
    plt.plot(stats.trials, p(stats.trials), color='blue')

    plt.scatter(stats.trials, stats.tl4, color='red', alpha=0.2, label='nb_gm_004')
    idx = np.isfinite(stats.trials) & np.isfinite(stats.tl4)
    p = np.poly1d(np.polyfit(stats.trials[idx], stats.tl4[idx], 2))
    plt.plot(stats.trials, p(stats.trials), color='red')

    # plt.title('T:L Ratio')
    plt.ylabel('T:L Ratio')
    plt.xlabel('Trials')

    plt.legend()

    plt.savefig(f'benchmarks/results/2vs4_tlratio.png', bbox_inches='tight')
    plt.show()


def time_per_trial():
    data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv')
    data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv')

    data = data.append(data2)
    stats = []
    for t in range(common.trials_range[1]):
        alg2 = (data.alg == 'nb_gm_002') & (data.trials == t)
        alg4 = (data.alg == 'nb_gm_004') & (data.trials == t)
        time2 = data[alg2].time.mean() * 1000 if alg2.shape[0] > 0 else np.nan
        time4 = data[alg4].time.mean() * 1000 if alg4.shape[0] > 0 else np.nan
        stats.append([t, time2, time4])
    stats = pd.DataFrame(stats, columns=['trials', 'time2', 'time4']) #.dropna(subset=['skewness'])

    print(stats)
    plt.style.use('ggplot')
    plt.scatter(stats.trials, stats.time2, color='blue', alpha=0.2, label='nb_gm_002')
    idx = np.isfinite(stats.trials) & np.isfinite(stats.time2)
    p = np.poly1d(np.polyfit(stats.trials[idx], stats.time2[idx], 3))
    plt.plot(stats.trials, p(stats.trials), color='blue')

    plt.scatter(stats.trials, stats.time4, color='red', alpha=0.2, label='nb_gm_004')
    idx = np.isfinite(stats.trials) & np.isfinite(stats.time4)
    p = np.poly1d(np.polyfit(stats.trials[idx], stats.time4[idx], 3))
    plt.plot(stats.trials, p(stats.trials), color='red')

    # plt.title('Time Profile')
    plt.ylabel('Time (ms)')
    plt.xlabel('Trials')

    plt.legend()

    plt.savefig(f'benchmarks/results/2v4_time_trials.png', bbox_inches='tight')
    plt.show()

def time_profiles():
    data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv')
    data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv')

    data = data.append(data2)
    stats = []
    for ni in range(2, 8):
        alg2 = (data.alg == 'nb_gm_002') & (data.n == ni)
        alg4 = (data.alg == 'nb_gm_004') & (data.n == ni)
        time2 = data[alg2].time.mean() * 1000
        time4 = data[alg4].time.mean() * 1000
        stats.append([ni, time2, time4])
    stats = pd.DataFrame(stats, columns=['n', 'time2', 'time4']) #.dropna(subset=['skewness'])

    print(stats)
    plt.style.use('ggplot')
    plt.scatter(stats.n, stats.time2, color='blue', alpha=0.2, label='nb_gm_002')
    p = np.poly1d(np.polyfit(stats.n, stats.time2, 3))
    plt.plot(stats.n, p(stats.n), color='blue')

    plt.scatter(stats.n, stats.time4, color='red', alpha=0.2, label='nb_gm_004')
    p = np.poly1d(np.polyfit(stats.n, stats.time4, 3))
    plt.plot(stats.n, p(stats.n), color='red')

    # plt.title('Time Profile')
    plt.ylabel('Time (ms)')
    plt.xlabel('N')

    plt.legend()

    plt.savefig(f'benchmarks/results/2vs4_time_n.png', bbox_inches='tight')
    plt.show()

def skewness():
    data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv')
    data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv')

    data = data.append(data2)
    stats = []
    for ni in range(2, 9):
        all_alg2 = (data.alg == 'nb_gm_002') & (data.n == ni)
        skewed_alg2 = (data.alg == 'nb_gm_002') & (data.n == ni) & data.skewed
        all_alg4 = (data.alg == 'nb_gm_004') & (data.n == ni)
        skewed_alg4 = (data.alg == 'nb_gm_004') & (data.n == ni) & data.skewed
        num_of_sequences2 = data[all_alg2].shape[0]
        skewed_sequences2 = data[skewed_alg2].shape[0]
        num_of_sequences4 = data[all_alg4].shape[0]
        skewed_sequences4 = data[skewed_alg4].shape[0]
        skewness2 = skewed_sequences2 * 100.0 / num_of_sequences2 if (num_of_sequences2>0) else 0
        skewness4 = skewed_sequences4 * 100.0 / num_of_sequences4 if (num_of_sequences4>0) else 0
        stats.append([ni, skewness2, skewness4])
    stats = pd.DataFrame(stats, columns=['n', 'skewness2', 'skewness4']) #.dropna(subset=['skewness'])


    plt.style.use('ggplot')
    plt.scatter(stats.n, stats.skewness2, color='blue', alpha=0.2, label='nb_gm_002')
    p = np.poly1d(np.polyfit(stats.n, stats.skewness2, 3))
    plt.plot(stats.n, p(stats.n), color='blue')


    plt.scatter(stats.n, stats.skewness4, color='red', alpha=0.2, label='nb_gm_004')
    p = np.poly1d(np.polyfit(stats.n, stats.skewness4, 3))
    plt.plot(stats.n, p(stats.n), color='red')

    # plt.title('Skewness')
    plt.ylabel('Skewed Blocks (%)')
    plt.xlabel('N')

    plt.legend()

    plt.savefig(f'benchmarks/results/2vs4_skewness.png', bbox_inches='tight')
    plt.show()

if __name__ == "__main__":
    tlratio()
    skewness()
    time_profiles()
    time_per_trial()