bnclassify: Learning Bayesian Network Classifiers

The bnclassify package provides state-of-the art algorithms for learning Bayesian network classifiers from data. For structure learning it provides variants of the greedy hill-climbing search, a well-known adaptation of the Chow-Liu algorithm and averaged one-dependence estimators. It provides Bayesian and maximum likelihood parameter estimation, as well as three naive-Bayes specific methods based on discriminative score optimization and Bayesian model averaging. The implementation is efficient enough to allow for time-consuming discriminative scores on medium sized data sets. The bnclassify package provides utilities for model evaluation, such as cross-validated accuracy and penalized log-likelihood scores, and analysis of the underlying networks, including network plotting via the Rgraphviz package. It is extensively tested, with over 200 automated tests that give a code coverage of 94%. Here we present the main functionalities, illustrate them with a number of data sets, and comment on related software.

Bojan Mihaljević , Concha Bielza , Pedro Larrañaga

Supplementary materials

Supplementary materials are available in addition to this article. It can be downloaded at

CRAN packages used

bnlearn, bnclassify, caret, mlr, gRain, deal

CRAN Task Views implied by cited packages

Bayesian, gR, HighPerformanceComputing, MachineLearning, Multivariate

Bioconductor packages used



Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".


For attribution, please cite this work as

Mihaljević, et al., "The R Journal: bnclassify: Learning Bayesian Network Classifiers", The R Journal, 2018

BibTeX citation

  author = {Mihaljević, Bojan and Bielza, Concha and Larrañaga, Pedro},
  title = {The R Journal: bnclassify: Learning Bayesian Network Classifiers},
  journal = {The R Journal},
  year = {2018},
  note = {},
  doi = {10.32614/RJ-2018-073},
  volume = {10},
  issue = {2},
  issn = {2073-4859},
  pages = {455-468}