Learn and Save Bayesian Network
Used imports:
from bamt.preprocessors import Preprocessor
import pandas as pd
from sklearn import preprocessing as pp
from bamt.networks import HybridBN
Let’s start with data loading and preprocessing:
data = pd.read_csv("data/real data/hack_processed_with_rf.csv")[
['Tectonic regime', 'Period', 'Lithology', 'Structural setting',
'Gross', 'Netpay', 'Porosity', 'Permeability', 'Depth']]
# set encoder and discretizer
encoder = pp.LabelEncoder()
discretizer = pp.KBinsDiscretizer(n_bins=5, encode='ordinal', strategy='uniform')
# create preprocessor object with encoder and discretizer
p = Preprocessor([('encoder', encoder), ('discretizer', discretizer)])
# discretize data for structure learning
discretized_data, est = p.apply(data)
# get information about data
info = p.info
Then we create a network object and perform structure and parameters learning:
# initialize network object
bn = HybridBN(use_mixture=True, has_logit=True)
# add nodes to network
bn.add_nodes(info)
# using mutual information as scoring function for structure learning
bn.add_edges(discretized_data, scoring_function=('MI',))
# or use evolutionary algorithm to learn structure
bn.add_edges(discretized_data, optimizer = 'evo')
bn.fit_parameters(data)
To save structure and parameters of the network separately, we can use the following code:
# saving structure
bn.save_structure("hack_structure.json")
# saving parameters
bn.save_params("hack_p.json")
Or, if we want to save the whole network, we can use:
bn.save("hack_network.json")