Browse Source

add svm gpu usage

Jérôme BUISINE 2 months ago
parent
commit
e567b11e90
3 changed files with 37 additions and 3 deletions
  1. 1 1
      custom_config.py
  2. 1 1
      data_attributes.py
  3. 35 1
      models.py

+ 1 - 1
custom_config.py

@@ -27,7 +27,7 @@ optimization_filters_result_filename    = 'optimization_comparisons_filters.csv'
 optimization_attributes_result_filename = 'optimization_comparisons_attributes.csv'
 
 filter_reduction_choices                = ['attributes', 'filters']
-models_names_list                       = ["svm_model","ensemble_model","ensemble_model_v2","deep_keras"]
+models_names_list                       = ["svm_model","ensemble_model","ensemble_model_v2","deep_keras", "svm_gpu"]
 
 ## models_names_list               = ["svm_model","ensemble_model","ensemble_model_v2","deep_keras"]
 ## normalization_choices           = ['svd', 'svdn', 'svdne']

+ 1 - 1
data_attributes.py

@@ -124,7 +124,7 @@ def w2d(arr, mode='haar', level=1):
     imArray = arr
 
     sigma = restoration.estimate_sigma(imArray, average_sigmas=True, multichannel=False)
-    imArray_H = restoration.denoise_wavelet(imArray, sigma=sigma, wavelet='db1', mode='soft', 
+    imArray_H = restoration.denoise_wavelet(imArray, sigma=sigma, wavelet='db1', mode='hard', 
         wavelet_levels=2, 
         multichannel=False, 
         convert2ycbcr=False, 

+ 35 - 1
models.py

@@ -6,7 +6,18 @@ from sklearn.neighbors import KNeighborsClassifier
 from sklearn.ensemble import GradientBoostingClassifier
 from sklearn.feature_selection import RFECV
 import sklearn.svm as svm
+from sklearn.metrics.scorer import accuracy_scorer
+from thundersvm import SVC
 
+# variables and parameters
+n_predict = 0
+
+def my_accuracy_scorer(*args):
+        global n_predict
+        score = accuracy_scorer(*args)
+        print('{0} - Score is {1}'.format(n_predict, score))
+        n_predict += 1
+        return score
 
 def _get_best_model(X_train, y_train):
 
@@ -17,7 +28,7 @@ def _get_best_model(X_train, y_train):
     param_grid = {'kernel':['rbf'], 'C': Cs, 'gamma' : gammas}
 
     svc = svm.SVC(probability=True)
-    clf = GridSearchCV(svc, param_grid, cv=5, scoring='accuracy', verbose=2)
+    clf = GridSearchCV(svc, param_grid, cv=10, verbose=1, scoring=my_accuracy_scorer)
 
     clf.fit(X_train, y_train)
 
@@ -30,6 +41,26 @@ def svm_model(X_train, y_train):
     return _get_best_model(X_train, y_train)
 
 
+def _get_best_gpu_model(X_train, y_train):
+
+    Cs = [0.001, 0.01, 0.1, 1, 2, 5, 10, 100, 1000]
+    gammas = [0.001, 0.01, 0.1, 1, 2, 5, 10, 100]
+    param_grid = {'kernel':['rbf'], 'C': Cs, 'gamma' : gammas}
+
+    svc = SVC(probability=True)
+    clf = GridSearchCV(svc, param_grid, cv=10, verbose=1, scoring=my_accuracy_scorer)
+
+    clf.fit(X_train, y_train)
+
+    model = clf.best_estimator_
+
+    return model
+
+def svm_gpu(X_train, y_train):
+
+    return _get_best_gpu_model(X_train, y_train)
+
+
 def ensemble_model(X_train, y_train):
 
     svm_model = _get_best_model(X_train, y_train)
@@ -72,6 +103,9 @@ def get_trained_model(choice, X_train, y_train):
     if choice == 'svm_model':
         return svm_model(X_train, y_train)
 
+    if choice == 'svm_gpu':
+        return svm_gpu(X_train, y_train)
+
     if choice == 'ensemble_model':
         return ensemble_model(X_train, y_train)