Commit e85eb10b authored by Guillaume HEUSCH's avatar Guillaume HEUSCH
Browse files

[algorithm] added my simple implementation of One Class SVM

parent c9b2ecc3
Pipeline #17791 failed with stage
in 19 minutes and 6 seconds
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
import numpy
from bob.pad.base.algorithm import Algorithm
import bob.learn.libsvm
import bob.io.base
class OCSVM(Algorithm):
"""
This class interfaces a One Class SVM classifier used for PAD
"""
def __init__(self, rescale=True, nu=0.01, gamma=0.1, **kwargs):
Algorithm.__init__(self,
performs_projection=True,
requires_projector_training=True,
**kwargs)
self.rescale = rescale
self.nu = nu
self.gamma = gamma
self.machine = None
self.trainer = bob.learn.libsvm.Trainer(machine_type='ONE_CLASS', kernel_type='RBF', probability=True)
def train_projector(self, training_features, projector_file):
"""
Trains the One Class SVM
**Parameters**
training_features:
"""
# training_features[0] - training features for the REAL class.
# training_features[1] - training features for the ATTACK class.
# The data - "positive class only"
pos = numpy.array(training_features[0])
if self.rescale:
for i in range(pos.shape[0]):
min_value = numpy.min(pos[i])
max_value = numpy.max(pos[i])
pos[i] = ((2 * (pos[i] - min_value))/ (max_value - min_value)) - 1
pos = [pos]
# train
self.machine = self.trainer.train(pos)
print(self.machine.shape)
f = bob.io.base.HDF5File(projector_file, 'w')
self.machine.save(f)
def project(self, feature):
"""
Project the given feature
"""
if self.rescale:
min_value = numpy.min(feature)
max_value = numpy.max(feature)
feature = ((2 * (feature - min_value))/ (max_value - min_value)) - 1
return self.machine(feature)
def score(self, toscore):
return [toscore[0]]
......@@ -5,6 +5,7 @@ from .LogRegr import LogRegr
from .SVMCascadePCA import SVMCascadePCA
from .MLP import MLP
from .PadLDA import PadLDA
from .OCSVM import OCSVM
def __appropriate__(*args):
"""Says object was actually declared here, and not in the import module.
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment