scikit-learn/examples/gaussian_process/plot_gpr_noisy_targets.py

114 lines
3.6 KiB
Python
Raw Normal View History

"""
=========================================================
Gaussian Processes regression: basic introductory example
=========================================================
A simple one-dimensional regression example computed in two different ways:
1. A noise-free case
2. A noisy case with known noise-level per datapoint
In both cases, the kernel's parameters are estimated using the maximum
likelihood principle.
The figures illustrate the interpolating property of the Gaussian Process
model as well as its probabilistic nature in the form of a pointwise 95%
confidence interval.
Note that the parameter ``alpha`` is applied as a Tikhonov
regularization of the assumed covariance between the training points.
"""
print(__doc__)
# Author: Vincent Dubourg <vincent.dubourg@gmail.com>
# Jake Vanderplas <vanderplas@astro.washington.edu>
# Jan Hendrik Metzen <jhm@informatik.uni-bremen.de>s
2016-04-01 08:25:31 +08:00
# License: BSD 3 clause
import numpy as np
[MRG+1] Fix: Replace pylab with matplotlib.pyplot #6754 (#6762) * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 22 occurrences of pylab replaced with matplotlib.pyplot - bench_glm.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 21 remaining occurrences of pylab replaced with matplotlib.pyplot - bench_glmnet.py now free of pylab references - code does not execute for extraneous reason: ImportError: No module named glmnet.elastic_net * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 19 occurrences of pylab replaced with matplotlib.pyplot - bench_lasso.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 18 occurrences of pylab replaced with matplotlib.pyplot - bench_plot_neighbors.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 17 occurrences of pylab replaced with matplotlib.pyplot - bench_plot_omp_lars.py now free of pylab references - code does not execute for extraneous reasons: - File "bench_plot_omp_lars.py", line 111, in <module> - ax = fig.add_subplot(1, 2, i) - ValueError: num must be 1 <= num <= 2, not 0 - line 111 should probably be ax = fig.add_subplot(1, 2, i+1) * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_plot_parallel_pairwise.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_plot_ward.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_sgd_regression.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_tree.py now free of pylab references - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_glm.py clean * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_glm.py clean of pl - code does not execute for extraneous reasons * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_lasso.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_neighbors.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_omp_lars.py clean of pl - code does not execute for extraneous reasons * fix: Fix bug that prevented graphs from displaying * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_parallel_pairwise.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_ward.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_sgd_regression.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_tree.py clean of pl - code executes properly * docs: removed pylab references from comments * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * docs: removed pylab references from comments - replaced with matplotlib.pyplot - pl --> plt * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - mlcomp_sparse_document_classification.py clean of pl * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_gpr_noisy_targets.py clean of pl - code does not execute for extraneous reasons - File "examples/gaussian_process/plot_gpr_noisy_targets.py", line 31, in <module> - from sklearn.gaussian_process import GaussianProcessRegressor - ImportError: cannot import name GaussianProcessRegressor * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_gpc_isoprobability.py clean of pl - code does not execute for extraneous reasons - File "examples/gaussian_process/plot_gpc_isoprobability.py", line 24, in <module> - from sklearn.gaussian_process import GaussianProcessClassifier - ImportError: cannot import name GaussianProcessClassifier * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * docs: removed all pylab references - replaced with matplotlib.pyplot * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_sparse_coding.py clean of pl - code executes properly * docs: removed all pylab references - replaced with matplotlib.pyplot * docs: removed all pylab references - replaced with matplotlib.pyplot * style: Indent properly * style: indent properly * style: Indent properly * docs: Add missing .pyplot * docs: Fix typo * style: Indent properly
2016-05-10 17:34:33 +08:00
from matplotlib import pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
np.random.seed(1)
2012-02-17 23:49:48 +08:00
def f(x):
"""The function to predict."""
return x * np.sin(x)
2015-08-31 02:32:32 +08:00
# ----------------------------------------------------------------------
# First the noiseless case
X = np.atleast_2d([1., 3., 5., 6., 7., 8.]).T
# Observations
y = f(X).ravel()
# Mesh the input space for evaluations of the real function, the prediction and
# its MSE
x = np.atleast_2d(np.linspace(0, 10, 1000)).T
2018-04-24 07:32:25 +08:00
# Instantiate a Gaussian Process model
kernel = C(1.0, (1e-3, 1e3)) * RBF(10, (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)
# Fit to data using Maximum Likelihood Estimation of the parameters
gp.fit(X, y)
# Make the prediction on the meshed x-axis (ask for MSE as well)
y_pred, sigma = gp.predict(x, return_std=True)
# Plot the function, the prediction and the 95% confidence interval based on
# the MSE
plt.figure()
plt.plot(x, f(x), 'r:', label=r'$f(x) = x\,\sin(x)$')
plt.plot(X, y, 'r.', markersize=10, label='Observations')
plt.plot(x, y_pred, 'b-', label='Prediction')
[MRG+1] Fix: Replace pylab with matplotlib.pyplot #6754 (#6762) * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 22 occurrences of pylab replaced with matplotlib.pyplot - bench_glm.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 21 remaining occurrences of pylab replaced with matplotlib.pyplot - bench_glmnet.py now free of pylab references - code does not execute for extraneous reason: ImportError: No module named glmnet.elastic_net * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 19 occurrences of pylab replaced with matplotlib.pyplot - bench_lasso.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 18 occurrences of pylab replaced with matplotlib.pyplot - bench_plot_neighbors.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 17 occurrences of pylab replaced with matplotlib.pyplot - bench_plot_omp_lars.py now free of pylab references - code does not execute for extraneous reasons: - File "bench_plot_omp_lars.py", line 111, in <module> - ax = fig.add_subplot(1, 2, i) - ValueError: num must be 1 <= num <= 2, not 0 - line 111 should probably be ax = fig.add_subplot(1, 2, i+1) * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_plot_parallel_pairwise.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_plot_ward.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_sgd_regression.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_tree.py now free of pylab references - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_glm.py clean * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_glm.py clean of pl - code does not execute for extraneous reasons * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_lasso.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_neighbors.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_omp_lars.py clean of pl - code does not execute for extraneous reasons * fix: Fix bug that prevented graphs from displaying * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_parallel_pairwise.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_ward.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_sgd_regression.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_tree.py clean of pl - code executes properly * docs: removed pylab references from comments * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * docs: removed pylab references from comments - replaced with matplotlib.pyplot - pl --> plt * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - mlcomp_sparse_document_classification.py clean of pl * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_gpr_noisy_targets.py clean of pl - code does not execute for extraneous reasons - File "examples/gaussian_process/plot_gpr_noisy_targets.py", line 31, in <module> - from sklearn.gaussian_process import GaussianProcessRegressor - ImportError: cannot import name GaussianProcessRegressor * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_gpc_isoprobability.py clean of pl - code does not execute for extraneous reasons - File "examples/gaussian_process/plot_gpc_isoprobability.py", line 24, in <module> - from sklearn.gaussian_process import GaussianProcessClassifier - ImportError: cannot import name GaussianProcessClassifier * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * docs: removed all pylab references - replaced with matplotlib.pyplot * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_sparse_coding.py clean of pl - code executes properly * docs: removed all pylab references - replaced with matplotlib.pyplot * docs: removed all pylab references - replaced with matplotlib.pyplot * style: Indent properly * style: indent properly * style: Indent properly * docs: Add missing .pyplot * docs: Fix typo * style: Indent properly
2016-05-10 17:34:33 +08:00
plt.fill(np.concatenate([x, x[::-1]]),
np.concatenate([y_pred - 1.9600 * sigma,
(y_pred + 1.9600 * sigma)[::-1]]),
alpha=.5, fc='b', ec='None', label='95% confidence interval')
plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.ylim(-10, 20)
plt.legend(loc='upper left')
2015-08-31 02:32:32 +08:00
# ----------------------------------------------------------------------
# now the noisy case
X = np.linspace(0.1, 9.9, 20)
X = np.atleast_2d(X).T
# Observations and noise
y = f(X).ravel()
dy = 0.5 + 1.0 * np.random.random(y.shape)
noise = np.random.normal(0, dy)
y += noise
# Instantiate a Gaussian Process model
gp = GaussianProcessRegressor(kernel=kernel, alpha=dy ** 2,
n_restarts_optimizer=10)
# Fit to data using Maximum Likelihood Estimation of the parameters
gp.fit(X, y)
# Make the prediction on the meshed x-axis (ask for MSE as well)
y_pred, sigma = gp.predict(x, return_std=True)
# Plot the function, the prediction and the 95% confidence interval based on
# the MSE
plt.figure()
plt.plot(x, f(x), 'r:', label=r'$f(x) = x\,\sin(x)$')
plt.errorbar(X.ravel(), y, dy, fmt='r.', markersize=10, label='Observations')
plt.plot(x, y_pred, 'b-', label='Prediction')
[MRG+1] Fix: Replace pylab with matplotlib.pyplot #6754 (#6762) * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 22 occurrences of pylab replaced with matplotlib.pyplot - bench_glm.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 21 remaining occurrences of pylab replaced with matplotlib.pyplot - bench_glmnet.py now free of pylab references - code does not execute for extraneous reason: ImportError: No module named glmnet.elastic_net * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 19 occurrences of pylab replaced with matplotlib.pyplot - bench_lasso.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 18 occurrences of pylab replaced with matplotlib.pyplot - bench_plot_neighbors.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - one instance of 17 occurrences of pylab replaced with matplotlib.pyplot - bench_plot_omp_lars.py now free of pylab references - code does not execute for extraneous reasons: - File "bench_plot_omp_lars.py", line 111, in <module> - ax = fig.add_subplot(1, 2, i) - ValueError: num must be 1 <= num <= 2, not 0 - line 111 should probably be ax = fig.add_subplot(1, 2, i+1) * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_plot_parallel_pairwise.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_plot_ward.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_sgd_regression.py now free of pylab references - code executes properly * Fix: Replace pylab with matplotlib.pyplot #6754 - bench_tree.py now free of pylab references - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_glm.py clean * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_glm.py clean of pl - code does not execute for extraneous reasons * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_lasso.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_neighbors.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_omp_lars.py clean of pl - code does not execute for extraneous reasons * fix: Fix bug that prevented graphs from displaying * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_parallel_pairwise.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_plot_ward.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_sgd_regression.py clean of pl - code executes properly * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - bench_tree.py clean of pl - code executes properly * docs: removed pylab references from comments * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * docs: removed pylab references from comments - replaced with matplotlib.pyplot - pl --> plt * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - mlcomp_sparse_document_classification.py clean of pl * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_gpr_noisy_targets.py clean of pl - code does not execute for extraneous reasons - File "examples/gaussian_process/plot_gpr_noisy_targets.py", line 31, in <module> - from sklearn.gaussian_process import GaussianProcessRegressor - ImportError: cannot import name GaussianProcessRegressor * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_gpc_isoprobability.py clean of pl - code does not execute for extraneous reasons - File "examples/gaussian_process/plot_gpc_isoprobability.py", line 24, in <module> - from sklearn.gaussian_process import GaussianProcessClassifier - ImportError: cannot import name GaussianProcessClassifier * docs: removed all pylab references - replaced with matplotlib.pyplot - pl --> plt * docs: removed all pylab references - replaced with matplotlib.pyplot * refactor: Replace pl with plt - replace instances of pl (as on import pylab as pl) with plt (as in import matplotlib.pyplot as plt) - plot_sparse_coding.py clean of pl - code executes properly * docs: removed all pylab references - replaced with matplotlib.pyplot * docs: removed all pylab references - replaced with matplotlib.pyplot * style: Indent properly * style: indent properly * style: Indent properly * docs: Add missing .pyplot * docs: Fix typo * style: Indent properly
2016-05-10 17:34:33 +08:00
plt.fill(np.concatenate([x, x[::-1]]),
np.concatenate([y_pred - 1.9600 * sigma,
(y_pred + 1.9600 * sigma)[::-1]]),
alpha=.5, fc='b', ec='None', label='95% confidence interval')
plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.ylim(-10, 20)
plt.legend(loc='upper left')
plt.show()