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 /python/feast.py | |
parent | cc8970858d15f4596f3f0726d92b494b1e34bd42 (diff) |
added all FS functions
Diffstat (limited to 'python/feast.py')
-rw-r--r-- | python/feast.py | 198 |
1 files changed, 189 insertions, 9 deletions
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 |