Skip to main content

bnlearn is a Python package for Causal Discovery by learning the graphical structure of Bayesian networks, parameter learning, inference and sampling methods.

Project description

Bnlearn - Causal Discovery using Bayesian Learning

Python PyPI Version GitHub Repo stars License Forks Open Issues Project Status Downloads Downloads DOI Docs Medium GitHub repo size Donate Colab

bnlearn is Python package for causal discovery by learning the graphical structure of Bayesian networks, parameter learning, inference and sampling methods. Because probabilistic graphical models can be difficult in usage, Bnlearn for python (this package) is build on the pgmpy package and contains the most-wanted pipelines. Navigate to API documentations for more detailed information.

⭐️ Star this repo if you like it ⭐️

Read the Medium blog for more details.


Documentation pages

On the documentation pages you can find detailed information about the working of the bnlearn with many examples.

Installation

It is advisable to create a new environment (e.g. with Conda).
conda create -n env_bnlearn python=3.10
conda activate env_bnlearn
Install bnlearn from PyPI
pip install bnlearn
Install bnlearn from github source
pip install git+https://github.com/erdogant/bnlearn
The following functions are available after installation:
# Import library
import bnlearn as bn

# Structure learning
bn.structure_learning.fit()

# Compute edge strength with the test statistic
bn.independence_test(model, df, test='chi_square', prune=True)

# Parameter learning
bn.parameter_learning.fit()

# Inference
bn.inference.fit()

# Make predictions
bn.predict()

# Based on a DAG, you can sample the number of samples you want.
bn.sampling()

# Load well-known examples to play around with or load your own .bif file.
bn.import_DAG()

# Load simple data frame of sprinkler dataset.
bn.import_example()

# Compare 2 graphs
bn.compare_networks()

# Plot graph
bn.plot()
bn.plot_graphviz()

# To make the directed graph undirected
bn.to_undirected()

# Convert to one-hot datamatrix
bn.df2onehot()

# Derive the topological ordering of the (entire) graph 
bn.topological_sort()

# See below for the exact working of the functions
The following methods are also included:
  • inference
  • sampling
  • comparing two networks
  • loading bif files
  • Conversion of directed to undirected graphs

Method overview

Learning a Bayesian network can be split into the underneath problems which are all implemented in this package for both discrete, continuous and mixed data sets:

  • Structure learning: Given the data: Estimate a DAG that captures the dependencies between the variables.

    • There are multiple manners to perform structure learning.
      • Constraintsearch or PC
      • Exhaustivesearch
      • Hillclimbsearch
      • NaiveBayes
      • TreeSearch
        • Chow-liu
        • Tree-augmented Naive Bayes (TAN)
      • Direct-LiNGAM (for continuous and hybrid datasets)
      • ICA-LiNGAM (for continuous and hybrid datasets)
  • Parameter learning: Given the data and DAG: Estimate the (conditional) probability distributions of the individual variables.

  • Inference: Given the learned model: Determine the exact probability values for your queries.

Examples

A structured overview of all examples are now available on the documentation pages.

Structure learning
Parameter learning
Inferences
Sampling
Complete examples
Plotting
Various

Various basic examples

    import bnlearn as bn
    # Example dataframe sprinkler_data.csv can be loaded with: 
    df = bn.import_example()
    # df = pd.read_csv('sprinkler_data.csv')
df looks like this
Cloudy  Sprinkler  Rain  Wet_Grass
0         0          1     0          1
1         1          1     1          1
2         1          0     1          1
3         0          0     1          1
4         1          0     1          1
..      ...        ...   ...        ...
995       0          0     0          0
996       1          0     0          0
997       0          0     1          0
998       1          1     0          1
999       1          0     1          1
    model = bn.structure_learning.fit(df)
    # Compute edge strength with the chi_square test statistic
    model = bn.independence_test(model, df)
    G = bn.plot(model)

  • Choosing various methodtypes and scoringtypes:
    model_hc_bic  = bn.structure_learning.fit(df, methodtype='hc', scoretype='bic')
    model_hc_k2   = bn.structure_learning.fit(df, methodtype='hc', scoretype='k2')
    model_hc_bdeu = bn.structure_learning.fit(df, methodtype='hc', scoretype='bdeu')
    model_ex_bic  = bn.structure_learning.fit(df, methodtype='ex', scoretype='bic')
    model_ex_k2   = bn.structure_learning.fit(df, methodtype='ex', scoretype='k2')
    model_ex_bdeu = bn.structure_learning.fit(df, methodtype='ex', scoretype='bdeu')
    model_cl      = bn.structure_learning.fit(df, methodtype='cl', root_node='Wet_Grass')
    model_tan     = bn.structure_learning.fit(df, methodtype='tan', root_node='Wet_Grass', class_node='Rain')

Example: Parameter Learning

    import bnlearn as bn
    # Import dataframe
    df = bn.import_example()
    # As an example we set the CPD at False which returns an "empty" DAG
    model = bn.import_DAG('sprinkler', CPD=False)
    # Now we learn the parameters of the DAG using the df
    model_update = bn.parameter_learning.fit(model, df)
    # Make plot
    G = bn.plot(model_update)

Example: Inference

    import bnlearn as bn
    model = bn.import_DAG('sprinkler')
    query = bn.inference.fit(model, variables=['Rain'], evidence={'Cloudy':1,'Sprinkler':0, 'Wet_Grass':1})
    print(query)
    print(query.df)
    
    # Lets try another inference
    query = bn.inference.fit(model, variables=['Rain'], evidence={'Cloudy':1})
    print(query)
    print(query.df)

References

Contributors

Setting up and maintaining bnlearn has been possible thanks to users and contributors. Thanks to:

Citation

Please cite bnlearn in your publications if this is useful for your research. See column right for citation information.

Maintainer

  • Erdogan Taskesen, github: erdogant
  • Contributions are welcome.
  • If you wish to buy me a Coffee for this work, it is very appreciated :)

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bnlearn-0.11.1.tar.gz (80.4 kB view details)

Uploaded Source

Built Distribution

bnlearn-0.11.1-py3-none-any.whl (82.3 kB view details)

Uploaded Python 3

File details

Details for the file bnlearn-0.11.1.tar.gz.

File metadata

  • Download URL: bnlearn-0.11.1.tar.gz
  • Upload date:
  • Size: 80.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for bnlearn-0.11.1.tar.gz
Algorithm Hash digest
SHA256 ea8d627b5ee4db6c1e7ff854f1f2fe06d2898e498b6e09d76173c8b828b5ba7b
MD5 e4e23f8cf20697ae8c6dfbe7eee94750
BLAKE2b-256 cbafb1f8cc1981b6d4ece3826ea9d5f82d5768bd96083f2db5ebcf1a2643fc7b

See more details on using hashes here.

File details

Details for the file bnlearn-0.11.1-py3-none-any.whl.

File metadata

  • Download URL: bnlearn-0.11.1-py3-none-any.whl
  • Upload date:
  • Size: 82.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for bnlearn-0.11.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9c301f99855e32b0f2be9d2d4730c7b0fbb737b7d706103ef0c3f9f7cf5c180f
MD5 43336827376a9bdf9ce137bba9431dbb
BLAKE2b-256 c3e7a5fc0cc05418b2d0c7a59b571ea903664b36a21e3d193d495a32582126dd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page