annotate gmm_baseline_experiments/exper002.py @ 5:b523456082ca tip

Update path to dataset and reflect modified chunk naming convention.
author peterf
date Mon, 01 Feb 2016 21:35:27 +0000
parents cb535b80218a
children
rev   line source
peterf@2 1 #
peterf@2 2 # exper002.py:
peterf@2 3 # Wrapper function for GMM model estimation
peterf@2 4 #
peterf@2 5 # Author: Peter Foster
peterf@2 6 # (c) 2015 Peter Foster
peterf@2 7 #
peterf@2 8
peterf@2 9 from pylab import *
peterf@2 10 from gmm import GMM_methods
peterf@2 11 import pdb
peterf@2 12
peterf@2 13
peterf@2 14 def exper002_multilabelclassification(Dataset, ConsideredLabels, CrossVal, Settings, numComponentValues=(1,), featureTypeValues=('librosa_mfccs',)):
peterf@2 15 np.random.seed(10553)
peterf@2 16
peterf@2 17 EXPER = {}
peterf@2 18 for numComponents in numComponentValues:
peterf@2 19 for featureType in featureTypeValues:
peterf@2 20 parameterTuple = (numComponents,featureType)
peterf@2 21 print('Estimating models for numComponents=' + str(numComponents) + 'featureType=' + str(featureType))
peterf@2 22 EXPER[parameterTuple] = {}
peterf@2 23 #For each track and for each label store presence and absence scores
peterf@2 24 EXPER[parameterTuple]['scores'] = {i:{} for i in range(len(Dataset))}
peterf@2 25
peterf@2 26 #Iterate through folds
peterf@2 27 for trainI, testI in CrossVal:
peterf@2 28 Data = {}
peterf@2 29 Data['trainingData'] = [np.copy(Dataset.ix[i]['features'][featureType]) for i in trainI]
peterf@2 30 NFeaturesPerFile = [features.shape[0] for features in Data['trainingData']]
peterf@2 31 Data['trainingData'] = np.vstack(Data['trainingData'])
peterf@2 32 Data['testDataPerFile'] = [np.copy(Dataset.ix[i]['features'][featureType]) for i in testI]
peterf@2 33
peterf@2 34 for label in ConsideredLabels:
peterf@2 35 Data['trainingTargets'] = [Dataset.ix[i][label] for i in trainI]
peterf@2 36 #Duplicate labels according to number of feature vectors in each file
peterf@2 37 Data['trainingTargets'] = [[target]*N for (target,N) in zip(Data['trainingTargets'], NFeaturesPerFile)]
peterf@2 38 #Convert data to one large vector / matrix (for GMM code)
peterf@2 39 Data['trainingTargets'] = np.append([], Data['trainingTargets'])
peterf@2 40
peterf@2 41 Result = GMM_methods.GMMTrainAndTest(Data,numComponents=numComponents)
peterf@2 42
peterf@2 43 for k in Result['fileScores'].keys():
peterf@2 44 assert(np.all(np.isfinite(Result['fileScores'][k])))
peterf@2 45
peterf@2 46 #Assign scores to output data structure
peterf@2 47 for i,j in zip(testI, range(len(testI))):
peterf@2 48 EXPER[parameterTuple]['scores'][i][label] = {True:Result['fileScores'][True][j], False:Result['fileScores'][False][j]}
peterf@2 49 return EXPER