├── models
├── __init__.py
├── normal.py
└── basic.py
├── utils
├── __init__.py
├── Modelutils.pyx
└── cyutil.py
├── __init__.py
├── compile.sh
├── setup.py
├── .gitignore
├── notebooks
├── normal_example.py
└── normal_example.ipynb
└── README.md
/models/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/utils/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
1 | import models
2 | import utils
3 |
--------------------------------------------------------------------------------
/compile.sh:
--------------------------------------------------------------------------------
1 | # build cython scripts
2 | python setup.py build_ext --inplace
3 |
4 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from distutils.core import setup
2 | from distutils.core import Extension
3 | #from Cython.Build import cythonize
4 | from utils.cyutil import cythonize
5 | import numpy
6 |
7 | setup(
8 | ext_modules=cythonize("**/*.pyx"),
9 | include_dirs=[numpy.get_include()]
10 | )
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 |
5 | # C extensions
6 | *.so
7 |
8 | # Distribution / packaging
9 | .Python
10 | env/
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | lib/
17 | lib64/
18 | parts/
19 | sdist/
20 | var/
21 | *.egg-info/
22 | .installed.cfg
23 | *.egg
24 |
25 | # PyInstaller
26 | # Usually these files are written by a python script from a template
27 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
28 | *.manifest
29 | *.spec
30 |
31 | # Installer logs
32 | pip-log.txt
33 | pip-delete-this-directory.txt
34 |
35 | # Unit test / coverage reports
36 | htmlcov/
37 | .tox/
38 | .coverage
39 | .cache
40 | nosetests.xml
41 | coverage.xml
42 |
43 | # Translations
44 | *.mo
45 | *.pot
46 |
47 | # Django stuff:
48 | *.log
49 |
50 | # Sphinx documentation
51 | docs/_build/
52 |
53 | # PyBuilder
54 | target/
55 |
--------------------------------------------------------------------------------
/notebooks/normal_example.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # 3.0
3 |
4 | #
5 |
6 | # ipython magic
7 | %matplotlib inline
8 | %load_ext autoreload
9 | %autoreload 2
10 |
11 | #
12 |
13 | # Normal-Normal model
14 | from bayesCPD.models.normal import NN
15 | # constant Hazard function
16 | from bayesCPD.utils.Modelutils import constant_hazard
17 |
18 | #
19 |
20 | # initialize prior hyperparameters
21 | prior = {'mu': 0, 'tau': 1}
22 |
23 | # initialize model: Normal likelihood with known precision (ivar), Normal conjugate prior on the mean
24 | model = NN(prior, ivar=1)
25 |
26 | #
27 |
28 | # generate 1000 datapoints from the prior
29 | model.generate_data(T=1000, hazard=constant_hazard, rate=250)
30 | model.plot_data()
31 |
32 | #
33 |
34 | # run online changepoint detection
35 | model.inference(rate=250)
36 |
37 | #
38 |
39 | # plot result
40 | model.plot_results(model.Rmat)
41 |
42 | #
43 |
44 |
45 |
--------------------------------------------------------------------------------
/utils/Modelutils.pyx:
--------------------------------------------------------------------------------
1 | cimport numpy as np
2 | import numpy as np
3 | from scipy.special import psi
4 | from libc.math cimport pow
5 |
6 | FLOAT = np.float
7 | ctypedef np.float_t FLOAT_t
8 |
9 | INT = np.int
10 | ctypedef np.int_t INT_t
11 |
12 | DOUBLE = np.double
13 | ctypedef np.double_t DOUBLE_t
14 |
15 | #cdef extern from "test_digamma.hpp":
16 | # float _digamma_cython "digamma_cython"(float x)
17 |
18 | modecollapse = lambda r, theta: theta[r.argmax()]
19 | meancollapse = lambda r, theta: theta.mean(0)
20 | constant_hazard = lambda r, rate: np.ones(np.size(r)) / rate
21 |
22 |
23 | ###############################################################################
24 | # Pure Python Functions
25 | ###############################################################################
26 |
27 | def get_full_row(row, inds, base):
28 |
29 | newrow = np.array([])
30 |
31 | for i in xrange(len(inds) - 1):
32 | start = inds[i]; end = inds[i+1]
33 | queue = row[start:end]
34 | for j in queue:
35 | newrow = np.append(newrow, np.repeat(j, base ** i) / float(base**i))
36 |
37 | return newrow
38 |
39 |
40 | ###############################################################################
41 | # Typedefed Functions
42 | ###############################################################################
43 | def get_full_row_cython(np.ndarray[FLOAT_t] row, np.ndarray[INT_t] inds, int base):
44 |
45 | cdef np.ndarray[FLOAT_t] newrow = np.array([], dtype=FLOAT)
46 | cdef np.ndarray[FLOAT_t] queue
47 | cdef int I = len(inds) - 1
48 | cdef int Q
49 | cdef int start, end
50 | cdef float size
51 |
52 | for i in range(I):
53 |
54 | start = inds[i]
55 | end = inds[i+1]
56 |
57 | queue = row[start:end]
58 | #Q = len(queue)
59 | Q = end - start
60 | size = 1.* base ** i
61 |
62 | for q in range(Q):
63 | newrow = np.append(newrow, np.ones(size)*queue[q] / size)
64 | #newrow = np.append(newrow, np.repeat(queue[q], base**i) / float(base**i))
65 |
66 | return newrow
67 |
68 | ###############################################################################
69 | # Using C++ Functions
70 | ###############################################################################
71 |
72 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | bayesCPD
2 | ========
3 |
4 | # Preliminaries
5 |
6 | BayesCPD is a Python library for performing efficient changepoint detection in
7 | a flexible class of Bayesian models, including conjugate exponential family
8 | models and a number of latent variable models.
9 | Currently, this only supports online changepoint detection.
10 |
11 | ## Dependencies:
12 | * Python 2.7
13 | * Numpy
14 | * Scipy
15 | * Cython
16 | * Matplotlib
17 | * Pandas
18 | * IPython and IPython Notebook
19 |
20 | ## Building:
21 | After cloning the git repository, you'll need to add this directory to your
22 | PYTHONPATH. Then to build, run the script
23 | ```bash
24 | $ ./compile.sh
25 | ```
26 |
27 | # Performing Changepoint Detection
28 |
29 | ## Overview
30 | To create a changepoint model in general, create a class which inherits from
31 | BaseModel and implement the abstract methods. The main components involved are
32 | implementing the predictive distribution and updating the model's parameters.
33 |
34 | There are a few modes of inference currently supported:
35 | * Time-independent inference
36 | * Full changepoint detection
37 | * Efficient changepoint detection approximation
38 |
39 | In general, to run inference for a specific model, you create a dictionary
40 | containing the values of the prior parameters with a string naming the variable
41 | and a value.
42 |
43 | ```python
44 | # Normal-Normal model
45 | from bayesCPD.models.normal import NN
46 |
47 | # constant Hazard function
48 | from bayesCPD.utils.Modelutils import constant_hazard
49 |
50 | prior_params = {'mu', 0., 'tau', 0.}
51 | ```
52 |
53 | Then feed those parameters to the model, specifying which mode to use.
54 |
55 | ```python
56 | model = NN(prior, ivar=1, mode='all')
57 | ```
58 |
59 | You can either generate data from the prior (or some new set of values)
60 |
61 | ```python
62 | # generate 1000 datapoints from the prior
63 | model.generate_data(T=1000, hazard=constant_hazard, rate=250)
64 | model.plot_data()
65 | ```
66 |
67 | 
68 |
69 | Or load your own dataset:
70 | ```python
71 | model.load_data(my_dataset)
72 | ```
73 | Then run inference and plot results:
74 | ```python
75 | # run online changepoint detection
76 | model.inference(rate=250)
77 | model.plot_results()
78 | ```
79 | 
80 |
81 | In this particular model, it is implemented such that the predictive means are
82 | plotted on the data in the top plot. The blue solid line is the predictive mean
83 | when using the changepoint model, and the orange dotted line is the predictive
84 | mean under time-independent online Bayesian updating.
85 |
86 | We have implemented several models you can currently run in the models
87 | directory, including univariate and multivariate versions of conjugate
88 | Gaussian models, Gaussian and other mixture models, and latent Dirichet allocation.
89 |
90 | See notebooks/normal_example.ipynb for this example for details.
91 | More examples for other models are also in the notebooks directory.
92 |
93 | ## Implementing a model
94 |
95 | (Coming soon)
96 |
--------------------------------------------------------------------------------
/utils/cyutil.py:
--------------------------------------------------------------------------------
1 | #############################################
2 | # code from https://github.com/mattjj/pyhsmm
3 | #############################################
4 |
5 | import Cython.Build
6 | from Cython.Build.Dependencies import *
7 |
8 | # NOTE: mostly a copy of cython's create_extension_list except for the lines
9 | # surrounded by "begin matt added" / "end matt added"
10 | def create_extension_list(patterns, exclude=[], ctx=None, aliases=None, quiet=False, language=None,
11 | exclude_failures=False):
12 | if not isinstance(patterns, (list, tuple)):
13 | patterns = [patterns]
14 | explicit_modules = set([m.name for m in patterns if isinstance(m, Extension)])
15 | seen = set()
16 | deps = create_dependency_tree(ctx, quiet=quiet)
17 | to_exclude = set()
18 | if not isinstance(exclude, list):
19 | exclude = [exclude]
20 | for pattern in exclude:
21 | to_exclude.update(map(os.path.abspath, extended_iglob(pattern)))
22 |
23 | module_list = []
24 | for pattern in patterns:
25 | if isinstance(pattern, str):
26 | filepattern = pattern
27 | template = None
28 | name = '*'
29 | base = None
30 | exn_type = Extension
31 | ext_language = language
32 | elif isinstance(pattern, Extension):
33 | for filepattern in pattern.sources:
34 | if os.path.splitext(filepattern)[1] in ('.py', '.pyx'):
35 | break
36 | else:
37 | # ignore non-cython modules
38 | module_list.append(pattern)
39 | continue
40 | template = pattern
41 | name = template.name
42 | base = DistutilsInfo(exn=template)
43 | exn_type = template.__class__
44 | ext_language = None # do not override whatever the Extension says
45 | else:
46 | raise TypeError(pattern)
47 |
48 | for file in extended_iglob(filepattern):
49 | if os.path.abspath(file) in to_exclude:
50 | continue
51 | pkg = deps.package(file)
52 | if '*' in name:
53 | module_name = deps.fully_qualified_name(file)
54 | if module_name in explicit_modules:
55 | continue
56 | else:
57 | module_name = name
58 |
59 | if module_name not in seen:
60 | try:
61 | kwds = deps.distutils_info(file, aliases, base).values
62 | except Exception:
63 | if exclude_failures:
64 | continue
65 | raise
66 | if base is not None:
67 | for key, value in base.values.items():
68 | if key not in kwds:
69 | kwds[key] = value
70 |
71 | sources = [file]
72 | if template is not None:
73 | sources += [m for m in template.sources if m != filepattern]
74 | if 'sources' in kwds:
75 | # allow users to add .c files etc.
76 | for source in kwds['sources']:
77 | source = encode_filename_in_py2(source)
78 | if source not in sources:
79 | sources.append(source)
80 | del kwds['sources']
81 | if 'depends' in kwds:
82 | depends = resolve_depends(kwds['depends'], (kwds.get('include_dirs') or []) + [find_root_package_dir(file)])
83 | if template is not None:
84 | # Always include everything from the template.
85 | depends = list(set(template.depends).union(set(depends)))
86 | kwds['depends'] = depends
87 |
88 | if ext_language and 'language' not in kwds:
89 | kwds['language'] = ext_language
90 |
91 | # NOTE: begin matt added
92 | if 'name' in kwds:
93 | module_name = str(kwds['name'])
94 | del kwds['name']
95 | else:
96 | module_name = os.path.splitext(file)[0].replace('/','.')
97 | # NOTE: end matt added
98 | module_list.append(exn_type(
99 | name=module_name,
100 | sources=sources,
101 | **kwds))
102 | m = module_list[-1]
103 | seen.add(name)
104 | return module_list
105 |
106 | true_cythonize = Cython.Build.cythonize
107 | true_create_extension_list = Cython.Build.Dependencies.create_extension_list
108 |
109 | def cythonize(*args,**kwargs):
110 | Cython.Build.Dependencies.create_extension_list = create_extension_list
111 | out = true_cythonize(*args,**kwargs)
112 | Cython.Build.Dependencies.create_extension_list = true_create_extension_list
113 | return out
114 |
115 |
--------------------------------------------------------------------------------
/models/normal.py:
--------------------------------------------------------------------------------
1 | from scipy.stats import norm
2 | from scipy.stats import t
3 | from numpy import random as r
4 | import numpy as np
5 | import pylab
6 |
7 | from bayesCPD.models.basic import ConjugateModel
8 |
9 |
10 | """
11 | Contains several models:
12 | - Normal model with known precision (Normal prior)
13 | - Normal model with unknown mean and precision (Gamma prior)
14 | - Multivariate normal with unknown mean and precision (Wishart prior)
15 | """
16 |
17 | # Normal model with known precision
18 | class NN(ConjugateModel):
19 |
20 | def __init__(self, prior_params, ivar, mode='all', seed=101, verbose='some',
21 | cython=True):
22 |
23 | super(self.__class__, self).__init__(prior_params, mode=mode,
24 | verbose=verbose, cython=cython)
25 |
26 | np.random.seed(seed)
27 | self.name = 'Normal Conjugate Model, Known Precision'
28 |
29 | # known value
30 | self.ivar = ivar
31 |
32 | # for data generation
33 | self.curr_mean = 0
34 | self.all_means = []
35 |
36 | def generate_parameters(self, params):
37 |
38 | mu0 = params['mu']
39 | tau0 = params['tau']
40 |
41 | # draw mean
42 | self.curr_mean = r.normal(mu0, tau0**-.5)
43 | self.all_means.append(self.curr_mean)
44 |
45 | def draw_value(self):
46 | return r.normal(self.curr_mean, self.ivar**-.5)
47 |
48 | def get_predprobs(self, datum):
49 | """
50 | Predictive distribution of NN is a Normal.
51 | """
52 | muT = self.params.post_params['mu']
53 | tauT = self.params.post_params['tau']
54 | return norm.pdf(datum, muT, (1./tauT + 1./self.ivar)**.5)
55 |
56 | def make_pred(self, runprobs):
57 |
58 | muT = self.params.post_params['mu']
59 | #tauT = self.params.post_params['tau']
60 |
61 | self.pred_means.append((muT * runprobs).sum())
62 | #self.pred_vars.append(((1./(tauT)+1./(self.ivar)) * runprobs).sum())
63 |
64 | self.pred_means_reg.append(muT[-1])
65 | #self.pred_vars_reg.append(1./tauT[-1] + 1./self.ivar)
66 |
67 | def plot_preds(self, ax, scale=1):
68 |
69 | T = len(self.pred_means)
70 | pylab.plot(xrange(1, T+1), self.pred_means, color='blue', linewidth=1.5)
71 | pylab.plot(xrange(1, T+1), self.pred_means_reg, color='orange', linewidth=2,
72 | linestyle='dashed')
73 |
74 |
75 | def update_parameters(self, datum):
76 |
77 | muT = self.params.post_params['mu']
78 | tauT = self.params.post_params['tau']
79 |
80 | sstats = {'mu': (tauT * muT + self.ivar * datum) / (tauT + self.ivar),
81 | 'tau': tauT + self.ivar
82 | }
83 |
84 | return sstats
85 |
86 | def compute_expecations(self):
87 | return {'mu': self.params.post_params['mu']}
88 |
89 | # univariate version
90 | class NG(ConjugateModel):
91 |
92 | def __init__(self, prior_params, mode='all', seed=101, verbose='some',
93 | cython=True):
94 |
95 | super(self.__class__, self).__init__(prior_params, mode=mode,
96 | verbose=verbose, cython=cython)
97 |
98 | np.random.seed(seed)
99 | self.name = 'Normal Gamma'
100 |
101 | # for data generation
102 | self.curr_mean = 0
103 | self.all_means = []
104 | self.all_ivars = []
105 |
106 | def generate_parameters(self, params):
107 |
108 | mu0 = params['mu']
109 | nu0 = params['nu']
110 | alpha0 = params['alpha']
111 | beta0 = params['beta']
112 |
113 | # draw precision
114 | ivar = r.gamma(alpha0, beta0)
115 | self.curr_ivar = ivar
116 |
117 | # draw mean
118 | self.curr_mean = r.normal(mu0, (nu0*ivar)**-.5)
119 | self.all_means.append(self.curr_mean)
120 | self.all_ivars.append(self.curr_ivar)
121 |
122 | def draw_value(self):
123 | return r.normal(self.curr_mean, self.curr_ivar**-.5)
124 |
125 | def get_predprobs(self, datum):
126 | """
127 | Predictive distribution of NIG is a T distribution.
128 | """
129 | muT = self.params.post_params['mu']
130 | nuT = self.params.post_params['nu']
131 | alphaT = self.params.post_params['alpha']
132 | betaT = self.params.post_params['beta']
133 | return t.pdf(datum, 2*alphaT, muT, betaT*(1+nuT) / (alphaT*nuT))
134 |
135 | def make_pred(self, runprobs):
136 |
137 | muT = self.params.post_params['mu']
138 | self.pred_means.append((muT * runprobs).sum())
139 | self.pred_means_reg.append(muT[-1])
140 |
141 | def plot_preds(self, ax, scale=1):
142 |
143 | T = len(self.pred_means)
144 | pylab.plot(xrange(1, T+1), self.pred_means, color='blue', linewidth=1.5)
145 | pylab.plot(xrange(1, T+1), self.pred_means_reg, color='orange', linewidth=2,
146 | linestyle='dashed')
147 |
148 | def update_parameters(self, datum):
149 |
150 | muT = self.params.post_params['mu']
151 | nuT = self.params.post_params['nu']
152 | alphaT = self.params.post_params['alpha']
153 | betaT = self.params.post_params['beta']
154 |
155 | sstats = {'mu': (nuT*muT + datum) / (nuT + 1),
156 | 'nu': nuT + 1,
157 | 'alpha': alphaT + 1./2,
158 | 'beta': betaT + 1.*nuT/(nuT+1) * 1.*(datum-muT)**2 / 2.
159 | }
160 |
161 | return sstats
162 |
163 | def compute_expecations(self):
164 |
165 | alpha = self.params.post_params['alpha']
166 | beta = self.params.post_params['beta']
167 |
168 | return {'E_mu': self.params.post_params['mu'],
169 | 'E_tau': 1.*alpha / (alpha+beta)}
170 |
171 |
172 |
--------------------------------------------------------------------------------
/models/basic.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import time
3 | import pylab
4 | import pdb
5 |
6 | from numpy import random as r
7 | from abc import ABCMeta
8 | from abc import abstractmethod
9 |
10 | from bayesCPD.utils.Modelutils import meancollapse
11 | from bayesCPD.utils.Modelutils import modecollapse
12 | from bayesCPD.utils.Modelutils import get_full_row_cython
13 |
14 | class BaseModel:
15 |
16 | __metaclass__ = ABCMeta
17 |
18 | def __init__(self, prior_params, cython=False, testing=False, mode='all',
19 | data=[], verbose='some'):
20 |
21 | self.name = 'Model'
22 | self.cython = cython
23 | self.testing = testing
24 | self.mode = mode
25 |
26 | mtypes = ['single', 'all', 'time_indep']
27 | if mode not in mtypes:
28 | raise Exception('Mode must be one of the following:', mtypes)
29 |
30 | self.verbose = verbose
31 | vtypes = ['none', 'some', 'lots']
32 | if verbose not in vtypes:
33 | raise Exception('Verbose must be one of the following:', vtypes)
34 |
35 | # prior and posterior parameters for model
36 | self.params = Parameters(mode, prior_params)
37 |
38 | # predictive probabilities, predictive means, etc
39 | self.changept = []
40 | #self.preds = {}
41 | #self.preds_reg = {}
42 | self.preds = []
43 | self.pred_means = []
44 | self.pred_vars = []
45 | self.pred_means_reg = []
46 |
47 | # benchmarking
48 | self.memory = []
49 | self.times = []
50 |
51 | @abstractmethod
52 | def generate_parameters(self, params=None, **kwargs):
53 | pass
54 |
55 | @abstractmethod
56 | def get_predprobs(self, datum, **kwargs):
57 | pass
58 |
59 | @abstractmethod
60 | def update_parameters(self, datum, **kwargs):
61 | pass
62 |
63 | @abstractmethod
64 | def update_others(self, datum, **kwargs):
65 | pass
66 |
67 | @abstractmethod
68 | def compute_expecations(self):
69 | pass
70 |
71 | @abstractmethod
72 | def plot_preds(self, ax, reg=True, scale=None, dim=-1):
73 | pass
74 |
75 |
76 | def load_data(self, data, cpts=[]):
77 | self.data = data
78 | self.cpts = cpts
79 | try:
80 | self.D = len(data[0])
81 | except TypeError:
82 | self.D = 1
83 |
84 | def generate_data(self, T, hazard, rate, params=None):
85 |
86 | ### if params is None, then generate from the prior
87 | if params == None:
88 | prior = self.params.prior_params
89 | else:
90 | prior = params
91 |
92 | # initial parameters
93 | self.generate_parameters(prior)
94 |
95 | ## Generate data without changepoints
96 | if self.mode == 'time_indep':
97 | if self.verbose == 'some' or self.verbose == 'all':
98 | print('Generating data w/o changepoints for %d timesteps.' % T)
99 | self.data = np.array([self.draw_value() for t in xrange(T)])
100 |
101 | ## Generate data with changepoints
102 | else:
103 | if self.mode == 'all':
104 | if self.verbose == 'some' or self.verbose == 'all':
105 | print('Generating data w/ changepoints for %d timesteps.' % T)
106 |
107 | data = []
108 | changept = []
109 | # set initial values
110 | curr_run = 0
111 |
112 | for t in xrange(T):
113 | # probability of a changepoint
114 | p = hazard(curr_run, rate=rate)
115 | if r.random() < p or t == 0:
116 | # generate new parameters
117 | self.generate_parameters(prior)
118 | # reset current run length
119 | curr_run = 0
120 | # save value of changept
121 | changept.append(t)
122 | else:
123 | curr_run += 1
124 | data.append(self.draw_value())
125 |
126 | self.changept = changept
127 |
128 | elif self.mode == 'single':
129 | # TODO: to be implemented
130 | pass
131 |
132 | else:
133 | pass
134 |
135 | self.data = np.array(data)
136 |
137 | if self.verbose == 'some' or self.verbose == 'all':
138 | print 'Changepoints: ', self.changept
139 |
140 | try:
141 | self.D = len(self.data[0])
142 | except TypeError:
143 | self.D = 1
144 |
145 | #@profile
146 | def inference(self, B=None, Q=None, rate=250, full=True,
147 | operation=meancollapse):
148 |
149 | if self.verbose == 'some' or self.verbose == 'all':
150 | print 'Performing %s inference for %s model' % (self.mode, self.name)
151 |
152 | ### for now let T be length of data
153 | try:
154 | if self.data.any() == False:
155 | raise Exception('Need to load or generate data')
156 | else:
157 | data = self.data
158 | T = len(self.data)
159 |
160 | # TODO: redo this
161 | except ValueError:
162 | if len(self.data.shape) <= 1:
163 | raise Exception('Need to load or generate data')
164 | else:
165 | data = self.data
166 | T = len(self.data)
167 |
168 | ## Do inference without changepoints
169 | if self.mode == 'time_indep':
170 |
171 | #predprobs = self.get_predprobs(data[0])
172 | for t in xrange(0, T):
173 | timeit1 = time.time()
174 | self.t = t
175 |
176 | if t % 100 == 0 and self.verbose == 'some':
177 | print 'Iteration ', t
178 |
179 | # reindexing data x_1, x_2, ... --> x_0, x_1, ...
180 | # so data[t] is actually the next obs instead of current
181 | sstats = self.update_parameters(data[t])
182 | self.update(sstats)
183 |
184 | if t != T-1:
185 | predprobs = self.get_predprobs(data[t+1])
186 | self.preds.append(np.log(predprobs.sum()))
187 |
188 | self.params.save_memory()
189 |
190 | timeit2 = time.time()
191 | self.times.append(timeit2-timeit1)
192 |
193 | self.preds = np.array(self.preds)
194 |
195 | print 'Mean Log Predictive prob', self.preds.mean()
196 |
197 | return
198 |
199 | ## Do inference with changepoints
200 | else:
201 | if self.mode == 'all':
202 |
203 | if B == None or Q == None:
204 | B = T+1; Q = T+1
205 |
206 | if Q < B - 1:
207 | raise Exception("Parameter error: requires Q >= B-1")
208 |
209 | # Initialize p(r_0 = 0) = 1
210 | R = [np.array([1.])]
211 | prevR = R[0]
212 |
213 | # tracks number of bins in each queue
214 | self.qitems = [1]
215 | self.sitems = [1]
216 | self.nqueues = len(self.qitems)
217 | self.t = 0
218 |
219 | # stuff for reconstructing matrix
220 | Rmat = []
221 |
222 | time1 = time.time()
223 |
224 | #pdb.set_trace()
225 |
226 | # compute predictive distribution
227 | predprobs = self.get_predprobs(data[0])
228 |
229 | for t in xrange(0, T):
230 | ### note on the indexing: the data is 0 indexed, where we
231 | ### are letting "prior" values be the index 0, so in the code
232 | ### we are going to go "backwards"
233 | obs = data[t]
234 | self.t = t
235 |
236 | if full:
237 | if Q >= T or Q == None:
238 | Rmat.append(np.array(prevR))
239 | else:
240 | Rmat.append(self.get_full(prevR, B, T))
241 |
242 | if t % 100 == 0 and self.verbose == 'all':
243 | print t
244 |
245 | timeit1 = time.time()
246 |
247 | self.qitems[0] += 1; self.sitems[0] += 1
248 |
249 | H = 1./rate #hazard(range(self.params.length), rate=rate)
250 |
251 | # p(r_{t+1} | x_{0:t})
252 | prevR = self.__compute_run_probs(prevR, predprobs, H)
253 | # update with x_t
254 | sstats = self.update_parameters(data[t])
255 | self.update(sstats)
256 |
257 | # collapse hypotheses and params
258 | self._collapse_sstats(B, Q, t, prevR, operation)
259 | prevR = self._collapse_runs(prevR, B, Q, operation)
260 |
261 | # update any other values, if necessary
262 | self.update_others(obs)
263 |
264 | timeit2 = time.time()
265 |
266 | self.times.append(timeit2-timeit1)
267 |
268 | if t != T-1:
269 | predprobs = self.get_predprobs(self.data[t+1])
270 | # save the log predictive probabilities
271 | self.preds.append(np.log((predprobs * prevR).sum()))
272 |
273 | self.make_pred(prevR)
274 | self.params.save_memory()
275 |
276 | # store run length posterior
277 | R.append(prevR)
278 |
279 |
280 | # reconstruct row
281 | if full:
282 | if Q >= T or Q == None:
283 | Rmat.append(np.array(prevR))
284 | else:
285 | Rmat.append(self.get_full(prevR, B, T-1))
286 |
287 | time2 = time.time()
288 |
289 | if self.verbose == 'some' or self.verbose == 'all':
290 | print 'Finished inference in %.3f seconds' % (time2-time1)
291 |
292 | self.Rmat = np.array(Rmat)
293 | self.preds = np.array(self.preds)
294 |
295 | if self.verbose == 'some' or self.verbose == 'all':
296 | print 'Mean Log Predictive Prob', self.preds.mean()
297 |
298 |
299 | elif self.mode == 'single':
300 | pass
301 | else:
302 | pass
303 |
304 |
305 | def plot_data(self, ax=None, show=False, scatter=False):
306 | # most basic plotting of data currently
307 | T = len(self.data)
308 |
309 | # this case we're generally doing changepoints too
310 | if ax != None:
311 | if scatter:
312 | ax.scatter(xrange(1, T+1), self.data, marker='x', color='gray')
313 | else:
314 | ax.plot(xrange(1, T+1), self.data, color='gray')
315 |
316 | if self.pred_means != []:
317 | self.plot_preds(ax)
318 | #pylab.plot(xrange(2, len(self.pred_means)+2), self.pred_means)
319 |
320 | # draw changepoint lines
321 | [pylab.axvline(point, linewidth=1, color='r', linestyle='dotted')
322 | for point in self.changept]
323 | else:
324 | pylab.clf()
325 | if scatter:
326 | pylab.scatter(xrange(1, len(self.data)+1), self.data, marker='x')
327 | else:
328 | pylab.plot(xrange(1, len(self.data)+1), self.data)
329 |
330 | if self.pred_means != []:
331 | pylab.plot(xrange(2, len(self.pred_means)+2), self.pred_means)
332 | for point in self.changept:
333 | pylab.axvline(point, linewidth=1, color='r', linestyle='dotted')
334 |
335 | pylab.xlim(0, len(self.data))
336 |
337 | if show:
338 | pylab.show()
339 |
340 |
341 | def plot_results(self, R, scatter=False, save=None, figsize=[],
342 | threshold=True, ymax=500):
343 |
344 | from matplotlib.colors import LogNorm
345 |
346 | pylab.clf()
347 |
348 | fig = pylab.figure(1)
349 | ax = fig.add_subplot(211)
350 |
351 | t = len(self.data); time = np.arange(len(self.data))
352 |
353 | self.plot_data(ax=ax, show=False, scatter=scatter)
354 |
355 | fig.add_subplot(212, aspect='auto')
356 |
357 | if len(R.shape) == 1:
358 | im = plot_R(R, len(R), fig=fig, thresh=10e-6)
359 |
360 | else:
361 | dat = R.T.copy()
362 | if threshold:
363 | dat[dat < 10e-6] = 0
364 |
365 | im = pylab.imshow(dat, cmap='gray_r', origin='lower',
366 | aspect='auto', norm=LogNorm())
367 |
368 | # draw changepoint lines
369 | [pylab.axvline(point, linewidth=1, color='r', linestyle='dotted')
370 | for point in self.changept]
371 |
372 | fig.subplots_adjust(right=0.8)
373 |
374 | # set limits for axes
375 | pylab.ylabel('Run Length')
376 | pylab.xlabel('Timesteps')
377 | pylab.ylim([0,ymax])
378 | pylab.xlim([0,t+1])
379 |
380 | cbar_ax = fig.add_axes([0.82, 0.15, 0.01, 0.3])
381 | fig.colorbar(im, cax=cbar_ax)
382 |
383 | if figsize != []:
384 | fig.set_size_inches(figsize)
385 |
386 | if save == None:
387 | pylab.show()
388 | else:
389 | pylab.savefig(save)
390 |
391 |
392 | def finalize(self):
393 | pass
394 |
395 | def update(self, sstats):
396 |
397 | if self.mode == 'time_indep':
398 | for name in sstats.keys():
399 | self.params.post_params[name] = sstats[name]
400 | else:
401 | for name in sstats.keys():
402 | self.params._add_param(name, sstats[name])
403 | #self.params.post_params[name] = sstats[name]
404 |
405 | def get_full(self, row, base, T, single=False):
406 |
407 | ### this only works if called in the main inference loop
408 |
409 | if self.mode == 'single':
410 |
411 | finalrow = []
412 | for k in xrange(self.K):
413 | inds = np.array(self.qitems).cumsum()
414 | inds = np.insert(inds, 0, 0)
415 | newrow = np.array([])
416 |
417 | for i in xrange(len(inds) - 1):
418 | start = inds[i]; end = inds[i+1]
419 | queue = row[k][start:end]
420 | for j in queue:
421 | newrow = np.append(newrow, np.repeat(j, base ** i)/
422 | float(base**i))
423 |
424 | try:
425 | assert newrow.size == self.t + 1
426 | except AssertionError:
427 | pdb.set_trace()
428 |
429 | # make sure this is a valid prob dist
430 | np.testing.assert_approx_equal(newrow.sum(), 1)
431 |
432 | # pad with zeros until T elements
433 | finalrow.append(np.append(newrow, np.zeros(T - self.t - 1)))
434 |
435 | return np.array(finalrow)
436 |
437 | else:
438 |
439 | inds = np.array(self.qitems).cumsum()
440 | inds = np.insert(inds, 0, 0)
441 |
442 | '''
443 | newrow = np.array([])
444 |
445 | for i in xrange(len(inds) - 1):
446 | start = inds[i]; end = inds[i+1]
447 | queue = row[start:end]
448 | for j in queue:
449 | newrow = np.append(newrow, np.repeat(j, base ** i)/
450 | float(base**i))
451 | '''
452 |
453 | newrow = get_full_row_cython(row, inds, base)
454 |
455 | if self.testing:
456 | assert newrow.size == self.t + 1
457 |
458 | # make sure this is a valid prob dist
459 | try:
460 | np.testing.assert_approx_equal(newrow.sum(), 1)
461 | except AssertionError:
462 | pdb.set_trace()
463 |
464 | # pad with zeros until T elements
465 | return np.append(newrow, np.zeros(T - self.t))
466 |
467 | @classmethod
468 | def __compute_run_probs(cls, prevR, predprobs, H):
469 | rt = np.zeros(len(prevR) + 1)
470 | preds = predprobs * prevR
471 | #preds = predprobs[:,0] * prevR
472 | rt[0] = (H * preds).sum()
473 |
474 | rt[1:] = (1 - H) * preds
475 | rt /= rt.sum()
476 | return rt
477 |
478 | def _collapse_sstats(self, base, qsize, t, prevR, operation):
479 |
480 | # iterate thru all queues
481 | nqueues = len(self.sitems)
482 | for i in xrange(nqueues):
483 | if self.sitems[i] > qsize:
484 | if self.verbose == 'all':
485 | print 't:%d , collapsing parameters' % t
486 | #print 'before length: %d' % len(self.muT)
487 | self.params.collapse_parameters(i, base, qsize, prevR,
488 | operation, self.sitems)
489 | #print 'after length: %d' % len(self.muT)
490 | self.sitems[i] -= base
491 | # count the value in the i+1 queue, create new queue if needed
492 | try:
493 | self.sitems[i+1] += 1
494 | except:
495 | self.sitems.append(1)
496 |
497 | def _collapse_runs(self, probs, base, qsize, operation):
498 | nqueues = len(self.qitems)
499 | for i in xrange(nqueues):
500 | if self.qitems[i] > qsize:
501 | if self.verbose == 'all':
502 | print 't:%d , collapsing run lengths' % self.t
503 | probs = _merge_first_B(probs, i, base, qsize,
504 | meta=self.qitems, operation=operation, args=probs)
505 |
506 | self.qitems[i] -= base
507 | try:
508 | self.qitems[i+1] += 1
509 | except:
510 | self.qitems.append(1)
511 |
512 | return probs
513 |
514 | # plots jagged array
515 | def plot_R(R, T, fig, thresh=10e-6):
516 | from matplotlib.colors import LogNorm
517 | norm = LogNorm(vmin=thresh, vmax=1.0)
518 |
519 | for t in xrange(T):
520 | L = R[t].size
521 | X = R[t].copy()
522 | X[R[t] < thresh] = 0
523 | im = pylab.scatter(t*np.ones(L), np.arange(L), c=X, cmap='gray_r', marker='+', norm=norm)
524 |
525 | pylab.xlim(0, T)
526 | pylab.ylim(0, T)
527 |
528 | return im
529 |
530 | ###############################################################################
531 |
532 | class Parameters(object):
533 |
534 | def __init__(self, mode, prior_params):
535 |
536 | self.prior_params = {}
537 | self.post_params = {}
538 | self.run_probs = []
539 | self.params_length = 0
540 |
541 | self.__add_init_parameters(prior_params)
542 |
543 | if mode != 'time_indep':
544 | self.shape_parameters()
545 |
546 | def __add_init_parameters(self, prior_params):
547 | """
548 | Takes a dictionary of prior parameters and their initial values
549 | Initializes posterior parameter values to the prior paramter values
550 |
551 | Input: a dictionary
552 | key: string
553 | value: initial value, could be float or vector
554 | """
555 |
556 | self.prior_params = prior_params.copy()
557 | self.post_params = {}
558 |
559 | for param in prior_params.keys():
560 | self.post_params[param] = prior_params[param]
561 |
562 | # if changepoint detection mode, we want to reshape these
563 | ### TODO ###
564 |
565 | def shape_parameters(self):
566 | for name in self.post_params.keys():
567 | param = np.array(self.post_params[name])
568 | # parameter is an int -> 1D array
569 | if len(param.shape) == 0:
570 | self.post_params[name] = np.array([param])
571 | #self.post_params[name] = np.array([param])[None]
572 | # parameter is an array -> 1 x ( . ) array
573 | else:
574 | self.post_params[name] = param[None]
575 |
576 | def collapse_parameters(self, t, base, qsize, runprobs, operation, sitems):
577 |
578 | for name in self.post_params.keys():
579 | param = self.post_params[name]
580 | self.post_params[name] = _merge_first_B(param, t, base, qsize,
581 | sitems, operation, args=runprobs)
582 |
583 |
584 | def get_full(self):
585 | pass
586 |
587 | def save_memory(self):
588 | pass
589 |
590 | def _add_param(self, name, sstat):
591 |
592 | prior = np.array(self.prior_params[name])
593 |
594 | if len(sstat.shape) == 1:
595 | self.post_params[name] = np.append(prior, sstat)
596 | else:
597 | shape = sstat.shape
598 | T = shape[0]; rest = shape[1:]
599 | newshape = (T+1,) + rest
600 | #print newshape
601 |
602 | assert len(shape) == len(newshape)
603 |
604 | self.post_params[name] = np.reshape(np.append(prior, sstat), newshape)
605 |
606 |
607 | def _merge_first_B(probs, i, base, qsize, meta, operation, args=None):
608 | """
609 | merges first B and appends to queue i+1
610 | creates the queue if i+1 does not exist
611 | """
612 |
613 | # get the index in probs for queue i
614 | start = sum(meta[:i])
615 | # initialize new probs list
616 | shape = list(probs.shape)
617 | newprobs = np.zeros(([shape[0]-base+1] + shape[1:]))
618 |
619 | # copy over previous queues
620 | newprobs[:start] = probs[:start]
621 |
622 | # copy over non-merged values in current queue
623 | curr_queue = probs[start:start+qsize+1]
624 | num_left = len(curr_queue[:-base])
625 | assert num_left == qsize+1-base
626 | newprobs[start:start+num_left] = curr_queue[:-base]
627 |
628 | # merge "first B" values in current queue and put it in "queue i+1"
629 | ## assumes that args = prevR (used for sstat collapsing)
630 | if args != None:
631 | newprobs[start+num_left] = operation(args[-base:], curr_queue[-base:])
632 | # used for run length collapsing
633 | else:
634 | newprobs[start+num_left] = operation(curr_queue[-base:])
635 | #newprobs[start+num_left] = operation(probs[start:start+qsize+1][-base:])
636 |
637 | # copy over remaining values
638 | newprobs[start+num_left+1:] = probs[start+qsize+1:]
639 |
640 | return newprobs
641 |
642 |
643 |
644 |
645 | ###############################################################################
646 | # General types of models that extend BaseModel
647 | ###############################################################################
648 |
649 | class ConjugateModel(BaseModel):
650 | """
651 | Models with Exponential family likelihoods and conjugate priors.
652 | """
653 |
654 | __metaclass__ = ABCMeta
655 |
656 | @abstractmethod
657 | def generate_parameters():
658 | pass
659 |
660 | @abstractmethod
661 | def get_predprobs(self):
662 | pass
663 |
664 | @abstractmethod
665 | def update_parameters(self):
666 | pass
667 |
668 | def update_others(self, obs):
669 | pass
670 |
671 | @abstractmethod
672 | def compute_expecations():
673 | pass
674 |
675 |
676 | class LatentVariableModel(BaseModel):
677 | """
678 | Models with latent variables, assumes the use of online VBEM algorithm.
679 | """
680 | __metaclass__ = ABCMeta
681 |
682 | @abstractmethod
683 | def generate_parameters():
684 | pass
685 |
686 | @abstractmethod
687 | def get_predprobs(self):
688 | self.E_step()
689 |
690 | def update_parameters(self):
691 | self.M_step()
692 |
693 | @abstractmethod
694 | def update_others(self):
695 | self.compute_expectations()
696 | pass
697 |
698 | @abstractmethod
699 | def compute_expecations():
700 | pass
701 |
702 | @abstractmethod
703 | def E_step():
704 | pass
705 |
706 | @abstractmethod
707 | def M_step():
708 | pass
709 |
710 |
--------------------------------------------------------------------------------
/notebooks/normal_example.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "metadata": {
3 | "name": "",
4 | "signature": "sha256:c905aea6036551ea828bc333188c6ece4342ad64d866362a645e97641c4f3d7b"
5 | },
6 | "nbformat": 3,
7 | "nbformat_minor": 0,
8 | "worksheets": [
9 | {
10 | "cells": [
11 | {
12 | "cell_type": "code",
13 | "collapsed": false,
14 | "input": [
15 | "# ipython magic\n",
16 | "%matplotlib inline\n",
17 | "%load_ext autoreload\n",
18 | "%autoreload 2"
19 | ],
20 | "language": "python",
21 | "metadata": {},
22 | "outputs": [],
23 | "prompt_number": 1
24 | },
25 | {
26 | "cell_type": "code",
27 | "collapsed": false,
28 | "input": [
29 | "# Normal-Normal model\n",
30 | "from bayesCPD.models.normal import NN\n",
31 | "# constant Hazard function\n",
32 | "from bayesCPD.utils.Modelutils import constant_hazard"
33 | ],
34 | "language": "python",
35 | "metadata": {},
36 | "outputs": [],
37 | "prompt_number": 2
38 | },
39 | {
40 | "cell_type": "code",
41 | "collapsed": false,
42 | "input": [
43 | "# initialize prior hyperparameters\n",
44 | "prior = {'mu': 0, 'tau': 1}\n",
45 | "\n",
46 | "# initialize model: Normal likelihood with known precision (ivar), Normal conjugate prior on the mean\n",
47 | "model = NN(prior, ivar=1)"
48 | ],
49 | "language": "python",
50 | "metadata": {},
51 | "outputs": [],
52 | "prompt_number": 3
53 | },
54 | {
55 | "cell_type": "code",
56 | "collapsed": false,
57 | "input": [
58 | "# generate 1000 datapoints from the prior\n",
59 | "model.generate_data(T=1000, hazard=constant_hazard, rate=250)\n",
60 | "model.plot_data()"
61 | ],
62 | "language": "python",
63 | "metadata": {},
64 | "outputs": [
65 | {
66 | "output_type": "stream",
67 | "stream": "stdout",
68 | "text": [
69 | "Generating data w/ changepoints for 1000 timesteps.\n",
70 | "Changepoints: [0, 83, 378, 574, 643, 846, 972]\n"
71 | ]
72 | },
73 | {
74 | "metadata": {},
75 | "output_type": "display_data",
76 | "png": "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\nrkJggg==\n",
77 | "text": [
78 | ""
79 | ]
80 | }
81 | ],
82 | "prompt_number": 4
83 | },
84 | {
85 | "cell_type": "code",
86 | "collapsed": false,
87 | "input": [
88 | "# run online changepoint detection\n",
89 | "model.inference(rate=250)"
90 | ],
91 | "language": "python",
92 | "metadata": {},
93 | "outputs": [
94 | {
95 | "output_type": "stream",
96 | "stream": "stdout",
97 | "text": [
98 | "Performing all inference for Normal Conjugate Model, Known Precision model\n",
99 | "Finished inference in 0.366 seconds"
100 | ]
101 | },
102 | {
103 | "output_type": "stream",
104 | "stream": "stdout",
105 | "text": [
106 | "\n",
107 | "Mean Log Predictive Prob -1.49406598082\n"
108 | ]
109 | }
110 | ],
111 | "prompt_number": 5
112 | },
113 | {
114 | "cell_type": "code",
115 | "collapsed": false,
116 | "input": [
117 | "# plot result\n",
118 | "model.plot_results(model.Rmat)"
119 | ],
120 | "language": "python",
121 | "metadata": {},
122 | "outputs": [
123 | {
124 | "metadata": {},
125 | "output_type": "display_data",
126 | "png": "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\n0tLSwtKlS03hQDAYNNQVVMppjybHIJFkOp1mfHzcyGSn02mee+450uk0n/vc57j22muNJpT8fkop\ngv/zf5oFxuroHC9mq72jKkNUXgOWK6UGlFKf01oXARmisgt4TJ+BISqnGic1HxdO82B04I/+6I+4\n+OKLT6q0zopcLsd7771npG3D4TCPP/44fX193HvvvSYMFvpEvETh6yUZJzebVdtGElxyg6VSKZN4\nks+0dt+m02kz5KOmpsbcuFZvTb7LqkI5s6RPuF95DQ5V/1jpITiUdBUKxe12E4/HGR0dxeVy0d/f\nbxaouro648HV19cTjUZJJBJGjlhKWWtra4lEImitzblsbGzE6/Wac33ttdca6saa+JYKJqnAkbI9\n8Qit83obGhpQSjExMWFG9rlcLlpaWsyULMkjiGcrv42cJzhkSI6Evr4+oFIWuHv3bpqamhgdHSW1\nZAmLFy+ms7OTkZERwuGwmW28Zs0aAoGAuT7k88XoWj176/+l0Up+l1gsZn5vqUSS/In8/pJHks+Q\n4yqVSsTj8WljE4XWc7vd07z7TCZDNBqlvr4eh6MyShEORalaV1ROly1bRlNTE36/n8nJSRobGw31\nJ/siieW6urpp51H2WyLQQqFAd3c3b731Frt378Zut7NlyxZuuOEGVq5caa6r2traaY6MLIoS8UHF\neJ/IYPTjqN45I0NUTkh757i+4P0zH094Pu7U9qetTv/b3/42oVCIyy67jJUrV7J48WLzWiqVOiGa\nZ2JiApvNRigUIhqN8stf/pLHHnuMyy+/nBtuuMHw2ZK0EkMrxn5mDb21BFI8dzVVjjk5OWna5KW6\nRAytGLhsNmuEw6zGHg5JLMj3WL1Gq5djracHDFUkBlG8P7mBpCJE6BHAeMIyRu/CCy8kGo2akYMN\nDQ1G86a1tZVyuczBgwdxu91metL+/ft5/PHHzeCPSCRCX18fH/vYxwxvLgPKheqQ54ROKJfLZjCM\nqI3KItHY2EgsFmNiYoKRkRHK5TKLFi0y0ZGcd0nsrlq1yiiOztTMt9IrMz3GwcFBQz3Iot/d3W2o\njrGxMYaGhowHfN1119HW1kZNTc00714S0vJdM//K5fK0hjun00k4HDZJVIl+ZB/lGpEFZObnSk5D\nyinlc61VWLLIRiIRI78tzohcY9J97nA4aG5u5o477mB8fBy3282CBQuYnJwkHo+zatUq7HY7yWRy\n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\nGLW1tcyZM8dHukgZ6R40htpcFDxwzUsvsX3t2rzn9fT0cOjQIb9pKymqvLzclxZvNocAAA7BSURB\nVHqWQgv5f+UaqOiePi/8jnVPIWUm40Gx9OLONR4K19T3I3+Pc86fTmRt63sNHeBwIidg5dNP88TF\nF/vXNzU1MTg4yLXXXsv555/va/qHa1vRR6KV5ITVfasshJ6vNaTvWw101Fhn8uTJPnCj5Gtfo/ir\nX2XLli3s3LmT4eFhHnnkEcrLy+nq6vKRfu8xzl7nrNHAWzkt3EmaBqxatYrh4WHuvvtun4ikY20Y\nFbNz506mTZvm09nFM8IJRWdm3lvf09PDb37zGxYsWMBjjz1GJpPhnnvu8TSQko1EHYiCUGZraJEB\nnmcOLSpx7qIxdE0LLpvN0tjYyAUXXOA5VC3goaEhMpmMD+MUFTVz5sw8ZS+KqKenx1MwOq5rrEJn\nnhaCeM1jx47l1RhXe0Apl2w2699Lm5C4dziRxKPNrrOzkw0bNjBjxgxmzZrF/v37mTp1KqtWraKj\no8Pzz8qYldIN7y+Xy/kxCKkOfQddXV10d3f7Cp7qcxo6LsUZhzkPYQXKMCqos7OTxsZGZs2aRS6X\n87kB2vwqKys91z179mxvEarr05QpU7j66qt9hFBjYyPLli3zClVKWycYKSe1KdSmKsokpJU0X51z\nlJeXexpT1S8lh8Yvm83mhU4CXvnqeTrhhNa95pLmoHJOFIqp05AMmFwuR2NjIytWrPBBBxo3fa7e\nLzzZqHViU1MTlZWVvPrqq1x++eUsXbqUqqoq/52cLKoszBwPTxCSS+MYrnc5pSWn3l+nTGUyP/PM\nM3R0dLBjxw62bdvG2rVr/bx56KGHzoje+y2YWJ2zTgLvtHBJr9zHSHrn5mHBggVMmjSJT37yk55G\nMDPv6BQvt2HDBqqqqrzzTjynLBwd5cU/Z7NZtt18M21tbaxbt47CwkJuu+02f7zWQspkMp4LVKha\nGJ8eLiYtVC0Yhf8pskX/U6KVshubmpooKyvzTkO9XpULlYYuDr2ystLLpmSu1tZW//mikkTFjPxs\nLYgjR46QzWZ9g5Zjx475Sp6ygMWRa3GYmc9wlfIKeepdu3bxndmzOe+88ygoKKCxsZErr7yS2tpa\nSkpK2L17t+eDFQIaRg7JElTsvTYt1RGSMt+1axctLS1UV1ezZMkSz/1qc9i7d6/PClW3KPH3Oglo\n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\n",
127 | "text": [
128 | ""
129 | ]
130 | }
131 | ],
132 | "prompt_number": 6
133 | },
134 | {
135 | "cell_type": "code",
136 | "collapsed": false,
137 | "input": [],
138 | "language": "python",
139 | "metadata": {},
140 | "outputs": []
141 | }
142 | ],
143 | "metadata": {}
144 | }
145 | ]
146 | }
--------------------------------------------------------------------------------