2) I wrote pebl before I knew exactly how I would be using it for my
thesis work.. and since my projects haven't used the built in
learners, I haven't spent much time improving them. Greedy and
Simulated Annealing, for example, depend crucially on the config
parameters used but I haven't made any effort to guess ideal
parameters given a dataset. Other learners would be great but I'm not
sure if I'll be able to devote much time on them. I'm finishing up my
dissertation and I'm not sure if my future work will use pebl.
3) Generating the "true" consensus network requires the full
posterior. Because we can't do that, we approximate by sampling the
posterior which is what the learners do. The "bad" networks don't
really mess things up because the probability for each edge in the
consensus network is a sum of the normalized probabilities of networks
containing the edge. The bad networks have low probability and have
little effect on the final edge probabilities although keeping lots of
low-probability networks does eat up memory. Each learner keeps the
top N networks found during the search. N can be changed via the
'result.size' config param. I think the ideal search for building
consensus network would be MCMC. Pebl doesn't provide that but
simulated annealing with a very high starting temperature should
approximate it well.
Thanks,
Abhik
Thank you for the Netica exporter. This is something I will use, and
could potentially assist with. Alas, I have a hard time making time.
What are the key references for Sparse candidate or MMHC? Hybrid search
is an interesting idea, esp. if they maintain the convergence properties
of the samplers.
Following up on what Abhik said, keeping the "bad" networks should
improve predictions. Per Solomonoff, the best predictor would keep *all*
networks, and predict by posterior-weighted average.
-crt
--
Charles R. Twardy
Research Assistant Professor
George Mason University C4I Center
703 993 1846 voice
571 212 0674 mobile
ctw...@gmu.edu email
I'll hold off on adding to pebl for now.. Regarding attribution, I
would be more than happy to acknowledge your contribution in both code
and docs.
>
> 2) Abhik, maybe I'm not understanding something but your Greedy Search seems
> to not match what's described in the tutorial. I believe a standard greedy
> search tries all O(n^2) local additions on the network and keeps the best
> one. Yours just chooses a random operation (add, delete, reverse) and
> continues until score stops increasing. This seems more like a best-first
> approach with reversals and deletions. Is there any literature on how that
> compares to regular greedy search or a reason you did it this way? It seems
> to me the results would be more unpredictable but maybe if you take the
> consensus network of 100s of searches on a distributed cluster it'd work
> well. I'm curious. Also, if you don't use PeBL for structure search, what do
> you use it for? That seems to be it's primary purpose! :)
>
I believe that checking one or all neighboring networks are both
considered greedy searches. Checking all neighbors makes the search
deterministic (given a known starting seed) whereas choosing a random
change is more akin to simulated annealing. There actually is code in
pebl/learners/base.py to check all changes but it's not currently
being used. To be honest, the learners in pebl could benefit from more
attention. In my work, rather than learning structure, I've been
scoring structures suggested by other sources of knowledge/data. This
way I have a combinatorial space of models that is far smaller than
the full space and I just write a custom learner that enumerates all
models.
Hope that helps,
Abhik