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 |