Quantum Fog  0.9.3
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
learning.HillClimbingLner.HillClimbingLner Class Reference
Inheritance diagram for learning.HillClimbingLner.HillClimbingLner:
Inheritance graph
[legend]
Collaboration diagram for learning.HillClimbingLner.HillClimbingLner:
Collaboration graph
[legend]

Public Member Functions

def __init__ (self, states_df, score_type, max_num_mtries, ess=1.0, verbose=False, vtx_to_states=None)
 
def climb (self)
 
def do_move (self, move, score_change, do_finish=True)
 
def refresh_nx_graph (self)
 
def would_create_cycle (self, move)
 
def move_approved (self, move)
 
def finish_do_move (self, move)
 
def restart (self, mtry_num)
 
def cache_this (self, move, score_change)
 
def empty_cache (self)
 
- Public Member Functions inherited from learning.NetStrucLner.NetStrucLner
def __init__ (self, is_quantum, states_df, vtx_to_states=None)
 
def fill_bnet_with_parents (self, vtx_to_parents)
 

Static Public Member Functions

def do_move_vtx_to_parents (move, vtx_to_parents, reversal=False)
 
def do_move_nx_graph (move, nx_graph, reversal=False)
 
def HC_lner_test (LnerClass, verbose=False)
 
- Static Public Member Functions inherited from learning.NetStrucLner.NetStrucLner
def learn_nd_state_names (bnet, states_df)
 
def import_nd_state_names (bnet, vtx_to_states)
 
def int_sts_detector (sub_states_df)
 

Public Attributes

 max_num_mtries
 
 score_type
 
 verbose
 
 vertices
 
 vtx_to_parents
 
 scorer
 
 nx_graph
 
- Public Attributes inherited from learning.NetStrucLner.NetStrucLner
 is_quantum
 
 bnet
 
 states_df
 
 ord_nodes
 

Detailed Description

The HiilClimbingLner( Hill Climbing Learner ) class learns the structure
of a bnet using a greedy strategy, meaning it goes for the highest short
term gain without caring that that may not be in its long term interest,
as it may lead it to a local rather than the global maximum.

Each 'move' consists of either adding, deleting or reversing the 
direction of an arrow. Each move is given a score. Score keeping is done 
by an object of a separate class called NetStrucScorer. A 'try' or 
'mtry' (move try) is a set of candidate moves. Only the highest scoring 
move of a try is actually performed. 

Classes that inherit from this one wil have the prefix HC_ for easy
identification and so that they stay together in an alphabetical listing.

References
----------
1. Nicholas Cullen neuroBN at github

Attributes
----------
is_quantum : bool
    True for quantum bnets and False for classical bnets
bnet : BayesNet
    a BayesNet in which we store what is learned
states_df : pandas.DataFrame
    a Pandas DataFrame with training data. column = node and row =
    sample. Each row/sample gives the state of the col/node
ord_nodes : list[DirectedNode]
    a list of DirectedNode's named and in the same order as the column
    labels of self.states_df.

max_num_mtries : int
    maximum number of move tries
nx_graph : networkx.DiGraph
    a networkx directed graph used to store arrows
score_type : str
    score type, either 'LL', 'BIC, 'AIC', 'BDEU' or 'K2'
scorer : NetStrucScorer
    object of NetStrucScorer class that keeps a running record of scores
verbose : bool
    True for this prints a running commentary to console
vertices : list[str]
    list of vertices (node names). Same as states_df.columns
vtx_to_parents : dict[str, list[str]]
    dictionary mapping each vertex to a list of its parents's names

Constructor & Destructor Documentation

def learning.HillClimbingLner.HillClimbingLner.__init__ (   self,
  states_df,
  score_type,
  max_num_mtries,
  ess = 1.0,
  verbose = False,
  vtx_to_states = None 
)
Constructor

Parameters
----------
states_df : pandas.core.frame.DataFrame
score_type : str
max_num_mtries : int
ess : float
    Equivalent Sample Size, a parameter in BDEU scorer. Fudge factor
    that is supposed to grow as the amount of prior knowledge grows.
verbose : bool
vtx_to_states : dict[str, list[str]]
    A dictionary mapping each node name to a list of its state names.
    This information will be stored in self.bnet. If
    vtx_to_states=None, constructor will learn vtx_to_states
    from states_df

Returns
-------
None

Member Function Documentation

def learning.HillClimbingLner.HillClimbingLner.cache_this (   self,
  move,
  score_change 
)
This is a hook function that allows subclasses of this class to
store in a list every move and its score change that was considered
(whether it was the best move of the try or not) for the current try.

Parameters
----------
move : tuple[str, str, str]
score_change : tuple[float, float, float]

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.climb (   self)
This is the main engine of the whole class. Most of the other
functions of this class are called inside this function.

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.do_move (   self,
  move,
  score_change,
  do_finish = True 
)
Once the move has been approved/vetted, it is performed by this
method.

Parameters
----------
move : tuple[str, str, str]
    a move is a 3-tuple (beg_vtx, end_vtx, action) describing an
    arrow beg_vtx->end_vtx that will be either added, deleted or
    reversed, depending on whether action = 'add', 'del', or 'rev'.
score_change : tuple[float, float, float]
    score_change is a 3-tuple (beg_vtx_score_ch, end_vtx_score_ch,
    tot_score_ch). beg_score_ch is the score change of the beg_vtx
    of move, end_score_ch is the score change of the end_vtx of
    move. This is possible because all score functions can be
    evaluated for a single vtx. tot_score_ch is the sum of
    beg_score_ch and end_score_ch minus a positive penalty that
    increases with the size of the network.
do_finish : bool
    True if you want to finish off this function with a call to
    finish_do_move().

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.do_move_nx_graph (   move,
  nx_graph,
  reversal = False 
)
static
Applies move or its reversal to a networkx dag.

Parameters
----------
move : tuple[str, str, str]
nx_graph : networkx.DiGraph
reversal : bool
    If True, the function applies reversal of move to nx_graph

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.do_move_vtx_to_parents (   move,
  vtx_to_parents,
  reversal = False 
)
static
Applies a move or its reversal to a vtx_to_parents

Parameters
----------
move : tuple[str, str, str]
vtx_to_parents : dict[str, list[str]]
    dictionary mapping each vertex to a list of its parents's names
reversal : bool
    If True, the function applies reversal of move to vtx_to_parents

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.empty_cache (   self)
This is a hook function that allows subclasses of this class to
clear its cached list of moves before starting the next try.

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.finish_do_move (   self,
  move 
)
This is a hook function that allows subclasses of this class to do
some additional processing before the do_move() function is concluded.

Parameters
----------
move : tuple[str, str, str]

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.HC_lner_test (   LnerClass,
  verbose = False 
)
static
This static method gives a simple example that we use to test
HillClimbingLner and its subclasses (those starting with HC_). The
method takes in as input training data generated from 2 graphs (the
classical versions of wetgrass and earthquake), and it outputs a
drawing of the learned structure for 2 scoring functions (
BIC-frequentist and BDEU-bayesian)

Parameters
----------
LnerClass : HillClimbingLner or subclass
    This is either HillClimbingLner without quotes or the name of a
    subclass of that class.

verbose : bool

Returns
-------
def learning.HillClimbingLner.HillClimbingLner.move_approved (   self,
  move 
)
This is a hook function that allows subclasses of this class to
impose more stringent requirements on a move before it is approved,
beyond the usual requirement that the move not create a cycle. The
function returns a bool, its decision.

Parameters
----------
move : tuple[str, str, str]

Returns
-------
bool
def learning.HillClimbingLner.HillClimbingLner.refresh_nx_graph (   self)
This function clears self.nx_graph and refills it with info in
self.vtx_to_parents.

Returns
-------
None
def learning.HillClimbingLner.HillClimbingLner.restart (   self,
  mtry_num 
)
This is a hook function that allows subclasses of this class to
restart the trying process when the last try yielded no moves with
positive score change. mtry_num is passed in. (restart_approved,
mtry_num) are returned, where restart_approved is a boolean
signaling approval and mtry_num is an int, usually either the
inputted mtry_num or zero.

Parameters
----------

mtry_num : int
    move try num is the number of the current try

Returns
-------
bool, int
def learning.HillClimbingLner.HillClimbingLner.would_create_cycle (   self,
  move 
)
This function performs the move 'move' on self.nx_graph and then
tests to see if the new graph has cycles. It communicates the result
of the tests in the bool output. It restores nx_graph to its
original state after the testing for cycles is concluded.

Parameters
----------
move : tuple[str, str, str]

Returns
-------
bool

The documentation for this class was generated from the following file: