I should add: if anyone has thoughts about the design, I'm interested
to get your input. Easier to redesign things now, before more code is
written.

- James

On Tue, Feb 19, 2013 at 5:36 PM, James Bergstra
<james.bergs...@gmail.com> wrote:
> Further to this: I started a project on github to look at how to
> combine hyperopt with sklearn.
> https://github.com/jaberg/hyperopt-sklearn
>
> I've only wrapped on algorithm so far: Perceptron
> https://github.com/jaberg/hyperopt-sklearn/blob/master/hpsklearn/perceptron.py
>
> My idea is that little files like perceptron.py would encode
> (a) domain expertise about what values make sense for a particular
> hyper-parameter (see the `search_space()` function and
> (b) a sklearn-style fit/predict interface that encapsulates search
> over those hyper-parameters (see `AutoPerceptron`)
>
> I just wrote it up today and I've only tried it on one data set, but
> at least on Iris it improves the default Perceptron's performance to
> 85% accuracy from 70%. Better than nothing! Of course it takes 100
> times as long when hyperopt is run serially, but .05 seconds and 5
> seconds are both pretty quick. (And who would have thought that the
> Perceptron would have 8 hyper-parameters??)
>
> I'm not planning to do any more work on this in the very short term,
> so if anyone is curious to adapt the Perceptron example to other
> algorithms, send PRs :)
>
> - James
>
> On Mon, Feb 11, 2013 at 4:10 PM, James Bergstra
> <james.bergs...@gmail.com> wrote:
>> Interesting to see this thread revived! FYI I've made hyperopt a lot
>> friendlier since that original posting.
>>
>> http://jaberg.github.com/hyperopt/
>>
>> pip install hyperopt
>>
>> 1. It has docs.
>> 2. The minimization interface is based on an fmin() function, that
>> should be pretty accessible.
>> 3. It can be installed straight from pypi
>> 4. It just depends on numpy, scipy, and networkx. (optional pymongo and nose)
>>
>> Adding new algorithms to it (SMBO based on GPs and regression trees)
>> is work in progress. The current non-trivial algorithm that's in there
>> (TPE) is probably relatively good for high-dimensional spaces, but for
>> lower-dimensional search spaces I think these other algos might be
>> more efficient. I'll keep the list posted on how that comes along (or
>> feel free to get in touch if you'd like to help out.)
>>
>> - James
>>
>> On Tue, Dec 6, 2011 at 10:36 AM, James Bergstra
>> <james.bergs...@gmail.com> wrote:
>>> On Mon, Dec 5, 2011 at 4:38 PM, Alexandre Passos <alexandre...@gmail.com> 
>>> wrote:
>>>> On Mon, Dec 5, 2011 at 16:26, James Bergstra <james.bergs...@gmail.com> 
>>>> wrote:
>>>>>
>>>>> This is definitely a good idea. I think randomly sampling is still
>>>>> useful though. It is not hard to get into settings where the grid is
>>>>> in theory very large and the user has a budget that is a tiny fraction
>>>>> of the full grid.
>>>>
>>>> I'd like to implement this, but I'm stuck on a nice way of specifying
>>>> distributions over each axis (i.e., sometimes you want to sample
>>>> across orders of magnitude (say, 0.001, 0.01, 0.1, 1, etc), sometimes
>>>> you want to sample uniformly (0.1, 0.2, 0.3, 0.4 ...)) that is obvious
>>>> and readable and flexible.
>>>
>>> This is essentially why the algorithms in my "hyperopt" project [1]
>>> are implemented as they are. They work for a variety of kinds of
>>> distributions (uniform, log-uniform, normal, log-normal, randint),
>>> including what I call "conditional" ones. For example, suppose you're
>>> trying to optimize all the elements of a learning pipeline, and even
>>> the choice of elements.  You only want to pick the PCA pre-processing
>>> parameters *if* you're actually doing PCA, because otherwise your
>>> parameter optimization algorithm might attribute the score (result /
>>> performance) to the PCA parameter choices that you know very well were
>>> irrelevant.
>>>
>>> hyperopt implementations are relatively tricky, but at this point I
>>> don't think they could be done in a straightforward simple way that
>>> would make them scikit-learn compatible.  I think scikit-learn users
>>> would be better served by specific hand-written hyper-parameter
>>> optimizers for certain specific, particularly useful pipelines.  Other
>>> customized pipelines can use grid search, random search, manual
>>> search, or the docs could maybe refer them to hyperopt, as it matures.
>>>
>>> - James
>>>
>>> [1]  https://github.com/jaberg/hyperopt

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Scikit-learn-general mailing list
Scikit-learn-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/scikit-learn-general

Reply via email to