peterf@2: # peterf@2: # exper002.py: peterf@2: # Wrapper function for GMM model estimation peterf@2: # peterf@2: # Author: Peter Foster peterf@2: # (c) 2015 Peter Foster peterf@2: # peterf@2: peterf@2: from pylab import * peterf@2: from gmm import GMM_methods peterf@2: import pdb peterf@2: peterf@2: peterf@2: def exper002_multilabelclassification(Dataset, ConsideredLabels, CrossVal, Settings, numComponentValues=(1,), featureTypeValues=('librosa_mfccs',)): peterf@2: np.random.seed(10553) peterf@2: peterf@2: EXPER = {} peterf@2: for numComponents in numComponentValues: peterf@2: for featureType in featureTypeValues: peterf@2: parameterTuple = (numComponents,featureType) peterf@2: print('Estimating models for numComponents=' + str(numComponents) + 'featureType=' + str(featureType)) peterf@2: EXPER[parameterTuple] = {} peterf@2: #For each track and for each label store presence and absence scores peterf@2: EXPER[parameterTuple]['scores'] = {i:{} for i in range(len(Dataset))} peterf@2: peterf@2: #Iterate through folds peterf@2: for trainI, testI in CrossVal: peterf@2: Data = {} peterf@2: Data['trainingData'] = [np.copy(Dataset.ix[i]['features'][featureType]) for i in trainI] peterf@2: NFeaturesPerFile = [features.shape[0] for features in Data['trainingData']] peterf@2: Data['trainingData'] = np.vstack(Data['trainingData']) peterf@2: Data['testDataPerFile'] = [np.copy(Dataset.ix[i]['features'][featureType]) for i in testI] peterf@2: peterf@2: for label in ConsideredLabels: peterf@2: Data['trainingTargets'] = [Dataset.ix[i][label] for i in trainI] peterf@2: #Duplicate labels according to number of feature vectors in each file peterf@2: Data['trainingTargets'] = [[target]*N for (target,N) in zip(Data['trainingTargets'], NFeaturesPerFile)] peterf@2: #Convert data to one large vector / matrix (for GMM code) peterf@2: Data['trainingTargets'] = np.append([], Data['trainingTargets']) peterf@2: peterf@2: Result = GMM_methods.GMMTrainAndTest(Data,numComponents=numComponents) peterf@2: peterf@2: for k in Result['fileScores'].keys(): peterf@2: assert(np.all(np.isfinite(Result['fileScores'][k]))) peterf@2: peterf@2: #Assign scores to output data structure peterf@2: for i,j in zip(testI, range(len(testI))): peterf@2: EXPER[parameterTuple]['scores'][i][label] = {True:Result['fileScores'][True][j], False:Result['fileScores'][False][j]} peterf@2: return EXPER