activeLearningWlinGP1vs2.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #! /usr/bin/python
  2. import numpy
  3. import pickle
  4. import sys
  5. import os
  6. sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),os.pardir))
  7. import helperFunctions
  8. import activeLearningWlinGPprototype
  9. class Classifier(activeLearningWlinGPprototype.ClassifierPrototype):
  10. def __init__(self,
  11. sigmaN = 0.00178,
  12. useDiversity = False,
  13. useDensity = False,
  14. useVariance = False,
  15. loNoise = True,
  16. configFile=None):
  17. activeLearningWlinGPprototype.ClassifierPrototype.__init__(self, sigmaN=sigmaN, configFile=configFile)
  18. self.useDiversity = helperFunctions.getConfig(configFile, 'activeLearning', 'useDiversity', useDiversity, 'bool', True)
  19. self.useVariance = helperFunctions.getConfig(configFile, 'activeLearning', 'useVariance', useVariance, 'bool', True)
  20. self.useDensity = helperFunctions.getConfig(configFile, 'activeLearning', 'useDensity', useDensity, 'bool', True)
  21. self.loNoise = helperFunctions.getConfig(configFile, 'activeLearning', 'loNoise', loNoise, 'bool', True)
  22. def getDensity(self, sim):
  23. return numpy.sum(sim, axis=1) / float(sim.shape[1])
  24. def getDiversity(self, sim):
  25. return 1.0 / numpy.max(sim, axis=1)
  26. # x.shape = (feat dim, number of samples)
  27. def calcAlScores(self, x):
  28. loNoise = (self.yUni == -1).any() and self.loNoise
  29. sortedScores = numpy.sort(self.infer(x, loNoise), axis=1)
  30. alScores = numpy.absolute(sortedScores[:,-1] - sortedScores[:,-2])*(-1.0)
  31. sim = None
  32. if self.useDensity:
  33. sim = numpy.dot(x, numpy.append(self.X, x, axis=0).T)
  34. density = self.getDensity(sim)
  35. alScores = numpy.multiply(alScores, density)
  36. elif self.useDiversity:
  37. if sim is None:
  38. sim = numpy.dot(x, self.X.T)
  39. diversity = self.getDiversity(sim)
  40. else:
  41. diversity = self.getDiversity(sim[:,:self.X.shape[0]])
  42. alScores = numpy.multiply(alScores, diversity)
  43. elif self.useVariance:
  44. variance = self.calcSigmaF(x)
  45. alScores = numpy.multiply(alScores, variance)
  46. return alScores