Help on class understanding in pymc code
Robert
rxjwg98 at gmail.com
Sun Dec 13 20:45:53 EST 2015
On Sunday, December 13, 2015 at 8:10:25 PM UTC-5, Peter Otten wrote:
> Robert wrote:
>
> > Hi,
> >
> > I follow code example at link:
> >
> > https://users.obs.carnegiescience.edu/cburns/ipynbs/PyMC.html
> >
> >
> > There is the following code line:
> >
> > sampler = pymc.MCMC([alpha,betax,betay,eps,model,tau,z_obs,x_true,y_true])
> >
> >
> > I want to know the detail of pymc.MCMC, then I get help content of it
> > with:
> >
> > /////////////
> > help(pymc.MCMC)
> > Help on class MCMC in module pymc.MCMC:
> >
> > class MCMC(pymc.Model.Sampler)
> > | This class fits probability models using Markov Chain Monte Carlo.
> > | Each stochastic variable is assigned a StepMethod object, which makes
> > | it take a single MCMC step conditional on the rest of the model. These
> > | step methods are called in turn.
> > |
> > | >>> A = MCMC(input, db, verbose=0)
> > |
> > \\\\\\\\\\\\\\\\\\
> >
> >
> > help('pymc.Model.Sampler')
> > no Python documentation found for 'pymc.Model.Sampler'
> >
> >
> > help('pymc.Model')
> > Help on class Model in pymc:
> >
> > pymc.Model = class Model(pymc.Container.ObjectContainer)
> > | The base class for all objects that fit probability models. Model is
> > | initialized with:
> > |
> > | >>> A = Model(input, verbose=0)
> > |
> > | :Parameters:
> > | - input : module, list, tuple, dictionary, set, object or nothing.
> > | Model definition, in terms of Stochastics, Deterministics,
> > | Potentials and Containers. If nothing, all nodes are collected
> > | from the base namespace.
> > |
> > | Attributes:
> > | - deterministics
> > | - stochastics (with observed=False)
> > | - data (stochastic variables with observed=True)
> > | - variables
> > | - potentials
> > | - containers
> > | - nodes
> > | - all_objects
> > | - status: Not useful for the Model base class, but may be used by
> > | subclasses.
> > |
> > | The following attributes only exist after the appropriate method is
> > | called:
> > | - moral_neighbors: The edges of the moralized graph. A dictionary,
> > | keyed by stochastic variable,
> > | whose values are sets of stochastic variables. Edges exist between
> > | the key variable and all variables in the value. Created by method
> > | _moralize.
> > | - extended_children: The extended children of self's stochastic
> > | variables. See the docstring of
> > | extend_children. This is a dictionary keyed by stochastic
> > | variable.
> > | - generations: A list of sets of stochastic variables. The members
> > | of each element only have parents in
> > | previous elements. Created by method find_generations.
> > |
> > | Methods:
> > | - sample_model_likelihood(iter): Generate and return iter samples
> > | of p(data and potentials|model).
> > | Can be used to generate Bayes' factors.
> > |
> > | :SeeAlso: Sampler, MAP, NormalApproximation, weight, Container, graph.
> > |
> > | Method resolution order:
> > | Model
> > | pymc.Container.ObjectContainer
> > | pymc.six.NewBase
> > | pymc.Node.ContainerBase
> > | __builtin__.object
> > |
> > | Methods defined here:
> > |
> > | __init__(self, input=None, name=None, verbose=-1)
> > | Initialize a Model instance.
> > |
> > | :Parameters:
> > | - input : module, list, tuple, dictionary, set, object or
> > | nothing.
> > | Model definition, in terms of Stochastics, Deterministics,
> > | Potentials and Containers. If nothing, all nodes are
> > | collected from the base namespace.
> > |
> > | draw_from_prior(self)
> > | Sets all variables to random values drawn from joint 'prior',
> > | meaning contributions of data and potentials to the joint
> > | distribution are not considered.
> > |
> > | get_node(self, node_name)
> > | Retrieve node with passed name
> > |
> > | seed(self)
> > | Seed new initial values for the stochastics.
> > |
> > | ----------------------------------------------------------------------
> > | Data descriptors defined here:
> > |
> > | generations
> > |
> > | ----------------------------------------------------------------------
> > | Data and other attributes defined here:
> > |
> > | __slotnames__ = []
> > |
> > | register = False
> > |
> > | ----------------------------------------------------------------------
> > | Methods inherited from pymc.Container.ObjectContainer:
> > |
> > | replace(self, item, new_container, key)
> > |
> > | ----------------------------------------------------------------------
> > | Data descriptors inherited from pymc.Container.ObjectContainer:
> > |
> > | value
> > | A copy of self, with all variables replaced by their values.
> > |
> > | ----------------------------------------------------------------------
> > | Methods inherited from pymc.Node.ContainerBase:
> > |
> > | assimilate(self, new_container)
> > |
> > | ----------------------------------------------------------------------
> > | Data descriptors inherited from pymc.Node.ContainerBase:
> > |
> > | __dict__
> > | dictionary for instance variables (if defined)
> > |
> > | __weakref__
> > | list of weak references to the object (if defined)
> > |
> > | logp
> > | The summed log-probability of all stochastic variables (data
> > | or otherwise) and factor potentials in self.
> > |
> > | ----------------------------------------------------------------------
> > | Data and other attributes inherited from pymc.Node.ContainerBase:
> > |
> > | change_methods = []
> > |
> > | containing_classes = []
> > ---------
> >
> >
> > Now, I have puzzles on the class constructor input parameter:
> > [alpha,betax,betay,eps,model,tau,z_obs,x_true,y_true]
> >
> > 1. 'class MCMC(pymc.Model.Sampler)' says its inheritance is from
> > 'pymc.Model.Sampler'
> >
> > 2. When I try to get help on 'pymc.Model.Sampler', it says:
> > 'no Python documentation found for 'pymc.Model.Sampler'
> >
> > 3. When I continue to catch help on 'pymc.Model.Sampler', I don't see
> > content mentions 'Sampler'. This complete help message is shown above.
> >
> > So, what is 'pymc.Model.Sampler'?
>
> Unfortunately there is a module pymc.Model and a class pymc.Model.Model, and
> in pymc.__init__.py there is code that overwrites the module with the class.
> Therefore when you write
>
> pymc.Model
>
> you get
>
> pymc.Model.Model
>
> as you can see when you type
>
> >>> import pymc
> >>> pymc.Model
> <class 'pymc.Model.Model'>
>
> To get around this bad naming use
>
> >>> from pymc.Model import Sampler
> >>> help(Sampler)
Thanks. Your answer does solve the problem, but I cannot follow your words.
When you run below code, what is 'pymc.Model'?
>>> import pymc
>>> pymc.Model
<class 'pymc.Model.Model'>
When I run:
aaa=pymc.Model
type(aaa)
Out[160]: pymc.Node.ContainerMeta
type(pymc.Model)
Out[161]: pymc.Node.ContainerMeta
I see that it is not '<class 'pymc.Model.Model'>'.
Thanks again.
More information about the Python-list
mailing list