https://github.com/fs02/pgm-plus
A C++ Probabilistic Graphical Model Library
https://github.com/fs02/pgm-plus
bayesian-network pgm
Last synced: 5 months ago
JSON representation
A C++ Probabilistic Graphical Model Library
- Host: GitHub
- URL: https://github.com/fs02/pgm-plus
- Owner: Fs02
- License: apache-2.0
- Created: 2017-03-05T17:25:26.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-07-21T02:00:07.000Z (over 8 years ago)
- Last Synced: 2024-05-01T12:16:47.612Z (almost 2 years ago)
- Topics: bayesian-network, pgm
- Language: C++
- Size: 92.8 KB
- Stars: 6
- Watchers: 5
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PGM-plus
A C++ Probabilistic Graphical Model Library
## Features
Scoring Function:
- Akaike Information Criterion (AIC)
- Bayesian Dirichlet equivalent uniform (BDeu)
- Bayesian Information Criterion (BIC)
- Factorized Conditional Log Likelihood (fCLL)
- Log Likelihood
Search Algorithm:
- Greedy Hill Climbing
- Simulated Annealing
Inference:
- Brute force
## Usage
The easiest way to use this library is to include and compile alongside your project.
## Example
```
#include
#include
#include
#include
int main()
{
// bayesnet
pgm::Bayesnet bn;
bn.add_node("A", {"F", "T"});
bn.add_node("B", {"F", "T"});
bn.add_node("C", {"F", "T"});
bn.add_node("D", {"F", "T"});
bn.add_node("E", {"F", "T"});
// dataset
pgm::Dataset dataset;
for (std::size_t i = 0; i < 20; ++i)
dataset.push({{"A", "T"}, {"B", "F"}, {"C", "T"}, {"D", "T"}, {"E", "T"}});
for (std::size_t i = 0; i < 15; ++i)
dataset.push({{"A", "T"}, {"B", "F"}, {"C", "F"}, {"D", "F"}, {"E", "F"}});
for (std::size_t i = 0; i < 10; ++i)
dataset.push({{"A", "F"}, {"B", "T"}, {"C", "F"}, {"D", "T"}, {"E", "T"}});
for (std::size_t i = 0; i < 15; ++i)
dataset.push({{"A", "F"}, {"B", "F"}, {"C", "T"}, {"D", "T"}, {"E", "T"}});
for (std::size_t i = 0; i < 5; ++i)
dataset.push({{"A", "F"}, {"B", "F"}, {"C", "F"}, {"D", "F"}, {"E", "F"}});
for (std::size_t i = 0; i < 2; ++i)
dataset.push({{"A", "T"}, {"B", "T"}, {"C", "F"}, {"D", "T"}, {"E", "F"}});
// Train with simulated annealing and factorized conditional log likelihood
pgm::SimulatedAnnealing annealing;
annealing.verbose(true);
annealing.init_as_naive_bayes("A");
pgm::Fcll score(dataset, "A");
pgm::SampleEstimate estimate;
annealing(bn, score);
estimate(bn, dataset);
std::cout << bn;
// predict
std::size_t correct = 0;
for (std::size_t i = 0; i < dataset.size(); ++i)
{
auto row = dataset[i];
if (row["A"] == bn.infer("A", row))
++correct;
}
std::cout << "Correct : " << correct << "/" << dataset.size() << "\n";
}
```