aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/demo_feast_wrapper.py4
-rw-r--r--python/feast.py198
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