In [1]:
%matplotlib inline
import matplotlib.pyplot as plt

import numpy as np
import pandas as pd
from joblib import Parallel, delayed

DATA_PATH = '/mnt/cms/version2/merged.pickle'

In [2]:
import cPickle as pickle

with open(DATA_PATH, 'r') as f:
    data = pickle.load(f)

labels = np.load('/mnt/cms/version2/labels.npy')

In [3]:
non_zero_lumi_index = np.where(
    (data['_instantLumi_minibias'] != 0.0) | \
    (data['_instantLumi_muons'] != 0.0) | \
    (data['_instantLumi_photons'] != 0.0)
)[0]

In [4]:
not_features = [
    '_luminosityBlock',
    '_run',
    '_instantLumi_minibias',
    '_instantLumi_muons',
    '_instantLumi_photons'
]

features = sorted(set(data.columns) - set(not_features))

X = data[features].values
y = labels
weights = data['_instantLumi_minibias'].values

In [5]:
print 'Non-zero luminosity:', non_zero_lumi_index.shape[0], 'lumisections'


Non-zero luminosity: 26046 lumisections

In [6]:
def build_predictions(clf, X, y, thr_q = 0.97,
                      n_folds = 10, max_loss_rate = 0.0, max_pollution_rate = 0.0,
                      title = ''):
    from sklearn.metrics import precision_recall_curve
    from sklearn.metrics import roc_curve
    from sklearn.metrics import auc
    from sklearn.cross_validation import StratifiedKFold
    
    cv = StratifiedKFold(y, n_folds=n_folds, shuffle=True, random_state=7777)
    proba = np.zeros(X.shape[0])
    
    train_indx, test_indx = iter(cv).next()
    clf.fit(X[train_indx, :], y[train_indx])
    proba[test_indx] = clf.predict_proba(X[test_indx, :])[:, 1]

    
    fpr, tpr, thr_roc = roc_curve(y[test_indx], proba[test_indx])
    auc_score = auc(fpr, tpr)
    
    precision, recall, thr = precision_recall_curve(y[test_indx], proba[test_indx])
    pr_auc = auc(precision, recall, reorder = True)
    
    thr = np.hstack([thr, [1.0]])
    
    pollution = 1.0 - precision
    loss = 1.0 - recall
    
    fs, axs = plt.subplots(1, 3, figsize=(14, 4))
    plt.suptitle(title)
    
    axs[0].set_title('ROC curve')
    axs[0].plot([0, 1], [0, 1], '--')
    axs[0].plot(fpr, tpr, label = "AUC = %.2f" % auc_score)
    axs[0].set_xlabel('False Positive Rate')
    axs[0].set_ylabel('True Positive Rate')
    axs[0].legend(loc='lower right')
    
    axs[1].set_title('Pollution-Loss curve')
    axs[1].plot([1, 1], [0, 0], '--')
    axs[1].plot(pollution, loss, label = "AUC = %.2f" % pr_auc)
    axs[1].set_xlabel('Pollution Rate')
    axs[1].set_ylabel('Loss Rate')
    axs[1].legend(loc='lower right')
    
    axs[2].set_title('Pollution/Loss rates')
    axs[2].plot(thr, pollution, label='pollution rate')
    axs[2].plot(thr, loss, label='loss rate')
    axs[2].set_xlabel('threshold')
    axs[2].set_ylabel('rate')
    axs[2].legend(loc = 'upper left')

    plt.show()
    
#     thr_high = np.min(thr[pollution <= max_pollution_rate])
#     thr_low = np.max(thr[loss <= max_loss_rate])
    
    thr_high = np.percentile(thr[pollution <= max_pollution_rate], q=(1.0 - thr_q) * 100.0)
    thr_low = np.percentile(thr[loss <= max_loss_rate], q=thr_q * 100.0)
    
    return clf, thr_low, thr_high

In [7]:
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=32, min_samples_leaf=10, n_jobs=-1, random_state=7777)

build_predictions(clf, X, y, n_folds=5)


Out[7]:
(RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
             max_depth=None, max_features='auto', max_leaf_nodes=None,
             min_samples_leaf=10, min_samples_split=2,
             min_weight_fraction_leaf=0.0, n_estimators=32, n_jobs=-1,
             oob_score=False, random_state=7777, verbose=0,
             warm_start=False), 0.003791360294117647, 0.99780942118226601)

In [8]:
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=32, min_samples_leaf=10, n_jobs=-1, random_state=7777)

build_predictions(clf, X, y, n_folds=10)


Out[8]:
(RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
             max_depth=None, max_features='auto', max_leaf_nodes=None,
             min_samples_leaf=10, min_samples_split=2,
             min_weight_fraction_leaf=0.0, n_estimators=32, n_jobs=-1,
             oob_score=False, random_state=7777, verbose=0,
             warm_start=False), 0.0037280701754385964, 0.97763498739142118)

In [9]:
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=64, min_samples_leaf=10, n_jobs=-1, random_state=7777)

build_predictions(clf, X, y, n_folds=5)


Out[9]:
(RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
             max_depth=None, max_features='auto', max_leaf_nodes=None,
             min_samples_leaf=10, min_samples_split=2,
             min_weight_fraction_leaf=0.0, n_estimators=64, n_jobs=-1,
             oob_score=False, random_state=7777, verbose=0,
             warm_start=False), 0.0045151654411764702, 0.98568062770401688)

In [10]:
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=64, min_samples_leaf=10, n_jobs=-1, random_state=7777)

build_predictions(clf, X, y, n_folds=10)


Out[10]:
(RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
             max_depth=None, max_features='auto', max_leaf_nodes=None,
             min_samples_leaf=10, min_samples_split=2,
             min_weight_fraction_leaf=0.0, n_estimators=64, n_jobs=-1,
             oob_score=False, random_state=7777, verbose=0,
             warm_start=False), 0.0075932017543859642, 0.97075034811332483)

In [11]:
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=96, min_samples_leaf=10, n_jobs=-1, random_state=7777)

build_predictions(clf, X, y, n_folds=10)


Out[11]:
(RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
             max_depth=None, max_features='auto', max_leaf_nodes=None,
             min_samples_leaf=10, min_samples_split=2,
             min_weight_fraction_leaf=0.0, n_estimators=96, n_jobs=-1,
             oob_score=False, random_state=7777, verbose=0,
             warm_start=False), 0.010121658312447785, 0.96825366953965919)

In [12]:
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=128, min_samples_leaf=10, n_jobs=-1, random_state=7777)

build_predictions(clf, X, y, n_folds=5)


Out[12]:
(RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
             max_depth=None, max_features='auto', max_leaf_nodes=None,
             min_samples_leaf=10, min_samples_split=2,
             min_weight_fraction_leaf=0.0, n_estimators=128, n_jobs=-1,
             oob_score=False, random_state=7777, verbose=0,
             warm_start=False), 0.0027458639705882351, 0.9798376801609785)

In [13]:
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=256, min_samples_leaf=10, n_jobs=-1, random_state=7777)

build_predictions(clf, X, y, n_folds=10)


Out[13]:
(RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
             max_depth=None, max_features='auto', max_leaf_nodes=None,
             min_samples_leaf=10, min_samples_split=2,
             min_weight_fraction_leaf=0.0, n_estimators=256, n_jobs=-1,
             oob_score=False, random_state=7777, verbose=0,
             warm_start=False), 0.0052485179294389818, 0.9683765791543042)

In [14]:
from sklearn.cross_validation import StratifiedKFold

In [15]:
def stream_learning(clf, X, y, n_folds, max_loss_rate, max_pollution_rate, cv_folds = 10):

    folds = StratifiedKFold(y, n_folds=n_folds, shuffle=True, random_state=7777).test_folds
    y_predicted = np.zeros(X.shape[0], dtype='int')
    
    threshold_low = np.zeros(n_folds)
    threshold_high = np.zeros(n_folds)
    
    X_train = np.zeros(shape = (0, X.shape[1]))
    y_train = np.zeros(shape = 0)
    
    rejection_rates = np.zeros(shape=n_folds)
    loss_rates = np.zeros(shape=n_folds)
    pollution_rates = np.zeros(shape=n_folds)
    
    for iteration in xrange(n_folds):
        indx = np.where(folds == iteration)[0]

        if X_train.shape[0] == 0:
            y_predicted[indx] == 0
            X_train = np.vstack([X_train, X[indx, :]])
            y_train = np.hstack([y_train, y[indx]])
            
            rejection_rates[iteration] = 1.0
            pollution_rates[iteration] = 0.0
            loss_rates[iteration] = 0.0
        else:
            clf, thr_low, thr_high = build_predictions(
                clf, X_train, y_train, n_folds=cv_folds, thr_q = 0.85,
                max_loss_rate = max_loss_rate, max_pollution_rate = max_pollution_rate,
                title='Iteration %d' % iteration
            )

            proba = clf.predict_proba(X[indx, :])[:, 1]
            
            rejected_indx = indx[(proba > thr_low) & (proba < thr_high)]
            
            y_predicted[indx[proba > thr_high]] = 1
            y_predicted[indx[proba < thr_low]] = -1
            y_predicted[rejected_indx] = 0
            
            X_train = np.vstack([X_train, X[rejected_indx, :]])
            y_train = np.hstack([y_train, y[rejected_indx]])
            
            rejection_rates[iteration] = float(rejected_indx.shape[0]) / indx.shape[0]
            
            try:
                ### Unrecognized good lumisections to all good lumisections
                FN = np.sum((y_predicted[indx] == -1) & (y[indx] == 1))
                loss_rates[iteration] = float(FN) / np.sum(y[indx] == 1)
            except:
                loss_rates[iteration] = 0.0
            
            try:
                ### Bad lumisections predicted as good
                FP = np.sum((y_predicted[indx] == 1) & (y[indx] == 0))
                pollution_rates[iteration] = float(FP) / np.sum(y_predicted[indx] == 1)
            except:
                pollution_rates[iteration] = 0.0

    return rejection_rates, loss_rates, pollution_rates

In [16]:
import itertools

folds = 5

max_lrs = np.linspace(0.0, 0.005, num=9)
max_prs = np.linspace(0.0, 0.005, num=9)

arrs = np.ones((max_lrs.shape[0], max_prs.shape[0]))
aprs = np.ones((max_lrs.shape[0], max_prs.shape[0]))
alrs = np.ones((max_lrs.shape[0], max_prs.shape[0]))

rrs = np.ones((max_lrs.shape[0], max_prs.shape[0], folds))
prs = np.ones((max_lrs.shape[0], max_prs.shape[0], folds))
lrs = np.ones((max_lrs.shape[0], max_prs.shape[0], folds))

for lr_i, lr in enumerate(max_lrs):
    for pr_i, pr in enumerate(max_prs):
        print 'Loss Rate constraint: %.2e' % lr
        print 'Pollution Rate constraint: %.2e' % pr

        clf = RandomForestClassifier(n_estimators=128, min_samples_leaf=10, n_jobs=-1, random_state=7777)

        rrs[lr_i, pr_i, :], lrs[lr_i, pr_i, :], prs[lr_i, pr_i, :] = stream_learning(
           clf, X, y, n_folds=folds, cv_folds=7,
           max_loss_rate = lr, max_pollution_rate = pr
        )

        plt.figure(figsize=(8,8))
        plt.title('Stream learning')
        plt.plot(rrs[lr_i, pr_i, :], label='rejection rate')
        plt.plot(lrs[lr_i, pr_i, :], label='loss rate')
        plt.plot(prs[lr_i, pr_i, :], label='pollution rate')
        plt.xlabel('iteration')
        plt.legend()
        plt.show()

        print 'Avg. rejection rate: %.3e' % np.mean(rrs[lr_i, pr_i, :])
        print 'Avg. loss rate: %.3e' % np.mean(lrs[lr_i, pr_i, :])
        print 'Avg. pollution rate: %.3e' % np.mean(prs[lr_i, pr_i, :])
        
        arrs[lr_i, pr_i] = np.mean(rrs[lr_i, pr_i, :])
        aprs[lr_i, pr_i] = np.mean(prs[lr_i, pr_i, :])
        alrs[lr_i, pr_i] = np.mean(lrs[lr_i, pr_i, :])


Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.940e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.102e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.940e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.102e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.940e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.102e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.885e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.172e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 5.887e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.173e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 6.015e-01
Avg. loss rate: 8.975e-05
Avg. pollution rate: 1.133e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 5.386e-01
Avg. loss rate: 1.795e-04
Avg. pollution rate: 1.776e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 5.719e-01
Avg. loss rate: 2.244e-04
Avg. pollution rate: 1.376e-03
Loss Rate constraint: 0.00e+00
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 5.174e-01
Avg. loss rate: 4.039e-04
Avg. pollution rate: 1.747e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.935e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.102e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.935e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.102e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.935e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.102e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.865e-01
Avg. loss rate: 4.937e-04
Avg. pollution rate: 1.172e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 5.867e-01
Avg. loss rate: 4.937e-04
Avg. pollution rate: 1.173e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 5.999e-01
Avg. loss rate: 1.346e-04
Avg. pollution rate: 1.133e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 5.383e-01
Avg. loss rate: 1.795e-04
Avg. pollution rate: 1.776e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 5.703e-01
Avg. loss rate: 2.693e-04
Avg. pollution rate: 1.376e-03
Loss Rate constraint: 6.25e-04
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 5.166e-01
Avg. loss rate: 4.039e-04
Avg. pollution rate: 1.747e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.745e-01
Avg. loss rate: 5.835e-04
Avg. pollution rate: 1.051e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.745e-01
Avg. loss rate: 5.835e-04
Avg. pollution rate: 1.051e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.745e-01
Avg. loss rate: 5.835e-04
Avg. pollution rate: 1.051e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.680e-01
Avg. loss rate: 5.835e-04
Avg. pollution rate: 1.034e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 5.349e-01
Avg. loss rate: 7.630e-04
Avg. pollution rate: 1.253e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 5.480e-01
Avg. loss rate: 4.488e-04
Avg. pollution rate: 1.296e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 5.130e-01
Avg. loss rate: 2.244e-04
Avg. pollution rate: 1.393e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 5.067e-01
Avg. loss rate: 4.039e-04
Avg. pollution rate: 1.466e-03
Loss Rate constraint: 1.25e-03
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 4.966e-01
Avg. loss rate: 1.077e-03
Avg. pollution rate: 1.864e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.617e-01
Avg. loss rate: 6.732e-04
Avg. pollution rate: 1.562e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.617e-01
Avg. loss rate: 6.732e-04
Avg. pollution rate: 1.562e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.617e-01
Avg. loss rate: 6.732e-04
Avg. pollution rate: 1.562e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.157e-01
Avg. loss rate: 1.436e-03
Avg. pollution rate: 1.613e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 4.752e-01
Avg. loss rate: 1.616e-03
Avg. pollution rate: 1.711e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 4.972e-01
Avg. loss rate: 6.732e-04
Avg. pollution rate: 1.748e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 4.834e-01
Avg. loss rate: 8.078e-04
Avg. pollution rate: 1.964e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 4.874e-01
Avg. loss rate: 6.732e-04
Avg. pollution rate: 1.982e-03
Loss Rate constraint: 1.87e-03
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 4.596e-01
Avg. loss rate: 8.976e-04
Avg. pollution rate: 2.108e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.552e-01
Avg. loss rate: 1.167e-03
Avg. pollution rate: 1.338e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.552e-01
Avg. loss rate: 1.167e-03
Avg. pollution rate: 1.338e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.552e-01
Avg. loss rate: 1.167e-03
Avg. pollution rate: 1.338e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.148e-01
Avg. loss rate: 1.526e-03
Avg. pollution rate: 1.690e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 5.024e-01
Avg. loss rate: 1.616e-03
Avg. pollution rate: 1.622e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 4.904e-01
Avg. loss rate: 1.077e-03
Avg. pollution rate: 1.808e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 4.907e-01
Avg. loss rate: 8.078e-04
Avg. pollution rate: 1.880e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 4.835e-01
Avg. loss rate: 1.077e-03
Avg. pollution rate: 1.986e-03
Loss Rate constraint: 2.50e-03
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 4.646e-01
Avg. loss rate: 1.077e-03
Avg. pollution rate: 1.933e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.315e-01
Avg. loss rate: 1.122e-03
Avg. pollution rate: 1.635e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.315e-01
Avg. loss rate: 1.122e-03
Avg. pollution rate: 1.635e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.277e-01
Avg. loss rate: 1.122e-03
Avg. pollution rate: 1.613e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 4.660e-01
Avg. loss rate: 1.526e-03
Avg. pollution rate: 1.827e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 4.415e-01
Avg. loss rate: 1.526e-03
Avg. pollution rate: 1.894e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 5.055e-01
Avg. loss rate: 1.167e-03
Avg. pollution rate: 1.660e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 4.416e-01
Avg. loss rate: 1.077e-03
Avg. pollution rate: 1.980e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 4.377e-01
Avg. loss rate: 1.077e-03
Avg. pollution rate: 2.029e-03
Loss Rate constraint: 3.13e-03
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 4.529e-01
Avg. loss rate: 1.167e-03
Avg. pollution rate: 1.989e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.197e-01
Avg. loss rate: 1.571e-03
Avg. pollution rate: 1.629e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.197e-01
Avg. loss rate: 1.571e-03
Avg. pollution rate: 1.629e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.166e-01
Avg. loss rate: 1.346e-03
Avg. pollution rate: 1.741e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.419e-01
Avg. loss rate: 1.391e-03
Avg. pollution rate: 1.629e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 4.741e-01
Avg. loss rate: 1.436e-03
Avg. pollution rate: 2.126e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 4.664e-01
Avg. loss rate: 1.436e-03
Avg. pollution rate: 2.147e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 4.451e-01
Avg. loss rate: 1.885e-03
Avg. pollution rate: 2.098e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 4.359e-01
Avg. loss rate: 2.154e-03
Avg. pollution rate: 2.313e-03
Loss Rate constraint: 3.75e-03
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 4.809e-01
Avg. loss rate: 8.976e-04
Avg. pollution rate: 1.912e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.325e-01
Avg. loss rate: 1.616e-03
Avg. pollution rate: 1.566e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.325e-01
Avg. loss rate: 1.616e-03
Avg. pollution rate: 1.566e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.308e-01
Avg. loss rate: 1.302e-03
Avg. pollution rate: 1.669e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.480e-01
Avg. loss rate: 1.840e-03
Avg. pollution rate: 1.629e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 5.238e-01
Avg. loss rate: 1.212e-03
Avg. pollution rate: 1.971e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 5.186e-01
Avg. loss rate: 1.661e-03
Avg. pollution rate: 1.693e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 4.465e-01
Avg. loss rate: 2.065e-03
Avg. pollution rate: 1.996e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 4.298e-01
Avg. loss rate: 2.065e-03
Avg. pollution rate: 2.329e-03
Loss Rate constraint: 4.38e-03
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 4.711e-01
Avg. loss rate: 1.212e-03
Avg. pollution rate: 1.854e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 0.00e+00
Avg. rejection rate: 5.243e-01
Avg. loss rate: 1.840e-03
Avg. pollution rate: 1.159e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 6.25e-04
Avg. rejection rate: 5.243e-01
Avg. loss rate: 1.840e-03
Avg. pollution rate: 1.159e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 1.25e-03
Avg. rejection rate: 5.202e-01
Avg. loss rate: 1.840e-03
Avg. pollution rate: 1.147e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 1.87e-03
Avg. rejection rate: 5.076e-01
Avg. loss rate: 2.020e-03
Avg. pollution rate: 1.337e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 2.50e-03
Avg. rejection rate: 4.980e-01
Avg. loss rate: 1.257e-03
Avg. pollution rate: 2.209e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 3.13e-03
Avg. rejection rate: 4.739e-01
Avg. loss rate: 1.616e-03
Avg. pollution rate: 2.184e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 3.75e-03
Avg. rejection rate: 4.742e-01
Avg. loss rate: 1.885e-03
Avg. pollution rate: 2.110e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 4.38e-03
Avg. rejection rate: 4.572e-01
Avg. loss rate: 1.616e-03
Avg. pollution rate: 2.018e-03
Loss Rate constraint: 5.00e-03
Pollution Rate constraint: 5.00e-03
Avg. rejection rate: 4.194e-01
Avg. loss rate: 1.705e-03
Avg. pollution rate: 2.682e-03

In [17]:
font = {'family' : 'normal',
        'weight' : 'normal',
        'size'   : 16}
import matplotlib
matplotlib.rc('font', **font)

In [18]:
plt.figure(figsize=(9, 8))
plt.title('Rejection Rate / Manual work')
arrs =  np.mean(rrs[:, :, -3:], axis=2)

plt.contourf(
    max_prs, max_lrs, arrs,
    levels=np.linspace(np.min(arrs), np.max(arrs), num=11),
    #cmap=plt.cm.Reds
)

plt.ylabel('Loss Rate constraint')
plt.xlabel('Pollution Rate constraint')
plt.colorbar()


Out[18]:
<matplotlib.colorbar.Colorbar at 0x7f6375f2d790>
/opt/anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py:1288: UserWarning: findfont: Font family [u'normal'] not found. Falling back to Bitstream Vera Sans
  (prop.get_family(), self.defaultFamily[fontext]))

In [19]:
plt.figure(figsize=(9, 8))
plt.title('Average Loss Rate')
alrs =  np.mean(lrs, axis=2)

plt.contourf(
    max_prs, max_lrs, alrs,
    levels=np.linspace(0, 0.05, num=21),
    #cmap=plt.cm.Reds
)

plt.ylabel('Loss Rate constraint')
plt.xlabel('Pollution Rate constraint')
plt.colorbar()


Out[19]:
<matplotlib.colorbar.Colorbar at 0x7f634ef3bf50>

In [20]:
plt.figure(figsize=(9, 8))
plt.title('Average Pollution Rate')
aprs =  np.mean(prs, axis=2)

plt.contourf(
    max_prs, max_lrs, aprs.T,
    levels=np.linspace(0, 0.005, num=11),
    #cmap=plt.cm.Reds
)

plt.xlabel('Loss Rate constraint')
plt.ylabel('Pollution Rate constraint')
plt.colorbar()


Out[20]:
<matplotlib.colorbar.Colorbar at 0x7f6376f7d510>

In [21]:
plt.figure(figsize=(9, 8))
plt.title('Average Loss Rate')
plt.contourf(lrs, prs, alrs.T, cmap=plt.cm.Reds)
plt.xlabel('Loss Rate constraint')
plt.ylabel('Pollution Rate constraint')
plt.colorbar()


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-1e964a936e1a> in <module>()
      1 plt.figure(figsize=(9, 8))
      2 plt.title('Average Loss Rate')
----> 3 plt.contourf(lrs, prs, alrs.T, cmap=plt.cm.Reds)
      4 plt.xlabel('Loss Rate constraint')
      5 plt.ylabel('Pollution Rate constraint')

/opt/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.pyc in contourf(*args, **kwargs)
   2781         ax.hold(hold)
   2782     try:
-> 2783         ret = ax.contourf(*args, **kwargs)
   2784     finally:
   2785         ax.hold(washold)

/opt/anaconda/lib/python2.7/site-packages/matplotlib/__init__.pyc in inner(ax, *args, **kwargs)
   1810                     warnings.warn(msg % (label_namer, func.__name__),
   1811                                   RuntimeWarning, stacklevel=2)
-> 1812             return func(ax, *args, **kwargs)
   1813         pre_doc = inner.__doc__
   1814         if pre_doc is None:

/opt/anaconda/lib/python2.7/site-packages/matplotlib/axes/_axes.pyc in contourf(self, *args, **kwargs)
   5650             self.cla()
   5651         kwargs['filled'] = True
-> 5652         return mcontour.QuadContourSet(self, *args, **kwargs)
   5653     contourf.__doc__ = mcontour.QuadContourSet.contour_doc
   5654 

/opt/anaconda/lib/python2.7/site-packages/matplotlib/contour.pyc in __init__(self, ax, *args, **kwargs)
   1422         are described in QuadContourSet.contour_doc.
   1423         """
-> 1424         ContourSet.__init__(self, ax, *args, **kwargs)
   1425 
   1426     def _process_args(self, *args, **kwargs):

/opt/anaconda/lib/python2.7/site-packages/matplotlib/contour.pyc in __init__(self, ax, *args, **kwargs)
    861         self._transform = kwargs.get('transform', None)
    862 
--> 863         self._process_args(*args, **kwargs)
    864         self._process_levels()
    865 

/opt/anaconda/lib/python2.7/site-packages/matplotlib/contour.pyc in _process_args(self, *args, **kwargs)
   1443                 self._corner_mask = mpl.rcParams['contour.corner_mask']
   1444 
-> 1445             x, y, z = self._contour_args(args, kwargs)
   1446 
   1447             _mask = ma.getmask(z)

/opt/anaconda/lib/python2.7/site-packages/matplotlib/contour.pyc in _contour_args(self, args, kwargs)
   1526             args = args[1:]
   1527         elif Nargs <= 4:
-> 1528             x, y, z = self._check_xyz(args[:3], kwargs)
   1529             args = args[3:]
   1530         else:

/opt/anaconda/lib/python2.7/site-packages/matplotlib/contour.pyc in _check_xyz(self, args, kwargs)
   1590                                 "{0} instead of {1}.".format(y.shape, z.shape))
   1591         else:
-> 1592             raise TypeError("Inputs x and y must be 1D or 2D.")
   1593 
   1594         return x, y, z

TypeError: Inputs x and y must be 1D or 2D.

In [ ]:
plt.figure(figsize=(9, 8))
plt.title('Average Pollution Rate')
plt.contourf(prs, lrs, aprs.T, cmap=plt.cm.Reds)
plt.xlabel('Loss Rate constraint')
plt.ylabel('Pollution Rate constraint')
plt.colorbar()

In [ ]:
plt.matshow(arrs, cmap=plt.cm.Reds)
plt.xlabel('Pollution rate')
plt.ylabel('Loss rate')
plt.colorbar()

In [ ]: