From 802743799e6f69c79673aebba534409b9ae161e8 Mon Sep 17 00:00:00 2001 From: Josh Attenberg Date: Sat, 21 Jul 2018 14:42:31 +0000 Subject: [PATCH] adding sampling functionality to linearregression model --- CHANGELOG.md | 4 ++++ docs/api/modules.rst | 4 ++-- docs/api/pymc3_models.models.rst | 5 ++++- docs/api/pymc3_models.rst | 29 +++++++++++++++++++++++++ pymc3_models/models/LinearRegression.py | 25 +++++++++++++++++---- 5 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 docs/api/pymc3_models.rst diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c629ca..524ca0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). +## [1.1.4] - 2018-07-21 +### Added +- sample method for LinearRegression model + ## [1.1.3] - 2018-05-25 ### Fixed - HLR fit method sets shared vars if no minibatch_size given diff --git a/docs/api/modules.rst b/docs/api/modules.rst index 7dc61fa..11f78b6 100644 --- a/docs/api/modules.rst +++ b/docs/api/modules.rst @@ -1,7 +1,7 @@ -api +pymc3_models ============ .. toctree:: :maxdepth: 4 - pymc3_models.models + pymc3_models diff --git a/docs/api/pymc3_models.models.rst b/docs/api/pymc3_models.models.rst index 6ff7b45..6ec730b 100644 --- a/docs/api/pymc3_models.models.rst +++ b/docs/api/pymc3_models.models.rst @@ -1,6 +1,9 @@ -models +pymc3\_models\.models package ============================= +Submodules +---------- + pymc3\_models\.models\.HierarchicalLogisticRegression module ------------------------------------------------------------ diff --git a/docs/api/pymc3_models.rst b/docs/api/pymc3_models.rst new file mode 100644 index 0000000..4e32c1c --- /dev/null +++ b/docs/api/pymc3_models.rst @@ -0,0 +1,29 @@ +pymc3\_models package +===================== + +Subpackages +----------- + +.. toctree:: + + pymc3_models.models + +Submodules +---------- + +pymc3\_models\.exc module +------------------------- + +.. automodule:: pymc3_models.exc + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pymc3_models + :members: + :undoc-members: + :show-inheritance: diff --git a/pymc3_models/models/LinearRegression.py b/pymc3_models/models/LinearRegression.py index 86636b9..533f568 100644 --- a/pymc3_models/models/LinearRegression.py +++ b/pymc3_models/models/LinearRegression.py @@ -93,17 +93,17 @@ def fit(self, X, y, inference_type='advi', minibatch_size=None, inference_args=N return self - def predict(self, X, return_std=False): + + def sample(self, X, samples=2000): """ - Predicts values of new data with a trained Linear Regression model + samples the conditional posterior estimates Parameters ---------- X : numpy array, shape [n_samples, n_features] - return_std : Boolean flag of whether to return standard deviations with mean values. Defaults to False. + samples : number of draws to make for each point """ - if self.trace is None: raise PyMC3ModelsError('Run fit on the model before predict.') @@ -116,6 +116,23 @@ def predict(self, X, return_std=False): ppc = pm.sample_ppc(self.trace, model=self.cached_model, samples=2000) + return ppc + + def predict(self, X, return_std=False, samples=2000): + """ + Predicts values of new data with a trained Linear Regression model + + Parameters + ---------- + X : numpy array, shape [n_samples, n_features] + + return_std : Boolean flag of whether to return standard deviations with mean values. Defaults to False. + + samples: numberof draws to make for each input + """ + + ppc = self.sample(X, samples) + if return_std: return ppc['y'].mean(axis=0), ppc['y'].std(axis=0) else: