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

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 to use, Bnlearn contains the most-wanted pipelines. Navigate to API documentations for more detailed information. ⭐️ Star it if you like it ⭐️


Key Features

Feature Description Medium Gumroad/Podcast
Causal Discovery - Overview and Starters Guide Learn the basics of causal modelling. link ---
Structure Learning Learn the model structure from data or with expert knowledge. link ---
Causal Predictions Learn to make causal predictions. link ---
Parameter Learning Estimate model parameters (e.g., conditional probability distributions) from observed data. link ---
Causal Inference Compute interventional and counterfactual distributions using do-calculus. link ---
Generate Synthetic Data Generate synthetic data. link ---
Discretize Data Discretize continuous datasets. --- ---
Comparisons Comparison with other causal libraries. link ---

Resources and Links


The following functions are available after installation:

Feature Description
Key Pipelines
Structure learning bn.structure_learning.fit()
Parameter learning bn.parameter_learning.fit()
Inference bn.inference.fit()
Make predictions bn.predict()
Generate Synthetic Data bn.sampling()
Compute Edge Strength bn.independence_test()
Key Functions
Imputations bn.knn_imputer()
Discretizing bn.discretize()
Check Model Parameters bn.check_model()
Create DAG bn.make_DAG()
Get Node Properties bn.get_node_properties()
Get Edge Properties bn.get_edge_properties()
Get Parents From Edges bn.get_parents()
Generate Default CPT per Node bn.generate_cpt()
Generate Default CPTs for All Edges bn.build_cpts_from_structure()
Make Plots
Plotting bn.plot()
Plot Graphviz bn.plot_graphviz()
Compare 2 Networks bn.compare_networks()
Load DAG (bif files) bn.import_DAG()
Load Examples bn.import_example()
Transformation Functions
Convert DAG to Undirected bn.to_undirected()
Convert to one-hot bn.df2onehot()
Convert Adjacency Matrix to Vector bn.adjmat2vec()
Convert Adjacency Matrix to Dictionary bn.adjmat2dict()
Convert Vector to Adjacency Matrix bn.vec2adjmat()
Convert DAG to Adjacency Matrix bn.dag2adjmat()
Convert DataFrame to Onehot bn.df2onehot()
Convert Query to DataFrame bn.query2df()
Convert Vector to DataFrame bn.vec2df()
Metrics
Compute Topological Ordering bn.topological_sort()
Compute Structure Scores bn.structure_scores()
General
Save Model bn.save()
Load Model bn.load()
Print CPTs bn.print_CPD()

Installation

Install bnlearn from PyPI
pip install bnlearn
Install bnlearn from github source
pip install git+https://github.com/erdogant/bnlearn
Load library
# Import library
import bnlearn as bn

Code 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')

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)

# Example: Structure Learning

    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)

Star history

Star History Chart

Contributors

Thank the contributors!

Maintainer

  • Erdogan Taskesen, github: erdogant
  • Contributions are welcome.
  • Yes! This library is entirely free but it runs on coffee! :) Feel free to support with a Coffee.

Buy me a coffee

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.12.3.tar.gz (80.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bnlearn-0.12.3-py3-none-any.whl (82.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bnlearn-0.12.3.tar.gz
  • Upload date:
  • Size: 80.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for bnlearn-0.12.3.tar.gz
Algorithm Hash digest
SHA256 af04ad568db2470abc356956d89df486f6663ddda775c8865cd34586006da53a
MD5 6bd0c549acf770268771ab4d68cd8e97
BLAKE2b-256 38a8c9ed013f9457d5faf2f810136b50b6fcbec8f844f3b5ce352ade5ec56389

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bnlearn-0.12.3-py3-none-any.whl
  • Upload date:
  • Size: 82.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for bnlearn-0.12.3-py3-none-any.whl
Algorithm Hash digest
SHA256 bb61c72a38555168e2921370435bcaa4793683ff408c3dd0ceeea231e0d33a0a
MD5 7b5be63c23b1c31c6a2a51f29cedbc5f
BLAKE2b-256 5191427680eebb6210a8c0baa210b5d6213ee14dc643a23f23c7954499d83a4c

See more details on using hashes here.

Supported by

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