mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-15 06:52:39 +02:00
Merge pull request #558 from SheffieldML/devel
Uniform prior fix for other domains
This commit is contained in:
commit
db88e1142b
7 changed files with 72 additions and 7 deletions
26
CHANGELOG.md
26
CHANGELOG.md
|
|
@ -1,5 +1,31 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.8.3 (2017-10-02)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
* Uniform prior instantiation. [mzwiessele]
|
||||||
|
|
||||||
|
* Use paramz 0.8.5. [mzwiessele]
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
* Bump version: 1.8.2 → 1.8.3. [mzwiessele]
|
||||||
|
|
||||||
|
|
||||||
|
## v1.8.2 (2017-10-02)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
* Uniform prior tests. [mzwiessele]
|
||||||
|
|
||||||
|
* Uniform prior can be positive and negative, depending on lower and upper bound. [mzwiessele]
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
* Bump version: 1.8.1 → 1.8.2. [mzwiessele]
|
||||||
|
|
||||||
|
|
||||||
## v1.8.1 (2017-10-02)
|
## v1.8.1 (2017-10-02)
|
||||||
|
|
||||||
### Fix
|
### Fix
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
__version__ = "1.8.1"
|
__version__ = "1.8.3"
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.special import gammaln, digamma
|
from scipy.special import gammaln, digamma
|
||||||
from ...util.linalg import pdinv
|
from ...util.linalg import pdinv
|
||||||
from paramz.domains import _REAL, _POSITIVE
|
from paramz.domains import _REAL, _POSITIVE, _NEGATIVE
|
||||||
import warnings
|
import warnings
|
||||||
import weakref
|
import weakref
|
||||||
|
|
||||||
|
|
@ -92,7 +92,6 @@ class Gaussian(Prior):
|
||||||
# self.constant = -0.5 * np.log(2 * np.pi * self.sigma2)
|
# self.constant = -0.5 * np.log(2 * np.pi * self.sigma2)
|
||||||
|
|
||||||
class Uniform(Prior):
|
class Uniform(Prior):
|
||||||
domain = _REAL
|
|
||||||
_instances = []
|
_instances = []
|
||||||
|
|
||||||
def __new__(cls, lower=0, upper=1): # Singleton:
|
def __new__(cls, lower=0, upper=1): # Singleton:
|
||||||
|
|
@ -101,13 +100,24 @@ class Uniform(Prior):
|
||||||
for instance in cls._instances:
|
for instance in cls._instances:
|
||||||
if instance().lower == lower and instance().upper == upper:
|
if instance().lower == lower and instance().upper == upper:
|
||||||
return instance()
|
return instance()
|
||||||
o = super(Prior, cls).__new__(cls, lower, upper)
|
newfunc = super(Prior, cls).__new__
|
||||||
|
if newfunc is object.__new__:
|
||||||
|
o = newfunc(cls)
|
||||||
|
else:
|
||||||
|
o = newfunc(cls, lower, upper)
|
||||||
cls._instances.append(weakref.ref(o))
|
cls._instances.append(weakref.ref(o))
|
||||||
return cls._instances[-1]()
|
return cls._instances[-1]()
|
||||||
|
|
||||||
def __init__(self, lower, upper):
|
def __init__(self, lower, upper):
|
||||||
self.lower = float(lower)
|
self.lower = float(lower)
|
||||||
self.upper = float(upper)
|
self.upper = float(upper)
|
||||||
|
assert self.lower < self.upper, "Lower needs to be strictly smaller than upper."
|
||||||
|
if self.lower >= 0:
|
||||||
|
self.domain = _POSITIVE
|
||||||
|
elif self.upper <= 0:
|
||||||
|
self.domain = _NEGATIVE
|
||||||
|
else:
|
||||||
|
self.domain = _REAL
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "[{:.2g}, {:.2g}]".format(self.lower, self.upper)
|
return "[{:.2g}, {:.2g}]".format(self.lower, self.upper)
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,35 @@ class PriorTests(unittest.TestCase):
|
||||||
# should raise an assertionerror.
|
# should raise an assertionerror.
|
||||||
self.assertRaises(AssertionError, m.rbf.set_prior, gaussian)
|
self.assertRaises(AssertionError, m.rbf.set_prior, gaussian)
|
||||||
|
|
||||||
|
def test_uniform(self):
|
||||||
|
xmin, xmax = 1, 2.5*np.pi
|
||||||
|
b, C, SNR = 1, 0, 0.1
|
||||||
|
X = np.linspace(xmin, xmax, 500)
|
||||||
|
y = b*X + C + 1*np.sin(X)
|
||||||
|
y += 0.05*np.random.randn(len(X))
|
||||||
|
X, y = X[:, None], y[:, None]
|
||||||
|
m = GPy.models.SparseGPRegression(X, y)
|
||||||
|
uniform = GPy.priors.Uniform(0, 2)
|
||||||
|
m.rbf.set_prior(uniform)
|
||||||
|
m.randomize()
|
||||||
|
self.assertTrue(m.checkgrad())
|
||||||
|
|
||||||
|
m.Z.set_prior(uniform)
|
||||||
|
m.randomize()
|
||||||
|
self.assertTrue(m.checkgrad())
|
||||||
|
|
||||||
|
m.Z.unconstrain()
|
||||||
|
uniform = GPy.priors.Uniform(-1, 10)
|
||||||
|
m.Z.set_prior(uniform)
|
||||||
|
m.randomize()
|
||||||
|
self.assertTrue(m.checkgrad())
|
||||||
|
|
||||||
|
m.Z.constrain_negative()
|
||||||
|
uniform = GPy.priors.Uniform(-1, 0)
|
||||||
|
m.Z.set_prior(uniform)
|
||||||
|
m.randomize()
|
||||||
|
self.assertTrue(m.checkgrad())
|
||||||
|
|
||||||
def test_set_gaussian_for_reals(self):
|
def test_set_gaussian_for_reals(self):
|
||||||
xmin, xmax = 1, 2.5*np.pi
|
xmin, xmax = 1, 2.5*np.pi
|
||||||
b, C, SNR = 1, 0, 0.1
|
b, C, SNR = 1, 0, 0.1
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ environment:
|
||||||
secure: 8/ZjXFwtd1S7ixd7PJOpptupKKEDhm2da/q3unabJ00=
|
secure: 8/ZjXFwtd1S7ixd7PJOpptupKKEDhm2da/q3unabJ00=
|
||||||
COVERALLS_REPO_TOKEN:
|
COVERALLS_REPO_TOKEN:
|
||||||
secure: d3Luic/ESkGaWnZrvWZTKrzO+xaVwJWaRCEP0F+K/9DQGPSRZsJ/Du5g3s4XF+tS
|
secure: d3Luic/ESkGaWnZrvWZTKrzO+xaVwJWaRCEP0F+K/9DQGPSRZsJ/Du5g3s4XF+tS
|
||||||
gpy_version: 1.8.1
|
gpy_version: 1.8.3
|
||||||
matrix:
|
matrix:
|
||||||
- PYTHON_VERSION: 2.7
|
- PYTHON_VERSION: 2.7
|
||||||
MINICONDA: C:\Miniconda-x64
|
MINICONDA: C:\Miniconda-x64
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 1.8.1
|
current_version = 1.8.3
|
||||||
tag = True
|
tag = True
|
||||||
commit = True
|
commit = True
|
||||||
|
|
||||||
|
|
|
||||||
2
setup.py
2
setup.py
|
|
@ -150,7 +150,7 @@ setup(name = 'GPy',
|
||||||
py_modules = ['GPy.__init__'],
|
py_modules = ['GPy.__init__'],
|
||||||
test_suite = 'GPy.testing',
|
test_suite = 'GPy.testing',
|
||||||
setup_requires = ['numpy>=1.7'],
|
setup_requires = ['numpy>=1.7'],
|
||||||
install_requires = ['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.8.3'],
|
install_requires = ['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.8.5'],
|
||||||
extras_require = {'docs':['sphinx'],
|
extras_require = {'docs':['sphinx'],
|
||||||
'optional':['mpi4py',
|
'optional':['mpi4py',
|
||||||
'ipython>=4.0.0',
|
'ipython>=4.0.0',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue