I can see application of these packages to my work. <br>
Thank you, Ed.<br>
<br>
Hugo Gamboa<br>
<br><br><div><span class="gmail_quote">On 1/18/06, <b class="gmail_sendername">Ed Schofield</b> &lt;<a href="mailto:schofield@ftw.at">schofield@ftw.at</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi all,<br><br>I recently moved two new packages, maxent and montecarlo, from the<br>sandbox into the main SciPy tree.&nbsp;&nbsp;I've now moved them back to the<br>sandbox pending further discussion.&nbsp;&nbsp;I'll introduce them here and ask
<br>for feedback on whether they should be included in the main tree.<br><br>The maxent package is for fitting maximum entropy models subject to<br>expectation constraints.&nbsp;&nbsp;Maximum entropy models represent the 'least<br>
biased' models subject to given constraints.&nbsp;&nbsp;When the constraints are<br>on the expectations of functionals -- the usual formulation -- maximum<br>entropy models take the form of a generalized exponential family.&nbsp;&nbsp;A<br>normal distribution, for example, is a maximum entropy distribution
<br>subject to mean and variance constraints.<br><br>The maxent package contains one main module and one module with utility<br>functions.&nbsp;&nbsp;Both are entirely in Python.&nbsp;&nbsp;(I have now removed the F2Py<br>dependency.)&nbsp;&nbsp;The main module supports fitting models on either small or
<br>large sample spaces, where 'large' means continuous or otherwise too<br>large to iterate over.&nbsp;&nbsp;Maxent models on 'small' sample spaces are<br>common in natural language processing; models on 'large' sample spaces<br>are useful for channel modelling in mobile communications, spectrum and
<br>chirp analysis, and (I believe) fluid turbulence.&nbsp;&nbsp;Some simple examples<br>are in the examples/ directory.&nbsp;&nbsp;The simplest use is to define a list of<br>functions f, an array of desired expectations K, and a sample space, and
<br>use the commands<br><br>&gt;&gt;&gt; model = maxent.model(f, samplespace)<br>&gt;&gt;&gt; model.fit(K)<br><br>You can then retrieve the fitted parameters directly or analyze the<br>model in other ways.<br><br>I've been developing the maxent algorithms and code for about 4 years.
<br>The code is very well commented and should be straightforward to maintain.<br><br><br>The montecarlo package currently does only one thing.&nbsp;&nbsp;It generates<br>discrete variates from a given distribution.&nbsp;&nbsp;It does this FAST.&nbsp;&nbsp;On my
<br>P4 it generates over 10^7 variates per second, even for a sample space<br>with 10^6 elements.&nbsp;&nbsp;The algorithm is the compact 5-table lookup sampler<br>of Marsaglia.&nbsp;&nbsp;The main module, called 'intsampler', is written in C.
<br>There is also a simple Python wrapper class around this called<br>'dictsampler' that provides a nicer interface, allowing sampling from a<br>distribution with arbitrary hashable objects<br>(e.g. strings) as labels instead of {0,1,2,...}.&nbsp;&nbsp;dictsampler has
<br>slightly more overhead than intsampler, but is also very fast (around<br>10^6 per second for me with a sample space of 10^6 elements labelled<br>with strings).&nbsp;&nbsp;An example of using it to sample from this discrete<br>distribution:
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'a'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'b'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'c'<br>&nbsp;&nbsp;&nbsp;&nbsp;p(x)&nbsp;&nbsp;&nbsp;&nbsp;10/180&nbsp;&nbsp;&nbsp;&nbsp;150/180&nbsp;&nbsp; 20/180<br><br>is:<br><br>&gt;&gt;&gt; table = {'a':10, 'b':150, 'c':20}<br>&gt;&gt;&gt; sampler = dictsampler(table)<br>&gt;&gt;&gt; sampler.sample(10**4)<br>array([b, b, a, ..., b, b, c], dtype=object)
<br><br>The montecarlo package is very small (and not nearly as impressive as<br>Christopher Fonnesbeck's PyMC package), but the functionality that is<br>there would be an efficient foundation for many discrete Monte Carlo
<br>algorithms.<br><br>I'm aware of the build issue Travis Brady reported with MinGW not<br>defining lrand48().&nbsp;&nbsp;I can't remember why I used this, but I'll adapt it<br>to use lrand() instead and report back.<br><br><br>Would these packages be useful?&nbsp;&nbsp;Are there any objections to including them?
<br><br><br>-- Ed<br><br><br><br><br>_______________________________________________<br>Scipy-dev mailing list<br><a href="mailto:Scipy-dev@scipy.net">Scipy-dev@scipy.net</a><br><a href="http://www.scipy.net/mailman/listinfo/scipy-dev">
http://www.scipy.net/mailman/listinfo/scipy-dev</a><br></blockquote></div><br>