mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-24 14:15:14 +02:00
commit
8d08da3348
15 changed files with 201 additions and 182 deletions
|
|
@ -1 +1 @@
|
|||
__version__ = "1.0.1"
|
||||
__version__ = "1.0.2"
|
||||
|
|
|
|||
|
|
@ -437,15 +437,22 @@ class GP(Model):
|
|||
warnings.warn("Wrong naming, use predict_wishart_embedding instead. Will be removed in future versions!", DeprecationWarning)
|
||||
return self.predict_wishart_embedding(Xnew, kern, mean, covariance)
|
||||
|
||||
def predict_magnification(self, Xnew, kern=None, mean=True, covariance=True):
|
||||
def predict_magnification(self, Xnew, kern=None, mean=True, covariance=True, dimensions=None):
|
||||
"""
|
||||
Predict the magnification factor as
|
||||
|
||||
sqrt(det(G))
|
||||
|
||||
for each point N in Xnew
|
||||
for each point N in Xnew.
|
||||
|
||||
:param bool mean: whether to include the mean of the wishart embedding.
|
||||
:param bool covariance: whether to include the covariance of the wishart embedding.
|
||||
:param array-like dimensions: which dimensions of the input space to use [defaults to self.get_most_significant_input_dimensions()[:2]]
|
||||
"""
|
||||
G = self.predict_wishard_embedding(Xnew, kern, mean, covariance)
|
||||
if dimensions is None:
|
||||
dimensions = self.get_most_significant_input_dimensions()[:2]
|
||||
G = G[:, dimensions][:,:,dimensions]
|
||||
from ..util.linalg import jitchol
|
||||
mag = np.empty(Xnew.shape[0])
|
||||
for n in range(Xnew.shape[0]):
|
||||
|
|
|
|||
|
|
@ -15,19 +15,10 @@
|
|||
#
|
||||
|
||||
import numpy as np
|
||||
from scipy import linalg
|
||||
from scipy import stats
|
||||
from ..core import Model
|
||||
from .. import kern
|
||||
#from GPy.plotting.matplot_dep.models_plots import gpplot
|
||||
#from GPy.plotting.matplot_dep.base_plots import x_frame1D
|
||||
#from GPy.plotting.matplot_dep import Tango
|
||||
#import pylab as pb
|
||||
from GPy.core.parameterization.param import Param
|
||||
|
||||
import GPy
|
||||
from .. import likelihoods
|
||||
|
||||
#from . import state_space_setup as ss_setup
|
||||
from ..core import Model
|
||||
from . import state_space_main as ssm
|
||||
from . import state_space_setup as ss_setup
|
||||
|
||||
|
|
@ -37,12 +28,12 @@ class StateSpace(Model):
|
|||
|
||||
if len(X.shape) == 1:
|
||||
X = np.atleast_2d(X).T
|
||||
self.num_data, input_dim = X.shape
|
||||
self.num_data, self.input_dim = X.shape
|
||||
|
||||
if len(Y.shape) == 1:
|
||||
Y = np.atleast_2d(Y).T
|
||||
|
||||
assert input_dim==1, "State space methods are only for 1D data"
|
||||
assert self.input_dim==1, "State space methods are only for 1D data"
|
||||
|
||||
if len(Y.shape)==2:
|
||||
num_data_Y, self.output_dim = Y.shape
|
||||
|
|
@ -168,7 +159,7 @@ class StateSpace(Model):
|
|||
def log_likelihood(self):
|
||||
return self._log_marginal_likelihood
|
||||
|
||||
def _raw_predict(self, Xnew=None, Ynew=None, filteronly=False):
|
||||
def _raw_predict(self, Xnew=None, Ynew=None, filteronly=False, **kw):
|
||||
"""
|
||||
Performs the actual prediction for new X points.
|
||||
Inner function. It is called only from inside this class.
|
||||
|
|
@ -270,22 +261,23 @@ class StateSpace(Model):
|
|||
# Return the posterior of the state
|
||||
return (m, V)
|
||||
|
||||
def predict(self, Xnew=None, filteronly=False):
|
||||
def predict(self, Xnew=None, filteronly=False, include_likelihood=True, **kw):
|
||||
|
||||
# Run the Kalman filter to get the state
|
||||
(m, V) = self._raw_predict(Xnew,filteronly=filteronly)
|
||||
|
||||
# Add the noise variance to the state variance
|
||||
V += float(self.Gaussian_noise.variance)
|
||||
if include_likelihood:
|
||||
V += float(self.likelihood.variance)
|
||||
|
||||
# Lower and upper bounds
|
||||
lower = m - 2*np.sqrt(V)
|
||||
upper = m + 2*np.sqrt(V)
|
||||
#lower = m - 2*np.sqrt(V)
|
||||
#upper = m + 2*np.sqrt(V)
|
||||
|
||||
# Return mean and variance
|
||||
return (m, V, lower, upper)
|
||||
return m, V
|
||||
|
||||
def predict_quantiles(self, Xnew=None, quantiles=(2.5, 97.5)):
|
||||
def predict_quantiles(self, Xnew=None, quantiles=(2.5, 97.5), **kw):
|
||||
mu, var = self._raw_predict(Xnew)
|
||||
#import pdb; pdb.set_trace()
|
||||
return [stats.norm.ppf(q/100.)*np.sqrt(var + float(self.Gaussian_noise.variance)) + mu for q in quantiles]
|
||||
|
|
|
|||
|
|
@ -52,6 +52,17 @@ def inject_plotting():
|
|||
GP.plot_f = gpy_plot.gp_plots.plot_f
|
||||
GP.plot_magnification = gpy_plot.latent_plots.plot_magnification
|
||||
|
||||
from ..models import StateSpace
|
||||
StateSpace.plot_data = gpy_plot.data_plots.plot_data
|
||||
StateSpace.plot_data_error = gpy_plot.data_plots.plot_data_error
|
||||
StateSpace.plot_errorbars_trainset = gpy_plot.data_plots.plot_errorbars_trainset
|
||||
StateSpace.plot_mean = gpy_plot.gp_plots.plot_mean
|
||||
StateSpace.plot_confidence = gpy_plot.gp_plots.plot_confidence
|
||||
StateSpace.plot_density = gpy_plot.gp_plots.plot_density
|
||||
StateSpace.plot_samples = gpy_plot.gp_plots.plot_samples
|
||||
StateSpace.plot = gpy_plot.gp_plots.plot
|
||||
StateSpace.plot_f = gpy_plot.gp_plots.plot_f
|
||||
|
||||
from ..core import SparseGP
|
||||
SparseGP.plot_inducing = gpy_plot.data_plots.plot_inducing
|
||||
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ def scatter_label_generator(labels, X, visible_dims, marker=None):
|
|||
x = X[index, input_1]
|
||||
y = X[index, input_2]
|
||||
z = X[index, input_3]
|
||||
|
||||
yield x, y, z, this_label, index, m
|
||||
|
||||
def subsample_X(X, labels, num_samples=1000):
|
||||
|
|
|
|||
|
|
@ -131,14 +131,15 @@ class PlotlyPlots(AbstractPlottingLibrary):
|
|||
#not matplotlib marker
|
||||
pass
|
||||
marker_kwargs = marker_kwargs or {}
|
||||
marker_kwargs.setdefault('symbol', marker)
|
||||
if 'symbol' not in marker_kwargs:
|
||||
marker_kwargs['symbol'] = marker
|
||||
if Z is not None:
|
||||
return Scatter3d(x=X, y=Y, z=Z, mode='markers',
|
||||
showlegend=label is not None,
|
||||
marker=Marker(color=color, colorscale=cmap, **marker_kwargs),
|
||||
name=label, **kwargs)
|
||||
return Scatter(x=X, y=Y, mode='markers', showlegend=label is not None,
|
||||
marker=Marker(color=color, colorscale=cmap, **marker_kwargs or {}),
|
||||
marker=Marker(color=color, colorscale=cmap, **marker_kwargs),
|
||||
name=label, **kwargs)
|
||||
|
||||
def plot(self, ax, X, Y, Z=None, color=None, label=None, line_kwargs=None, **kwargs):
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 191 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 185 KiB |
|
|
@ -730,6 +730,7 @@ class GradientTests(np.testing.TestCase):
|
|||
self.assertTrue( np.allclose(var1, var2) )
|
||||
|
||||
def test_gp_VGPC(self):
|
||||
np.random.seed(10)
|
||||
num_obs = 25
|
||||
X = np.random.randint(0, 140, num_obs)
|
||||
X = X[:, None]
|
||||
|
|
@ -737,6 +738,7 @@ class GradientTests(np.testing.TestCase):
|
|||
kern = GPy.kern.Bias(1) + GPy.kern.RBF(1)
|
||||
lik = GPy.likelihoods.Gaussian()
|
||||
m = GPy.models.GPVariationalGaussianApproximation(X, Y, kernel=kern, likelihood=lik)
|
||||
m.randomize()
|
||||
self.assertTrue(m.checkgrad())
|
||||
|
||||
def test_ssgplvm(self):
|
||||
|
|
@ -744,12 +746,14 @@ class GradientTests(np.testing.TestCase):
|
|||
from GPy.models import SSGPLVM
|
||||
from GPy.examples.dimensionality_reduction import _simulate_matern
|
||||
|
||||
np.random.seed(10)
|
||||
D1, D2, D3, N, num_inducing, Q = 13, 5, 8, 45, 3, 9
|
||||
_, _, Ylist = _simulate_matern(D1, D2, D3, N, num_inducing, False)
|
||||
Y = Ylist[0]
|
||||
k = kern.Linear(Q, ARD=True) # + kern.white(Q, _np.exp(-2)) # + kern.bias(Q)
|
||||
# k = kern.RBF(Q, ARD=True, lengthscale=10.)
|
||||
m = SSGPLVM(Y, Q, init="rand", num_inducing=num_inducing, kernel=k, group_spike=True)
|
||||
m.randomize()
|
||||
self.assertTrue(m.checkgrad())
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@ def _image_directories():
|
|||
cbook.mkdirs(result_dir)
|
||||
return baseline_dir, result_dir
|
||||
|
||||
baseline_dir, result_dir = _image_directories()
|
||||
if not os.path.exists(baseline_dir):
|
||||
raise SkipTest("Not installed from source, baseline not available. Install from source to test plotting")
|
||||
|
||||
def _sequenceEqual(a, b):
|
||||
assert len(a) == len(b), "Sequences not same length"
|
||||
|
|
@ -99,7 +102,6 @@ def _notFound(path):
|
|||
raise IOError('File {} not in baseline')
|
||||
|
||||
def _image_comparison(baseline_images, extensions=['pdf','svg','png'], tol=11):
|
||||
baseline_dir, result_dir = _image_directories()
|
||||
for num, base in zip(plt.get_fignums(), baseline_images):
|
||||
for ext in extensions:
|
||||
fig = plt.figure(num)
|
||||
|
|
|
|||
|
|
@ -17,5 +17,5 @@ recursive-include GPy *.h
|
|||
recursive-include GPy *.pyx
|
||||
|
||||
# Testing
|
||||
include GPy/testing/baseline/*.png
|
||||
#include GPy/testing/baseline/*.png
|
||||
#include GPy/testing/pickle_test.pickle
|
||||
|
|
|
|||
10
README.md
10
README.md
|
|
@ -9,6 +9,8 @@ The Gaussian processes framework in Python.
|
|||
* Travis-CI [unit-tests](https://travis-ci.org/SheffieldML/GPy)
|
||||
* [](http://opensource.org/licenses/BSD-3-Clause)
|
||||
|
||||
[](https://travis-ci.org/SheffieldML/GPy) [](http://codecov.io/github/SheffieldML/GPy?branch=devel) [](http://gpy.readthedocs.org/en/devel/) [](http://depsy.org/package/python/GPy)
|
||||
|
||||
## Updated Structure
|
||||
|
||||
We have pulled the core parameterization out of GPy. It is a package called [paramz](https://github.com/sods/paramz) and is the pure gradient based model optimization.
|
||||
|
|
@ -27,12 +29,6 @@ A warning: This usually works, but sometimes `distutils/setuptools` opens a
|
|||
whole can of worms here, specially when compiled extensions are involved.
|
||||
If that is the case, it is best to clean the repo and reinstall.
|
||||
|
||||
## Continuous integration
|
||||
|
||||
| | Travis-CI | Codecov | RTFD |
|
||||
| ---: | :--: | :---: | :---: |
|
||||
| **devel:** | [](https://travis-ci.org/SheffieldML/GPy) | [](http://codecov.io/github/SheffieldML/GPy?branch=devel) | [](http://gpy.readthedocs.org/en/devel/) |
|
||||
|
||||
## Supported Platforms:
|
||||
|
||||
[<img src="https://www.python.org/static/community_logos/python-logo-generic.svg" height=40px>](https://www.python.org/)
|
||||
|
|
@ -40,7 +36,7 @@ If that is the case, it is best to clean the repo and reinstall.
|
|||
[<img src="https://upload.wikimedia.org/wikipedia/commons/8/8e/OS_X-Logo.svg" height=40px>](http://www.apple.com/osx/)
|
||||
[<img src="https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg" height=40px>](https://en.wikipedia.org/wiki/List_of_Linux_distributions)
|
||||
|
||||
Python 2.7, 3.3 and higher
|
||||
Python 2.7, 3.4 and higher
|
||||
|
||||
## Citation
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
[bumpversion]
|
||||
current_version = 1.0.1
|
||||
current_version = 1.0.2
|
||||
tag = False
|
||||
commit = True
|
||||
|
||||
|
|
@ -11,3 +11,6 @@ universal = 1
|
|||
[upload_docs]
|
||||
upload-dir = doc/build/html
|
||||
|
||||
[metadata]
|
||||
description-file = README.rst
|
||||
|
||||
|
|
|
|||
2
setup.py
2
setup.py
|
|
@ -182,6 +182,8 @@ if not os.path.exists(user_file):
|
|||
if os.path.exists(old_user_file):
|
||||
# Move it to new location:
|
||||
print("GPy: Found old config file, moving to new location {}".format(user_file))
|
||||
if not os.path.exists(os.path.dirname(user_file)):
|
||||
os.makedirs(os.path.dirname(user_file))
|
||||
os.rename(old_user_file, user_file)
|
||||
else:
|
||||
# No config file exists, save informative stub to user config folder:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue