From 0a0fadb1281df594452ac239d5d8362a9e0c5e66 Mon Sep 17 00:00:00 2001 From: Calvin Date: Mon, 25 Mar 2013 16:19:06 -0400 Subject: added all FS functions --- python/demo_feast_wrapper.py | 4 +- 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 -- cgit v1.2.3