In [1]:
import os

In [2]:
import librosa

In [3]:
import mir_eval

In [4]:
from collections import OrderedDict

In [5]:
import pandas as pd
import numpy as np
np.set_printoptions(precision=3)
pd.set_option('precision', 4, "display.max_rows", 999)

In [6]:
def make_onset_corpus(onset_path):
    
    # Beat files
    audio = librosa.util.find_files(onset_path, ext='wav')
    
    annotations = [af.replace('.wav', '.onsets') for af in audio]
    
    data = []
    for aud, ann in zip(audio, annotations):
        if os.path.exists(aud) and os.path.exists(ann):
            data.append((aud, ann))
    
    return pd.DataFrame(data=data, columns=['audio', 'annotation'])

In [7]:
def make_output_path(base, outpath):
    
    root = os.path.splitext(base)[0]
    
    output = os.path.join(outpath, os.path.extsep.join([root, 'json']))
    
    return output

In [27]:
def analyze(dframe, outpath='/home/bmcfee/git/librosa_parameters/data/onset'):
    
    index = dframe.index[0]
    base = os.path.basename(dframe['audio'][index])
    
    outfile = make_output_path(base, outpath)
    
    if os.path.exists(outfile):
        print 'Cached {}'.format(base)
        data = pd.read_json(outfile, orient='records')
        return data
    else:
        print 'Processing {}'.format(base)
    
    # Load the truth
    ref_times = np.sort(pd.read_table(dframe['annotation'][index], header=None, sep='\s+')[0].values)

    # Load the audio
    y, sr = librosa.load(dframe['audio'][index])
    
    # Construct the output container
    results = []
    hop_length = 512
    
    effective_sr = sr // hop_length
    
    # Onset strength parameters
    for fmax in [8000, 11025]:
        for n_mels in [32, 64, 128]:
            S = librosa.feature.melspectrogram(y=y, hop_length=hop_length, sr=sr, fmax=fmax, n_mels=n_mels)
            S = librosa.logamplitude(S)
            
            for aggregate in [np.mean, np.median]:
        
                # Compute the onset detection function
                oenv = librosa.onset.onset_strength(S=S,
                                                    sr=sr,
                                                    hop_length=hop_length,
                                                    aggregate=aggregate)
                
                for delta in [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10]:
                    onsets = librosa.onset.onset_detect(onset_envelope=oenv, sr=sr,
                                                        delta=delta, hop_length=hop_length)
                    
                    params = {'aggregate': aggregate.__name__,
                              'fmax': fmax,
                              'n_mels': n_mels,
                              'delta': delta,}
                             
                    est_times = librosa.frames_to_time(onsets, sr=sr, hop_length=hop_length)
                    scores = mir_eval.onset.evaluate(ref_times, est_times)
                            
                    cont = OrderedDict(index=index)
                    cont.update(params)
                    cont.update(scores)
                    results.append(cont)
                    
    # Blow away the cache
    #librosa.cache.clear()
    data = pd.DataFrame.from_dict(results, orient='columns')
    data.to_json(outfile, orient='records')
        
    return data

In [28]:
def analyze_corpus(corpus):
    
    results = None
    for idx in corpus.index:
        new_results = analyze(corpus.loc[[idx]])
        if results is None:
            results = new_results
        else:
            results = pd.concat([results, new_results])
            
    return results

In [29]:
from joblib import Parallel, delayed

In [30]:
def p_analyze_corpus(corpus, n_jobs=3):
    
    results = None
    
    dfunc = delayed(analyze)
    
    results = Parallel(n_jobs=n_jobs, verbose=10)(dfunc(corpus.loc[[idx]])
                                                  for idx in corpus.index)

    return pd.concat(results)


In [31]:
onset_data = make_onset_corpus('/home/bmcfee/data/onsets/clean_data/')

In [32]:
onset_results = p_analyze_corpus(onset_data)


[Parallel(n_jobs=3)]: Done   1 out of 351 | elapsed:    1.5s remaining:  8.7min
[Parallel(n_jobs=3)]: Done  29 out of 351 | elapsed:   10.7s remaining:  2.0min
[Parallel(n_jobs=3)]: Done  65 out of 351 | elapsed:   24.5s remaining:  1.8min
[Parallel(n_jobs=3)]: Done 101 out of 351 | elapsed:   39.4s remaining:  1.6min
[Parallel(n_jobs=3)]: Done 137 out of 351 | elapsed:   45.2s remaining:  1.2min
[Parallel(n_jobs=3)]: Done 173 out of 351 | elapsed:   53.8s remaining:   55.4s
[Parallel(n_jobs=3)]: Done 209 out of 351 | elapsed:  1.0min remaining:   42.2s
[Parallel(n_jobs=3)]: Done 245 out of 351 | elapsed:  1.1min remaining:   29.6s
[Parallel(n_jobs=3)]: Done 281 out of 351 | elapsed:  1.4min remaining:   20.3s
[Parallel(n_jobs=3)]: Done 317 out of 351 | elapsed:  1.6min remaining:   10.0s
[Parallel(n_jobs=3)]: Done 351 out of 351 | elapsed:  1.7min finished
/home/bmcfee/git/mir_eval/mir_eval/onset.py:51: UserWarning: Estimated onsets are empty.
  warnings.warn("Estimated onsets are empty.")
/home/bmcfee/git/mir_eval/mir_eval/onset.py:51: UserWarning: Estimated onsets are empty.
  warnings.warn("Estimated onsets are empty.")
/home/bmcfee/git/mir_eval/mir_eval/onset.py:51: UserWarning: Estimated onsets are empty.
  warnings.warn("Estimated onsets are empty.")
Processing ah_cello_03-Cello_Sonata_3__I_Allegro_ma_non_tanto_pt1.wav
Processing ah_cello_03_CelloTaksimi_pt1.wav
Processing ah_cello_08_-_Bach_(JS)-_Cello_Suite_-4_In_E_Flat_BWV_1010i_-_1._Preludium.wav
Processing ah_clarinet_44361_debudding_Clarinet_ORTF_Stereo_Pair_NT_5_s_01.wavProcessing ah_cello_cello1.wavProcessing ah_cello_14_VioloncelloTaksim_pt1.wav


Processing ah_clarinet_clarinet1.wavProcessing ah_clarinet_SL1_pt1.wavProcessing ah_clarinet_44784_alikirodgers_AB_Clarinet_01_pt1.wav


Processing ah_guitar_Guitar_Licks_06-12.wavProcessing ah_guitar_2684_TexasMusicForge_Dandelion_pt1.wavProcessing ah_clarinet_my_clarinet1.wav


Processing ah_guitar_Guitar_Licks_15-05.wavProcessing ah_guitar_Guitar_Licks_07-06.wavProcessing ah_guitar_Guitar_Licks_06-11.wav


Processing ah_guitar_Summer_Together_110_pt1.wavProcessing ah_guitar_Guitar_Licks_15-06.wavProcessing ah_guitar_Guitar_Licks_07-11.wav


Processing ah_guitar_my_guitar1.wavProcessing ah_guitar_guitar2.wavProcessing ah_guitar_Guitar_Licks_51-10.wav


Processing ah_kemence_08_-_HicazTaksim_cut.wavProcessing ah_kemence_01_sultaniyghtaksim_Kemence.wavProcessing ah_guitar_guitar3.wav


Processing ah_mixtures_jazz2.wavProcessing ah_kemence_10_huseyni_taksim_ve_cecenkizi_cut.wavProcessing ah_kemence_11_RastTaksim_Kemence.wav


Processing ah_ney_ne_icm05.wavProcessing ah_kemence_22_NevaTaksim_Kemence.wavProcessing ah_mixtures_classic2.wav


Processing ah_ney_ne_se01.wavProcessing ah_mixtures_classic3.wavProcessing ah_mixtures_pop1.wav


Processing ah_oud_1.wavProcessing ah_mixtures_jazz3.wavProcessing ah_ney_ne_icm13.wav


Processing ah_oud_Diverse_-_01_-_Taksim_pt1.wavProcessing ah_mixtures_rock1.wavProcessing ah_ney_ne_tmu2n06.wav


Processing ah_oud_Trio_Joubran-04-Safarcut.wavProcessing ah_ney_ne_icm09.wavProcessing ah_oud_Diverse_-_03_-_Muayyer_Kurdi_Taksim.wav


Processing ah_oud_ud_taksimleri_-_17_-_ussak_taksim.wavProcessing ah_ney_ne_se03.wavProcessing ah_oud_ud_taksimleri_-_02_-_huezzam_taksim_pt1.wav


Processing ah_percussion_castagnet1.wavProcessing ah_ney_ne_se04.wavProcessing ah_percussion_Jaillet64.wav


Processing ah_percussion_triangle.wavProcessing ah_oud_8.wavProcessing ah_percussion_cajon116_13.wav


Processing ah_piano_MOON.wavProcessing ah_oud_Diverse_-_02_-_Mahur_Pesrev_(Ud).wavProcessing ah_percussion_tabla.wav


Processing ah_piano_mussorgsky.wavProcessing ah_oud_rast_taksim1.wavProcessing ah_piano_Chick_Corea_-_03_-_Folk_Song.wav


Processing ah_piano_p5.wavProcessing ah_oud_ud_taksimleri_-_06_-_segah_taksim.wavProcessing ah_piano_Oscar_Peterson_-_02_-_Love_Ballade.wav


Processing ah_sax_20928_stephenchai_Gypsy_1_Alto_Sax_B_103bpm.wavProcessing ah_percussion_bongo1.wavProcessing ah_piano_autumn.wav


Processing ah_sax_george_russel2_-_dimensions_pt1.wavProcessing ah_percussion_conga1.wavProcessing ah_piano_piano1.wav


Processing ah_tanburpluck_ta_1eb03.wavProcessing ah_percussion_tambourine.wavProcessing ah_sax_herbieHanckockTrack06_pt1.wav


Processing ah_tanburpluck_ta_1eb06.wavProcessing ah_piano_Chick_Corea_-_08_-_So_in_Love.wavProcessing ah_tanburpluck_ta_1eb08.wav


Processing ah_tanburpluck_ta_1mc08.wavProcessing ah_piano_Oscar_Peterson_-_08_-_I_Love_You_Porgy.wavProcessing ah_trumpet_1_-_Lost_In_Madrid_Part_1.wav


Processing ah_trumpet_Miles_DAVIS__Michel_LEGRAND_DINGO_02.wavProcessing ah_piano_PianoMic_full_stick.wavProcessing ah_trumpet_trumpet1.wav


Processing ah_trumpet_waldhorn33_-_Paloseco_pt1.wavProcessing ah_piano_p3.wavProcessing ah_violin_42954_FreqMan_hoochie_violin_pt1.wav


Processing ah_violin_03__kurdilihicazkar__keman.wavProcessing ah_sax_Tubby_Hayes_-_The_Eighth_Wonder_-_11_-_Unidentified_12_Bar_Theme_pt1.wavProcessing ah_violin_my_violin1.wav


Processing ah_violin_my_violin2.wavProcessing ah_sax_sax1.wavProcessing ah_violin_my_violin3.wav


Processing ah_violin_violin2.wavProcessing ah_tanburpluck_ta_1eb07.wavProcessing jg_bell-octave1.wav


Processing jg_bell-octave2.wavProcessing ah_trumpet_chetbaker.wavProcessing jg_conga-muffled-1.wav


Processing jg_child-imitate-shaker-hi-up.wavProcessing ah_violin_01__hicaz__keman.wavProcessing jg_conga-open-1.wav


Processing jg_clarinet-C-octave0.wavProcessing ah_violin_dark_eyes_viol.wavProcessing jg_cymbal-hihat-lick.wav


Processing jg_cymbal-hihat-foot-open.wavProcessing jg_bass-elec-C-lo.wavProcessing jg_drum-bass-hi-1.wav


Processing jg_drum-snare-drag.wavProcessing jg_bass-elec2-E-lick.wavProcessing jg_drum-surdo-large-lick.wav


Processing jg_femalevoices_aa2_A3.wavProcessing jg_bell-octave0.wavProcessing jg_flugel-C.wav


Processing jg_flugel-lick.wavProcessing jg_child-imitate-owl.wavProcessing jg_flute-alto-lick.wav


Processing jg_glitch_groove_7.wavProcessing jg_clarinet-C-octave0-vib.wavProcessing jg_guitar-classical-E-octave1-vib.wav


Processing jg_guitar-classical-lick.wavProcessing jg_cymbal-hihat-openclose-stick.wavProcessing jg_guitar-elec-solid-dist-E-octave1-long.wav


Processing jg_guitar-elec-solid-lick.wavProcessing jg_cymbal-splash-stick.wavProcessing jg_guitar-elec-solid-dist-lick.wav


Processing jg_guitar_chord3.wavProcessing jg_drum-snare-roll-short.wavProcessing jg_guitar_chord2.wav


Processing jg_malevoices_oo2_C#4.wavProcessing jg_female-glissdown.wavProcessing jg_guitar_riff_cutup1.wav


Processing jg_mix3.wavProcessing jg_femalevoices_oo2_C#4.wavProcessing jg_malevoice_aa_A2.wav


Processing jg_piano_B4.wavProcessing jg_flute-alto-C.wavProcessing jg_metal_beat_2.wav


Processing jg_piano_chord.wavProcessing jg_guitar-ac-E-octave1.wavProcessing jg_mix1.wav


Processing jg_prep_piano_hit1.wavProcessing jg_guitar-elec-hollow-lick.wavProcessing jg_mix4.wav


Processing jg_thisIsTheSoundOfAVocoder_edited.wavProcessing jg_guitar-elec-solid-dist-EBfifths-octave1-long.wavProcessing jg_prep_piano_C0_2.wav


Processing jg_trpt-C-lo.wavProcessing jg_guitar_chord1.wavProcessing jg_sax-bari-C-lo.wav


Processing jpb_2_01 Kick Drum.wavProcessing jg_guitar_riff_cutup3.wavProcessing jg_shaker.wav


Processing jpb_2_02 Ped Hat.wavProcessing jg_metal_beat_1.wavProcessing jg_shenai-C.wav


Processing jpb_2_03 Kick.wavProcessing jg_mix2.wavProcessing jg_singing-womanMA-C-oo.wav


Processing jpb_2_04 Agogos.wavProcessing jg_piano-studio-octave1.wavProcessing jg_tabla-lick-voiceanddrums.wav


Processing jpb_2_07 Timbales.wavProcessing jg_piano_G2.wavProcessing jg_techno_sequence3.wav


Processing jpb_2_080DFL04.wavProcessing jg_prep_pianoE0_2.wavProcessing jg_twangs_1.wav


Processing jpb_2_100_Petty_Groove_1.wavProcessing jg_sax-bari-lick.wavProcessing jpb_2_01 Surdo.wav


Processing jpb_2_100_Petty_Groove_3.wavProcessing jg_sax-tenor-lick.wavProcessing jpb_2_03 Surdo.wav


Processing jpb_2_100_Petty_Var_1.wavProcessing jg_singing-female1-C-hi.wavProcessing jpb_2_05 Hi Hat.wav


Processing jpb_2_15.wavProcessing jg_tabla-lick.wavProcessing jpb_2_080DFL06.wav


Processing jpb_2_22.wavProcessing jg_timbale-lick.wavProcessing jpb_2_100_Petty_Groove_2.wav


Processing jpb_2_4-Down 4.wavProcessing jg_trpt-lick.wavProcessing jpb_2_100_Petty_Hihat_1.wav


Processing jpb_2_4.wavProcessing jg_vocoder1.wavProcessing jpb_2_100_Petty_Var_2.wav


Processing jpb_2_51.wavProcessing jpb_2_02 Shaker.wavProcessing jpb_2_100_Petty_Var_3.wav


Processing jpb_2_56.wavProcessing jpb_2_060DFL03.wavProcessing jpb_2_2-Tone 1.wav


Processing jpb_2_74.wavProcessing jpb_2_070DFL01.wavProcessing jpb_2_3.wav


Processing jpb_2_8.wavProcessing jpb_2_070DFL02.wavProcessing jpb_2_34.wav


Processing jpb_2_CEY LOOP 4-LR.wavProcessing jpb_2_10.wavProcessing jpb_2_5.wav


Processing jpb_2_Discodrum_160_loop07.wavProcessing jpb_2_100_Petty_Hihat_2.wavProcessing jpb_2_64.wav


Processing jpb_2_Drum Break.wavProcessing jpb_2_12.wavProcessing jpb_2_90.wav


Processing jpb_2_Hat Trick 2.wavProcessing jpb_2_2-Tone 3.wavProcessing jpb_2_CEY LOOP 3-LR.wav


Processing jpb_2_Jaillet17.wavProcessing jpb_2_4-Down 1.wavProcessing jpb_2_Discodrum_160_HH01.wav


Processing jpb_2_Jaillet27.wavProcessing jpb_2_58.wavProcessing jpb_2_Discodrum_160_HH06.wav


Processing jpb_2_Jaillet34.wavProcessing jpb_2_Banjo 19-03 A.wavProcessing jpb_2_Discodrum_160_loop29.wav


Processing jpb_2_Jaillet69.wavProcessing jpb_2_Beatie 130 bpm.wavProcessing jpb_2_Drum Break with ring mod.wav


Processing jpb_2_Jaillet74.wavProcessing jpb_2_Cuban Frenzy C.wavProcessing jpb_2_HH1.wav


Processing jpb_2_Java Gourd 01.wavProcessing jpb_2_Discodrum_160_HH04.wavProcessing jpb_2_Hat Trick 1.wav


Processing jpb_2_One Two C.wavProcessing jpb_2_Discodrum_160_loop03.wavProcessing jpb_2_Jaillet15.wav


Processing jpb_2_PianoDebussy.wavProcessing jpb_2_Discodrum_160_loop18.wavProcessing jpb_2_Jaillet21.wav


Processing jpb_2_Pig Drum 08.wavProcessing jpb_2_Discodrum_160_loop30.wavProcessing jpb_2_Jaillet29.wav


Processing jpb_2_Reggaedrum_080_loop05.wavProcessing jpb_2_Hat Trick 5.wavProcessing jpb_2_Jaillet64.wav


Processing jpb_2_Rim shot 01.wavProcessing jpb_2_Jaillet28.wavProcessing jpb_2_Jaillet66.wav


Processing jpb_2_Simple Break 170 bpm.wavProcessing jpb_2_Jaillet65.wavProcessing jpb_2_Jaillet71.wav


Processing jpb_2_Slow burner 03.wavProcessing jpb_2_Jaillet67.wavProcessing jpb_2_Old Swinger 1.wav


Processing jpb_2_T09-viola.wavProcessing jpb_2_Jaillet70.wavProcessing jpb_2_Pig Drum 01.wav


Processing jpb_2_T10-violoncello.wavProcessing jpb_2_Jaillet73.wavProcessing jpb_2_Reggaedrum_080_loop04.wav


Processing jpb_2_T27-Castanets.wavProcessing jpb_2_Jaillet75.wavProcessing jpb_2_Reggaedrum_080_loop09.wav


Processing jpb_2_T42-accordeon.wavProcessing jpb_2_Java Ket Jak 01.wavProcessing jpb_2_SG047_120_6_8_Groove_03.wav


In [33]:
onset_results.to_json('/home/bmcfee/git/librosa_parameters/onset_results.json', orient='records')


Processing jpb_2_T46-tenor.wavProcessing jpb_2_Old Swinger 3.wavProcessing jpb_2_Slow burner 05.wav


Processing jpb_2_Talking Drum 03.wavProcessing jpb_2_Reggaedrum_080_loop02.wavProcessing jpb_2_T08-violin.wav


Processing jpb_2_arab60s.wavProcessing jpb_2_Reggaedrum_080_loop10.wavProcessing jpb_2_T26-claves.wav


Processing jpb_2_fjf306.wavProcessing jpb_2_SG047_120_6_8_Groove_05.wavProcessing jpb_2_T37-vibraphone.wav


Processing jpb_2_fourkick7.wavProcessing jpb_2_T08-violin-arp.wavProcessing jpb_2_T41-celesta.wav


Processing jpb_2_jaxx.wavProcessing jpb_2_T11-doublebass.wavProcessing jpb_2_T45-alto.wav


Processing jpb_2_mambo01.wavProcessing jpb_2_T35-glockenspiel.wavProcessing jpb_2_T47-bass.wav


Processing jpb_2_mambo03.wavProcessing jpb_2_T44-soprano.wavProcessing jpb_2_Talking Drum 01.wav


Processing jpb_2_odd step11.wavProcessing jpb_2_T62-soprano-spiritual.wavProcessing jpb_2_Udu 01.wav


Processing jpb_2_queensBeat1_79bpm.wavProcessing jpb_2_cello1.wavProcessing jpb_2_Udu 04.wav


Processing jpb_2_saywot02.wavProcessing jpb_2_claw.wavProcessing jpb_2_badurim86bpm.wav


Processing jpb_2_shuffleLoop.wavProcessing jpb_2_dido.wavProcessing jpb_2_belling01.wav


Processing jpb_2_tabla.wavProcessing jpb_2_esn248.wavProcessing jpb_2_belling10.wav


Processing jpb_2_violin1.wavProcessing jpb_2_esn265.wavProcessing jpb_2_bluesLoop.wav


Processing jpb_2_violin6.wavProcessing jpb_2_fiona.wavProcessing jpb_2_cello2.wav


Processing jpb_Jaillet17.wavProcessing jpb_2_fourkick1.wavProcessing jpb_2_cello3.wav


Processing jpb_Jaillet27.wavProcessing jpb_2_hilo1.wavProcessing jpb_2_clever01.wav


Processing jpb_Jaillet29.wavProcessing jpb_2_kicker02.wavProcessing jpb_2_drmnbs06_140_s_16b.wav


Processing jpb_Jaillet65.wavProcessing jpb_2_metheny.wavProcessing jpb_2_drums1304.wav


Processing jpb_Jaillet70.wavProcessing jpb_2_saywot03.wavProcessing jpb_2_esn252.wav


Processing jpb_Jaillet74.wavProcessing jpb_2_skip03.wavProcessing jpb_2_esn288.wav


Processing jpb_Jaillet75.wavProcessing jpb_2_tumble2.wavProcessing jpb_2_fjf305.wav


Processing jpb_dido.wavProcessing jpb_2_violin.wavProcessing jpb_2_fourkick4.wav


Processing jpb_jaxx.wavProcessing jpb_2_wilco.wavProcessing jpb_2_hiphopLoop1_76bpm.wav


Processing jpb_tabla.wavProcessing jpb_Jaillet64.wavProcessing jpb_2_kicker03.wav


Processing jpb_wilco.wavProcessing jpb_Jaillet67.wavProcessing jpb_2_mozart.wav


Processing jpb_PianoDebussy.wavProcessing jpb_2_triplethat.wav

Processing jpb_2_verb1.wavProcessing jpb_fiona.wav

Processing jpb_2_verbsteady.wavProcessing jpb_metheny.wav

Processing jpb_2_violin2.wavProcessing jpb_violin.wav

Processing jpb_2_violin3.wav
Processing jpb_Jaillet15.wav
Processing jpb_Jaillet21.wav
Processing jpb_Jaillet34.wav
Processing jpb_Jaillet66.wav
Processing jpb_Jaillet73.wav
Processing jpb_arab60s.wav

In [34]:
onset_results = pd.read_json('/home/bmcfee/git/librosa_parameters/onset_results.json', orient='records')

In [35]:
onset_scores = onset_results.groupby(['aggregate', 'fmax', 'n_mels', 'delta']).mean()

In [36]:
onset_scores['F-measure'].argmax()


Out[36]:
(u'mean', 11025, 128, 0.070000000000000007)

In [37]:
best_f = onset_scores['F-measure'].argmax()

In [38]:
onset_scores.loc[best_f]


Out[38]:
F-measure      0.749
Precision      0.782
Recall         0.770
index        175.000
Name: (mean, 11025, 128, 0.07), dtype: float64

In [39]:
onset_scores


Out[39]:
F-measure Precision Recall index
aggregate fmax n_mels delta
mean 8000 32 0.00 0.526 0.447 0.833 175
0.01 0.641 0.598 0.818 175
0.02 0.681 0.661 0.798 175
0.03 0.702 0.700 0.781 175
0.04 0.709 0.723 0.761 175
0.05 0.711 0.740 0.741 175
0.06 0.709 0.752 0.722 175
0.07 0.706 0.762 0.704 175
0.08 0.699 0.773 0.683 175
0.09 0.689 0.778 0.662 175
0.10 0.685 0.788 0.649 175
64 0.00 0.527 0.444 0.847 175
0.01 0.647 0.598 0.835 175
0.02 0.692 0.667 0.821 175
0.03 0.716 0.708 0.805 175
0.04 0.726 0.734 0.788 175
0.05 0.732 0.754 0.775 175
0.06 0.732 0.765 0.758 175
0.07 0.731 0.779 0.742 175
0.08 0.727 0.787 0.725 175
0.09 0.724 0.796 0.712 175
0.10 0.719 0.806 0.695 175
128 0.00 0.526 0.441 0.854 175
0.01 0.645 0.591 0.844 175
0.02 0.691 0.661 0.832 175
0.03 0.717 0.701 0.820 175
0.04 0.732 0.730 0.808 175
0.05 0.739 0.751 0.795 175
0.06 0.741 0.765 0.781 175
0.07 0.748 0.785 0.768 175
0.08 0.746 0.794 0.753 175
0.09 0.743 0.804 0.738 175
0.10 0.739 0.814 0.724 175
11025 32 0.00 0.529 0.450 0.832 175
0.01 0.645 0.603 0.816 175
0.02 0.685 0.664 0.798 175
0.03 0.704 0.702 0.778 175
0.04 0.709 0.722 0.760 175
0.05 0.712 0.739 0.740 175
0.06 0.708 0.749 0.721 175
0.07 0.703 0.756 0.702 175
0.08 0.697 0.764 0.684 175
0.09 0.693 0.772 0.669 175
0.10 0.687 0.778 0.654 175
64 0.00 0.530 0.447 0.848 175
0.01 0.650 0.603 0.835 175
0.02 0.696 0.672 0.822 175
0.03 0.719 0.709 0.808 175
0.04 0.726 0.731 0.790 175
0.05 0.732 0.748 0.776 175
0.06 0.732 0.762 0.759 175
0.07 0.730 0.772 0.741 175
0.08 0.727 0.782 0.726 175
0.09 0.722 0.790 0.710 175
0.10 0.717 0.798 0.695 175
128 0.00 0.529 0.445 0.856 175
0.01 0.650 0.598 0.845 175
0.02 0.697 0.667 0.836 175
0.03 0.718 0.701 0.822 175
0.04 0.732 0.728 0.809 175
0.05 0.741 0.751 0.796 175
0.06 0.746 0.767 0.785 175
0.07 0.749 0.782 0.770 175
0.08 0.748 0.792 0.755 175
0.09 0.744 0.802 0.740 175
0.10 0.739 0.810 0.725 175
median 8000 32 0.00 0.617 0.599 0.747 175
0.01 0.650 0.653 0.727 175
0.02 0.662 0.680 0.711 175
0.03 0.664 0.696 0.691 175
0.04 0.660 0.705 0.672 175
0.05 0.657 0.716 0.655 175
0.06 0.653 0.724 0.639 175
0.07 0.646 0.728 0.623 175
0.08 0.640 0.737 0.606 175
0.09 0.635 0.745 0.592 175
0.10 0.626 0.747 0.579 175
64 0.00 0.649 0.635 0.770 175
0.01 0.675 0.679 0.754 175
0.02 0.685 0.702 0.737 175
0.03 0.688 0.717 0.721 175
0.04 0.690 0.731 0.703 175
0.05 0.685 0.740 0.684 175
0.06 0.681 0.750 0.669 175
0.07 0.677 0.758 0.656 175
0.08 0.670 0.761 0.639 175
0.09 0.663 0.767 0.625 175
0.10 0.654 0.769 0.609 175
128 0.00 0.673 0.660 0.791 175
0.01 0.695 0.698 0.775 175
0.02 0.702 0.717 0.759 175
0.03 0.710 0.734 0.747 175
0.04 0.712 0.750 0.732 175
0.05 0.714 0.764 0.718 175
0.06 0.711 0.772 0.703 175
0.07 0.704 0.777 0.687 175
0.08 0.698 0.781 0.673 175
0.09 0.693 0.788 0.659 175
0.10 0.686 0.791 0.645 175
11025 32 0.00 0.623 0.608 0.746 175
0.01 0.653 0.659 0.727 175
0.02 0.660 0.680 0.706 175
0.03 0.663 0.694 0.688 175
0.04 0.664 0.708 0.672 175
0.05 0.661 0.717 0.654 175
0.06 0.653 0.721 0.637 175
0.07 0.646 0.729 0.620 175
0.08 0.642 0.734 0.608 175
0.09 0.633 0.738 0.592 175
0.10 0.629 0.745 0.579 175
64 0.00 0.649 0.642 0.756 175
0.01 0.671 0.679 0.739 175
0.02 0.676 0.696 0.723 175
0.03 0.682 0.714 0.707 175
0.04 0.683 0.727 0.692 175
0.05 0.677 0.735 0.673 175
0.06 0.675 0.745 0.659 175
0.07 0.669 0.750 0.646 175
0.08 0.663 0.754 0.630 175
0.09 0.654 0.759 0.613 175
0.10 0.648 0.763 0.601 175
128 0.00 0.673 0.670 0.770 175
0.01 0.691 0.700 0.756 175
0.02 0.698 0.720 0.741 175
0.03 0.702 0.736 0.725 175
0.04 0.703 0.748 0.710 175
0.05 0.702 0.760 0.695 175
0.06 0.696 0.766 0.679 175
0.07 0.690 0.771 0.665 175
0.08 0.685 0.777 0.653 175
0.09 0.680 0.781 0.642 175
0.10 0.675 0.786 0.629 175

In [62]:
# Previous configuration
onset_scores.loc[(u'mean', 11025, 128, 0.05)]


Out[62]:
F-measure      0.741
Precision      0.751
Recall         0.796
index        175.000
Name: (mean, 11025, 128, 0.05), dtype: float64

In [64]:
best_f


Out[64]:
(u'mean', 11025, 128, 0.070000000000000007)

In [69]:
onset_scores.loc[(u'mean', 8000, 128, 0.07)]


Out[69]:
F-measure      0.748
Precision      0.785
Recall         0.768
index        175.000
Name: (mean, 8000, 128, 0.07), dtype: float64