def test_contour_plot(): data = _setup_linear_regression() bpplt.contour(data['B'], np.linspace(1, 3, 1000), np.linspace(1, 9, 1000), n=10, colors='k') bpplt.plot(data['c'], x=data['k'], color='r', marker='x', linestyle='None', markersize=10, markeredgewidth=2)
def run(): k = 2 c = 5 s = 2 x = np.arange(10) y = k * x + c + s * np.random.randn(10) X=np.vstack([x,np.ones(len(x))]).T B = GaussianARD(0, 1e-6, shape=(2,)) F = SumMultiply('i,i', B, X) tau = Gamma(1e-3, 1e-3) Y = GaussianARD(F, tau) Y.observe(y) from bayespy.inference import VB Q = VB(Y, B, tau) Q.update(repeat=1000) xh = np.linspace(-5, 15, 100) Xh = np.vstack([xh, np.ones(len(xh))]).T Fh = SumMultiply('i,i', B, Xh) bpplt.pyplot.figure() bpplt.plot(Fh, x=xh, scale=2) bpplt.plot(y, x=x, color='r', marker='x', linestyle='None') bpplt.plot(k*xh+c, x=xh, color='r'); bpplt.pyplot.show()
import numpy numpy.random.seed(1) M = 20 N = 100 import numpy as np x = np.random.randn(N, 2) w = np.random.randn(M, 2) f = np.einsum('ik,jk->ij', w, x) y = f + 0.1 * np.random.randn(M, N) D = 10 from bayespy.nodes import GaussianARD, Gamma, SumMultiply X = GaussianARD(0, 1, plates=(1, N), shape=(D, )) alpha = Gamma(1e-5, 1e-5, plates=(D, )) C = GaussianARD(0, alpha, plates=(M, 1), shape=(D, )) F = SumMultiply('d,d->', X, C) tau = Gamma(1e-5, 1e-5) Y = GaussianARD(F, tau) Y.observe(y) from bayespy.inference import VB Q = VB(Y, X, C, alpha, tau) C.initialize_from_random() from bayespy.inference.vmp.transformations import RotateGaussianARD rot_X = RotateGaussianARD(X) rot_C = RotateGaussianARD(C, alpha) from bayespy.inference.vmp.transformations import RotationOptimizer R = RotationOptimizer(rot_X, rot_C, D) Q.set_callback(R.rotate) Q.update(repeat=1000) import bayespy.plot as bpplt bpplt.plot(F) bpplt.plot(f, color='r', marker='x', linestyle='None')
#( 5 : Parameter expansion 収束が遅い時) # from bayespy.inference.vmp import transformations # rotX = transformations.RotateGaussianARD(X) # rotC = transformations.RotateGaussianARD(C, alpha) # R = transformations.RotationOptimizer(rotC, rotX, D) # R.rotate() # alpha.initialize_from_prior() # C.initialize_from_prior() # X.initialize_from_parameters(np.random.randn(1, 100, D), 10) # tau.initialize_from_prior() # Q = VB(Y, C, X, alpha, tau) # Q.callback = R.rotate # Q.update(repeat=1000, tol=1e-6) # -----Examining the results----- # Plotting the results bpplt.pyplot.figure() bpplt.pdf(Q['tau'], np.linspace(60, 140, num=100)) V = Gaussian([3, 5], [[4, 2], [2, 5]]) bpplt.pyplot.figure() bpplt.contour(V, np.linspace(1, 5, num=100), np.linspace(3, 7, num=100)) bpplt.pyplot.figure() bpplt.hinton(C) bpplt.pyplot.figure() bpplt.plot(X, axis=-2) bpplt.pyplot.show()
def test_contour_plot(): data = _setup_linear_regression() bpplt.contour(data['B'], np.linspace(1,3,1000), np.linspace(1,9,1000), n=10, colors='k') bpplt.plot(data['c'], x=data['k'], color='r', marker='x', linestyle='None', markersize=10, markeredgewidth=2)
from bayespy.inference import VB Q = VB(X, C, gamma, A, alpha, tau, Y) w = 0.3 a = np.array([[np.cos(w), -np.sin(w), 0, 0], [np.sin(w), np.cos(w), 0, 0], [0, 0, 1, 0], [0, 0, 0, 0]]) c = np.random.randn(M, 4) x = np.empty((N, 4)) f = np.empty((M, N)) y = np.empty((M, N)) x[0] = 10 * np.random.randn(4) f[:, 0] = np.dot(c, x[0]) y[:, 0] = f[:, 0] + 3 * np.random.randn(M) for n in range(N - 1): x[n + 1] = np.dot(a, x[n]) + [1, 1, 10, 10] * np.random.randn(4) f[:, n + 1] = np.dot(c, x[n + 1]) y[:, n + 1] = f[:, n + 1] + 3 * np.random.randn(M) from bayespy.utils import random mask = random.mask(M, N, p=0.2) Y.observe(y, mask=mask) import bayespy.plot as bpplt Q.update(repeat=10) from bayespy.inference.vmp import transformations rotC = transformations.RotateGaussianARD(C, gamma) rotA = transformations.RotateGaussianARD(A, alpha) rotX = transformations.RotateGaussianMarkovChain(X, rotA) R = transformations.RotationOptimizer(rotX, rotC, D) Q.callback = R.rotate Q.update(repeat=1000) bpplt.plot(F, center=True) bpplt.pyplot.show()
import numpy numpy.random.seed(1) from bayespy.nodes import CategoricalMarkovChain a0 = [0.6, 0.4] # p(rainy)=0.6, p(sunny)=0.4 A = [[0.7, 0.3], # p(rainy->rainy)=0.7, p(rainy->sunny)=0.3 [0.4, 0.6]] # p(sunny->rainy)=0.4, p(sunny->sunny)=0.6 N = 100 Z = CategoricalMarkovChain(a0, A, states=N) from bayespy.nodes import Categorical, Mixture P = [[0.1, 0.4, 0.5], [0.6, 0.3, 0.1]] Y = Mixture(Z, Categorical, P) weather = Z.random() activity = Mixture(weather, Categorical, P).random() Y.observe(activity) from bayespy.inference import VB Q = VB(Y, Z) Q.update() import bayespy.plot as bpplt bpplt.plot(Z) bpplt.plot(1-weather, color='r', marker='x') bpplt.pyplot.show()