Inference algorithm of Shenoy and Shafer - java

I have heard of this algorithm, but is this algorithm good to use it with Bayesian Belief networks? Hugin is based on it and I'm looking for a book / article on this algorithm.

The algorithm is described in this paper. It is quite detailed and should be a good point to start.

I haven't kept track of this research area for a while, but I can point you towards the
CiteSeerX search engine if you don't know it already. (http://citeseerx.ist.psu.edu/)
Searching for papers which cite Shenoy & Shafer's An axiomatic framework for Bayesian and belief function propagation (1990) will give you a list of other researchers who have tried to apply the algorithm.

I am not familiar with the algorithm but another place to check for information would be
a search in google scholar.

Pulcinella is a tool for Propagating Uncertainty through Local Computations based on the general framework af valuation systems proposed by Shenoy and Shafer
Pulcinella is freely available for
educational and strictly
non-commercial use. Pulcinella is
written in Common Lisp. It has been
tested on Allegro CL on Macintosh, and
on Lucid CL, Allegro CL, and CLisp on
a Sun. The code is just "pure" common
lisp, so it should also run on any
other reasonable implementation of
common-lisp (well, you know...). To
get the latest version, click here.
Alternatively, you can get Pulcinella
by anonymous ftp from
ftp://aass.oru.se/pub/saffiotti. The
Pulcinella tar archive includes a few
examples, taken from the User's
Manual. If you fetch this program, you
are expected to send a letter at the
address below, stating that you will
use Pulcinella for research and
non-commercial use only.
Also here is some references.
Even More references:
An Algorithm for Bayesian Belief Network Construction from Data
A Tutorial on Learning With Bayesian Networks
http://en.wikipedia.org/wiki/Bayesian_network#External_links

Related

predicting user actions while using GUI/application

I am using Java (but am open to solutions in other languages as well). I am looking at open source predictive modeling solutions for guessing what GUI/application features a user is interested in (I will have the specific user behavior data on the GUI/application). Instead of just looking at most used actions etc, should I possibly look at incorporating SVM or decision trees? I am looking at weka, mahout and jahmm - is there any other resource I can look at (specifically for GUI behavior - which hopefully returns results fast enough even if accuracy is reduced). Since I am not extremely knowledgeable about this field, please inquire about any information I may have left out to better ascertain a working solution. Thanks!
It's incredibly difficult to say given that we don't know what data you're using (I don't know of existing software to do this, but it may very well exist). With respect to support vector machines, they are binary or one-versus all classifiers, so I don't think they would be applicable here, if I understand your intentions correctly.
If you're unfamiliar with machine learning, Weka may be a good place for you to start. If you have supervised data, then you can feed all of your feature vectors with associated classification data into Weka and use cross-validation to see what type of technique suits you best. Additionally, you can use Weka to see if certain features are more important than others and do manual dimensionality reduction. Or of course, you can use one of Weka's dimensionality reduction techniques, but it may be difficult to decide which one if you don't know the assumptions that they make or how your data is related (this also applies to whatever prediction technique you try/use). Although, if you have enough time, you can just play around and manually just see what works best.

Backpropagation through time

Does anyone know of a library with a working implementation of backpropagation through time?
Any of Java/Python/C#/VB.NET/F# (preferably the last one) will do!
Assuming you're already using some library for BP, it should be (TM) rather straightforward to implement BPTT using BP as a step in the process.
The Wikipedia entry for BPTT [1] includes relevant pseudo code.
My own starting point, about 18 years ago, was "The Truck Backer-Upper: An Example of Self-Learning in Neural Networks" [2].
[1] http://en.wikipedia.org/wiki/Backpropagation_through_time
[2] http://www-isl.stanford.edu/~widrow/papers/c1989thetruck.pdf
I've used NeuronDotNet only for a limited time though. It allows you to create a feed-forward BackPropagation NN. I especially liked their use of intuitively named classes. Good luck!
This is a .net library.
I'm from a Java background but Encog has a .net implementation as well (and is a seriously good framework for NNets, with good time series support)
Can't help with an F# framework, but what domain are you coding for? If it's finance I'll reassert the "take a look at Encog"
Perhaps pybrain would do? The docstring for its BackpropTrainer class suggests that it does backpropagation through time:
class BackpropTrainer(Trainer):
"""Trainer that trains the parameters of a module according to a
supervised dataset (potentially sequential) by backpropagating the errors
(through time)."""
What about this one ? Just a Google search to help...
I've had good experiences with Weka - In my view one of the best and almost certainly the most comprehensive general purpose machine learning libraries around.
You could certainly do BPTT with Weka - you may find a ready made classifier that does what you need but even if not you can just chain a few normal backpropagation units together as per the very good wikipedia article on BPTT
I made backpropagation algorithm in Java quite time ago. I uploaded it into GitHub, maybe you can find it useful: https://github.com/bernii/NeuralNetwokPerceptronKohonen
Let me now if it was helpful :)
You can use TensorFlow's dynamic_rnn() function (API doc). TensorFlow's tutorial on Recurrent Neural Networks will help.
Also, this great blog post provides a nice introduction to predicting sequences using TensorFlow. Here's another blog post with some code to predict a time series.

Looking for a reliable and efficient Java library for Formal Concept Analysis

I need to perform Formal Concept Analysis on the fly and am looking for an efficient SDK for calculating the concepts for a given context. There are a lot of research tools around but I'm looking for something supported and reliable.
Any help would be appreciated
Frameworks / Libraries
FCA Home suggests a list of software, including (few) Java solutions:
Colibri-Java
FCAlib
Reuse or Learn from Existing Tools
Maybe some FCA exploration tools and academic projects provide source code you could inspire yourself from, or directly reuse if their licenses permit such use:
ToscanaJ
Galicia
CORON
ConExp
Roll Out Your Own
Or, as a last resort, you'll need to roll out your own based on either (or a combination of):
existing solutions available in other languages (maybe you can use a binding?),
experimental research (like this one and a herd of other ones).

Machine learning challenge: diagnosing program in java/groovy (datamining, machine learning)

I'm planning to develop program in Java which will provide diagnosis. The data set is divided into two parts one for training and the other for testing. My program should learn to classify from the training data (BTW which contain answer for 30 questions each in new column, each record in new line the last column will be diagnosis 0 or 1, in the testing part of data diagnosis column will be empty - data set contain about 1000 records) and then make predictions in testing part of data :/
I've never done anything similar so I'll appreciate any advice or information about solution to similar problem.
I was thinking about Java Machine Learning Library or Java Data Mining Package but I'm not sure if it's right direction... ? and I'm still not sure how to tackle this challenge...
Please advise.
All the best!
I strongly recommend you use Weka for your task
Its a collection of machine learning algorithms with a user friendly front-end which facilitates a lot of different kinds of feature and model selection strategies
You can do a lot of really complicated stuff using this without really having to do any coding or math
The makers have also published a pretty good textbook that explains the practical aspects of data mining
Once you get the hang of it, you could use its API to integrate any of its classifiers into your own java programs
Hi As Gann Bierner said, this is a classification problem. The best classification algorithm for your needs I know of is, Ross Quinlan algorithm. It's conceptually very easy to understand.
For off-the-shelf implementations of the classification algorithms, the best bet is Weka. http://www.cs.waikato.ac.nz/ml/weka/. I have studied Weka but not used, as I discovered it a little too late.
I used a much simpler implementation called JadTi. It works pretty good for smaller data sets such as yours. I have used it quite a bit, so can confidently tell so. JadTi can be found at:
http://www.run.montefiore.ulg.ac.be/~francois/software/jaDTi/
Having said all that, your challenge will be building a usable interface over web. To do so, the dataset will be of limited use. The data set basically works on the premise that you have the training set already, and you feed the new test dataset in one step, and you get the answer(s) immediately.
But my application, probably yours also, was a step by step user discovery, with features to go back and forth on the decision tree nodes.
To build such an application, I created a PMML document from my training set, and built a Java Engine that traverses each node of the tree asking the user to give an input (text/radio/list) and use the values as inputs to the next possible node predicate.
The PMML standard can be found here: http://www.dmg.org/ Here you need the TreeModel only. NetBeans XML Plugin is a good schema-aware editor for PMML authoring. Altova XML can do a better job, but costs $$.
It is also possible to use an RDBMS to store your dataset and create the PMML automagically! I have not tried that.
Good luck with your project, please feel free to let me know if you need further inputs.
There are various algorithms that fall into the category of "machine learning", and which is right for your situation depends on the type of data you're dealing with.
If your data essentially consists of mappings of a set of questions to a set of diagnoses each of which can be yes/no, then I think methods that could potentially work include neural networks and methods for automatically building a decision tree based on the test data.
I'd have a look at some of the standard texts such as Russel & Norvig ("Artificial Intelligence: A Modern Approach") and other introductions to AI/machine learning and see if you can easily adapt the algorithms they mention to your particular data. See also O'Reilly, "Programming Collective Intelligence" for some sample Python code of one or two algorithms that might be adaptable to your case.
If you can read Spanish, the Mexican publishing house Alfaomega have also published various good AI-related introductions in recent years.
This is a classification problem, not really data mining. The general approach is to extract features from each data instance and let the classification algorithm learn a model from the features and the outcome (which for you is 0 or 1). Presumably each of your 30 questions would be its own feature.
There are many classification techniques you can use. Support vector machines is popular as is maximum entropy. I haven't used the Java Machine Learning library, but at a glance I don't see either of these. The OpenNLP project has a maximum entropy implementation. LibSVM has a support vector machine implementation. You'll almost certainly have to modify your data to something that the library can understand.
Good luck!
Update: I agree with the other commenter that Russel and Norvig is a great AI book which discusses some of this. Bishop's "Pattern Recognition and Machine Learning" discusses classification issues in depth if you're interested in the down and dirty details.
Your task is classical for neural networks, which are intended first of all to solve exactly classification tasks. Neural network has rather simple realization in any language, and it is the "mainstream" of "machine learning", closer to AI than anything other.
You just implement (or get existing implementation) standart neural network, for example multilayered network with learning by error back propagation, and give it learning examples in cycle. After some time of such learning you will get it working on real examples.
You can read more about neural networks starting from here:
http://en.wikipedia.org/wiki/Neural_network
http://en.wikipedia.org/wiki/Artificial_neural_network
Also you can get links to many ready implementations here:
http://en.wikipedia.org/wiki/Neural_network_software

Java Library with subgraph isomorphism problem support?

I'm trying to analyze the usage of "#include" in C files (what is included first, dependencies...).
To do so, I extract from a C file the "#include" and I'm building a graph. I would like to identify common patterns in this graph...
So far, I'm using JGraphT as the graph engine (not sure this is the correct expression) and JGraph for the rendering (however using jgraph is a bit problematic since the Layouts are no longer included in the free release).
I've been unable to find any isomorphism support in jgrapht. Do you know any solution providing this kind of support (something like igraph but for java)..?
I'm using java 1.5 and the proposed solution must be free...
Not sure one of them can do isomorphism but I've collected a couple of links to graph layout engines in my blog: http://blog.pdark.de/2009/02/11/graph-layout-in-java/
You might want to look at graphviz, too. It's not Java but has a very powerful layout engine.
As for isomorphism: You probably only need to check for patterns at level 0 (i.e. the direct includes) because anything below that must be isomorphic by definition (all files included by some include file will always be the same unless someone used a lot of #if magic in the includes section).
Have you looked at Parsemis?
It's a Java graph mining library, and (sub)graph isomorphism is fundamental to this process, so my guess is that they're solving this issue somehow.
Not sure about the license though, but I believe it's open source as it was developed for academic reasons.
I've been pondering this problem myself lately (looking for common markup structures to factor out of JSPs into tags, in my case).
A library for this would be great. I haven't found one yet. In the meantime, here are a couple of problems that may be related to yours (isomorphically?).
I was planning to research the technique mathematical software uses to analytically evaluate integrals in calculus problems. In this case, there are a bunch of known structural patterns, and the problem in question has to be matched to one of the known patterns. The best way to do this is not always obvious because it depends on what terms are grouped together, etc.
Algorithms used in biology to find corresponding structures in two complex molecules might also be adapted to this problem.
Looks like there was a mention of isomorphism in the "experimental" package of JGraphT a few months back, but apparently no documentation.
Isomorphism comparison is a fundamental requirement in cheminformatics software (technically it's monomorphism that's used). Atoms are "nodes" and bonds are "edges". Molecular graphs are undirected and can be cyclic. A few open source cheminformatics libraries written in Java are available. You might be able to find some clues for solving your problem by looking at these libraries.
For example, I've written a BSD-licensed cheminformatics library called MX that implements a monomorphism algorithm based on VF. I wrote a high-level overview of how the algorithm was implemented, and you can browse the source for the mapping package in my GitHub repository. Most of the work is done in the DefaultState class.
MX also includes a fast exhaustive ring detector and other graph manipulations that might be applicable to your problem.
I sure don't know of a particular graph library with subgraph isomorphism code — since it's known NP-complete, you can't do a lot other than search anyway. It shows up a lot in graph rewriting schemes, so AGG might help.

Categories

Resources