pyACA: Documentation 0.3.1
Source Code for Audio Content Analysis
Loading...
Searching...
No Matches
Functions
pyACA.ToolSeqFeatureSel Namespace Reference

Functions

 ToolSeqFeatureSel (V, ClassIdx, iNumFeatures2Select=-1)
 helper function: sequential forward feature selection
 

Function Documentation

◆ ToolSeqFeatureSel()

ToolSeqFeatureSel ( V,
ClassIdx,
iNumFeatures2Select = -1 )

helper function: sequential forward feature selection

Parameters
Vfeature matrix with all observations (dimension iNumFeatures x iNumObservations)
ClassIdxclass labels (length: iNumObservations)
iNumFeatures2Selecttarget number of features (default: all)
Returns
selFeatureIdx: vector with ordered feature indices (length: iNumFeatures2Select)
AccPerSubset: accuracy for each subset

Definition at line 16 of file ToolSeqFeatureSel.py.

16def ToolSeqFeatureSel(V, ClassIdx, iNumFeatures2Select=-1):
17
18 iNumFeatures = V.shape[0]
19 if iNumFeatures2Select <= 0 or iNumFeatures2Select > iNumFeatures:
20 iNumFeatures2Select = iNumFeatures
21
22 # initialize
23 selFeatureIdx = -1 * np.ones(iNumFeatures2Select).astype(int)
24 unselFeatures = np.ones(iNumFeatures).astype(bool)
25 AccPerSubset = np.zeros(iNumFeatures2Select)
26 accTmp = np.zeros(iNumFeatures)
27
28 # find single best feature
29 for f in range(iNumFeatures):
30 # get accuracy of selected features plus current feature f
31 accTmp[f], fold_accuracies, conf_mat = ToolLooCrossVal(V[f, :][None, :], ClassIdx)
32 selFeatureIdx[0] = np.argmax(accTmp, axis=0).astype(int)
33 unselFeatures[selFeatureIdx[0]] = False
34 AccPerSubset[0] = accTmp[selFeatureIdx[0]]
35
36 # iterate until target number of features is reached
37 for i in np.arange(1, iNumFeatures2Select):
38 # iterate over all features not yet selected
39 for f in range(iNumFeatures):
40 if unselFeatures[f]:
41 # get accuracy of selected features plus current feature f
42 subset = np.zeros(i+1).astype(int)
43 subset[:i] = selFeatureIdx[:i].astype(int)
44 subset[i] = int(f)
45 accTmp[f], fold_accuracies, conf_mat = ToolLooCrossVal(V[subset, :], ClassIdx)
46 else:
47 accTmp[f] = -1
48 continue
49
50 # identify feature maximizing the accuracy
51 # move feature from unselected to selected
52 selFeatureIdx[i] = np.argmax(accTmp, axis=0).astype(int)
53 unselFeatures[selFeatureIdx[i]] = False
54 AccPerSubset[i] = accTmp[selFeatureIdx[i]]
55
56 return selFeatureIdx, AccPerSubset