diff options
author | Calvin <calvin@EESI> | 2013-03-25 16:19:06 -0400 |
---|---|---|
committer | Calvin <calvin@EESI> | 2013-03-25 16:19:06 -0400 |
commit | 0a0fadb1281df594452ac239d5d8362a9e0c5e66 (patch) | |
tree | ee7a3230e1173b2f47b9760d51025f28887b0803 | |
parent | cc8970858d15f4596f3f0726d92b494b1e34bd42 (diff) |
added all FS functions
-rw-r--r-- | python/demo_feast_wrapper.py | 4 | ||||
-rw-r--r-- | python/feast.py | 198 |
2 files changed, 192 insertions, 10 deletions
diff --git a/python/demo_feast_wrapper.py b/python/demo_feast_wrapper.py index 4c965e3..813c2f5 100644 --- a/python/demo_feast_wrapper.py +++ b/python/demo_feast_wrapper.py @@ -14,6 +14,7 @@ if data_source == 'uniform': elif data_source == 'digits': data, labels = import_data.read_digits('digit.txt') +print data n_observations = len(data) # number of samples in the data set @@ -28,5 +29,6 @@ print ' :n_features - ' + str(n_features) print ' :n_select - ' + str(n_select) print ' :algorithm - ' + str(method) -selected_features = feast.select(data, labels, n_observations, n_features, n_select, method) +selected_features = feast.JMI(data, labels, n_select) +print selected_features diff --git a/python/feast.py b/python/feast.py index 9955650..c30c405 100644 --- a/python/feast.py +++ b/python/feast.py @@ -1,24 +1,170 @@ import numpy as np from ctypes import * -def select(data, labels, n_observations, n_features, n_select, method): +try: + libFSToolbox = CDLL("libFSToolbox.so"); +except: + print "Error: could not find libFSToolbox" + exit() + + + +def BetaGamma(data, labels, n_select, beta=2.0, gamma=2.0): + + # python values + n_observations, n_features = data.shape + output = np.zeros(n_select) + + # cast as C types + c_n_observations = c_int(n_observations) + c_n_select = c_int(n_select) + c_n_features = c_int(n_features) + c_beta = c_double(beta) + c_gamma = c_double(gamma) + + libFSToolbox.BetaGamma.restype = POINTER(c_double * n_select) + features = libFSToolbox.BetaGamma(c_n_select, + c_n_observations, + c_n_features, + data.ctypes.data_as(POINTER(c_double)), + labels.ctypes.data_as(POINTER(c_double)), + output.ctypes.data_as(POINTER(c_double)), + c_beta, + c_gamma + ) + + # turn our output into a list + selected_features = [] + for i in features.contents: + selected_features.append(i - 1) + + return selected_features + +def JMI(data, labels, n_select): + + # python values + n_observations, n_features = data.shape + output = np.zeros(n_select) + + # cast as C types + c_n_observations = c_int(n_observations) + c_n_select = c_int(n_select) + c_n_features = c_int(n_features) + + libFSToolbox.JMI.restype = POINTER(c_double * n_select) + features = libFSToolbox.JMI(c_n_select, + c_n_observations, + c_n_features, + data.ctypes.data_as(POINTER(c_double)), + labels.ctypes.data_as(POINTER(c_double)), + output.ctypes.data_as(POINTER(c_double)) + ) + + + # turn our output into a list + selected_features = [] + for i in features.contents: + selected_features.append(i - 1) + + return selected_features + +def mRMR_D(data, labels, n_select): + + # python values + n_observations, n_features = data.shape + output = np.zeros(n_select) + + # cast as C types + c_n_observations = c_int(n_observations) + c_n_select = c_int(n_select) + c_n_features = c_int(n_features) + + libFSToolbox.mRMR_D.restype = POINTER(c_double * n_select) + features = libFSToolbox.mRMR_D(c_n_select, + c_n_observations, + c_n_features, + data.ctypes.data_as(POINTER(c_double)), + labels.ctypes.data_as(POINTER(c_double)), + output.ctypes.data_as(POINTER(c_double)) + ) + + + # turn our output into a list + selected_features = [] + for i in features.contents: + selected_features.append(i - 1) + + return selected_features + +def CMIM(data, labels, n_select): + + # python values + n_observations, n_features = data.shape + output = np.zeros(n_select) + + # cast as C types + c_n_observations = c_int(n_observations) + c_n_select = c_int(n_select) + c_n_features = c_int(n_features) + + libFSToolbox.CMIM.restype = POINTER(c_double * n_select) + features = libFSToolbox.CMIM(c_n_select, + c_n_observations, + c_n_features, + data.ctypes.data_as(POINTER(c_double)), + labels.ctypes.data_as(POINTER(c_double)), + output.ctypes.data_as(POINTER(c_double)) + ) + + + # turn our output into a list + selected_features = [] + for i in features.contents: + selected_features.append(i - 1) + + return selected_features + +def DISR(data, labels, n_select): + + # python values + n_observations, n_features = data.shape + output = np.zeros(n_select) + + # cast as C types + c_n_observations = c_int(n_observations) + c_n_select = c_int(n_select) + c_n_features = c_int(n_features) + + libFSToolbox.DISR.restype = POINTER(c_double * n_select) + features = libFSToolbox.DISR(c_n_select, + c_n_observations, + c_n_features, + data.ctypes.data_as(POINTER(c_double)), + labels.ctypes.data_as(POINTER(c_double)), + output.ctypes.data_as(POINTER(c_double)) + ) + + # turn our output into a list selected_features = [] + for i in features.contents: + selected_features.append(i - 1) - try: - libFSToolbox = CDLL("libFSToolbox.so"); - except: - print "Error: could not find libFSToolbox" - exit() + return selected_features + +def ICAP(data, labels, n_select): -# JMI(n_features_to_ret, int n_samples, int n_feats, double *featureMatrix, double *classcol, outputFeatures); + # python values + n_observations, n_features = data.shape output = np.zeros(n_select) + + # cast as C types c_n_observations = c_int(n_observations) c_n_select = c_int(n_select) c_n_features = c_int(n_features) - # right now just call only JMI, work out the rest later - libFSToolbox.JMI(c_n_select, + libFSToolbox.ICAP.restype = POINTER(c_double * n_select) + features = libFSToolbox.ICAP(c_n_select, c_n_observations, c_n_features, data.ctypes.data_as(POINTER(c_double)), @@ -26,4 +172,38 @@ def select(data, labels, n_observations, n_features, n_select, method): output.ctypes.data_as(POINTER(c_double)) ) + + # turn our output into a list + selected_features = [] + for i in features.contents: + selected_features.append(i - 1) + + return selected_features + +def CondMI(data, labels, n_select): + + # python values + n_observations, n_features = data.shape + output = np.zeros(n_select) + + # cast as C types + c_n_observations = c_int(n_observations) + c_n_select = c_int(n_select) + c_n_features = c_int(n_features) + + libFSToolbox.CondMI.restype = POINTER(c_double * n_select) + features = libFSToolbox.CondMI(c_n_select, + c_n_observations, + c_n_features, + data.ctypes.data_as(POINTER(c_double)), + labels.ctypes.data_as(POINTER(c_double)), + output.ctypes.data_as(POINTER(c_double)) + ) + + + # turn our output into a list + selected_features = [] + for i in features.contents: + selected_features.append(i - 1) + return selected_features |