Module cognet.model

Expand source code
from quasinet.qnet import Qnet, load_qnet, save_qnet
from quasinet.qnet import export_qnet_tree, export_qnet_graph
from cognet.util import assert_None
class model:
    """Facilitate training and constructing Qnet
    """

    def __init__(self):
        """Init
        """
        self.myQnet = None
        self.features = None
        self.samples = None
        self.immutable_vars = None
        self.mutable_vars = None

    def fit(self,
            featurenames=None,
            samples=None,
            data_obj=None,
            njobs=4):
        """[summary]

        Args:
          featurenames ([type]): [description]
          samples ([type], optional): [description]. Defaults to None.
          data_obj ([type], optional): [description]. Defaults to None.
          njobs (int, optional): [description]. Defaults to 2.

        Raises:
            ValueError: [description]
            ValueError: [description]
        """
        num_None = assert_None([featurenames,samples,data_obj], raise_error=False)
        if num_None == 0:
            raise ValueError("input either samples and features or data object, not both!")
        elif data_obj is not None:
            featurenames, samples=data_obj.train() # returns the training data
            self.immutable_vars, self.mutable_vars = data_obj.immutable_vars, data_obj.mutable_vars
        elif num_None > 1:
            raise ValueError("input both samples and features or data object!")
        self.myQnet = Qnet(n_jobs=njobs, feature_names=featurenames)
        print("qnet")
        self.myQnet.fit(samples)
        print("done")
        self.samples = samples
        self.features = featurenames

    def save(self,
             file_path=None):
        """[summary]

        Args:
          file_path ([type], optional): [description]. Defaults to None.
        """
        assert_None([self.myQnet])
        if file_path is None:
            file_path = 'tmp_Qnet.joblib'
        save_qnet(self.myQnet, file_path)
    
    def load(self,
             file_path):
        """[summary]

        Args:
          file_path ([type]): [description]

        Returns:
          [type]: [description]
        """
        ## can also directly use load from joblib, thoughts?
        print("updating")
        self.myQnet = load_qnet(file_path)
        self.features = self.myQnet.feature_names
        return self.myQnet

    def export_dot(self,
                   filename,
                   index=[3],
                   path='',
                   generate_trees=False,
                   threhold=0.2):
        """[summary]

        Args:
            filename ([type]): [description]
            index (list, optional): [description]. Defaults to [6].
            path (str, optional): [description]. Defaults to ''.
            generate_trees (bool, optional): [description]. Defaults to False.
            threhold (float, optional): [description]. Defaults to 0.2.
        """
        if not generate_trees:
            export_qnet_graph(self.myQnet, 
                              threshold, path+filename)
        else:
            for i in index:
                export_qnet_tree(self.myQnet,
                                 i, filename)

Classes

class model

Facilitate training and constructing Qnet

Init

Expand source code
class model:
    """Facilitate training and constructing Qnet
    """

    def __init__(self):
        """Init
        """
        self.myQnet = None
        self.features = None
        self.samples = None
        self.immutable_vars = None
        self.mutable_vars = None

    def fit(self,
            featurenames=None,
            samples=None,
            data_obj=None,
            njobs=4):
        """[summary]

        Args:
          featurenames ([type]): [description]
          samples ([type], optional): [description]. Defaults to None.
          data_obj ([type], optional): [description]. Defaults to None.
          njobs (int, optional): [description]. Defaults to 2.

        Raises:
            ValueError: [description]
            ValueError: [description]
        """
        num_None = assert_None([featurenames,samples,data_obj], raise_error=False)
        if num_None == 0:
            raise ValueError("input either samples and features or data object, not both!")
        elif data_obj is not None:
            featurenames, samples=data_obj.train() # returns the training data
            self.immutable_vars, self.mutable_vars = data_obj.immutable_vars, data_obj.mutable_vars
        elif num_None > 1:
            raise ValueError("input both samples and features or data object!")
        self.myQnet = Qnet(n_jobs=njobs, feature_names=featurenames)
        print("qnet")
        self.myQnet.fit(samples)
        print("done")
        self.samples = samples
        self.features = featurenames

    def save(self,
             file_path=None):
        """[summary]

        Args:
          file_path ([type], optional): [description]. Defaults to None.
        """
        assert_None([self.myQnet])
        if file_path is None:
            file_path = 'tmp_Qnet.joblib'
        save_qnet(self.myQnet, file_path)
    
    def load(self,
             file_path):
        """[summary]

        Args:
          file_path ([type]): [description]

        Returns:
          [type]: [description]
        """
        ## can also directly use load from joblib, thoughts?
        print("updating")
        self.myQnet = load_qnet(file_path)
        self.features = self.myQnet.feature_names
        return self.myQnet

    def export_dot(self,
                   filename,
                   index=[3],
                   path='',
                   generate_trees=False,
                   threhold=0.2):
        """[summary]

        Args:
            filename ([type]): [description]
            index (list, optional): [description]. Defaults to [6].
            path (str, optional): [description]. Defaults to ''.
            generate_trees (bool, optional): [description]. Defaults to False.
            threhold (float, optional): [description]. Defaults to 0.2.
        """
        if not generate_trees:
            export_qnet_graph(self.myQnet, 
                              threshold, path+filename)
        else:
            for i in index:
                export_qnet_tree(self.myQnet,
                                 i, filename)

Methods

def export_dot(self, filename, index=[3], path='', generate_trees=False, threhold=0.2)

[summary]

Args

filename : [type]
[description]
index : list, optional
[description]. Defaults to [6].
path : str, optional
[description]. Defaults to ''.
generate_trees : bool, optional
[description]. Defaults to False.
threhold : float, optional
[description]. Defaults to 0.2.
Expand source code
def export_dot(self,
               filename,
               index=[3],
               path='',
               generate_trees=False,
               threhold=0.2):
    """[summary]

    Args:
        filename ([type]): [description]
        index (list, optional): [description]. Defaults to [6].
        path (str, optional): [description]. Defaults to ''.
        generate_trees (bool, optional): [description]. Defaults to False.
        threhold (float, optional): [description]. Defaults to 0.2.
    """
    if not generate_trees:
        export_qnet_graph(self.myQnet, 
                          threshold, path+filename)
    else:
        for i in index:
            export_qnet_tree(self.myQnet,
                             i, filename)
def fit(self, featurenames=None, samples=None, data_obj=None, njobs=4)

[summary]

Args

featurenames : [type]
[description]
samples : [type], optional
[description]. Defaults to None.
data_obj : [type], optional
[description]. Defaults to None.
njobs : int, optional
[description]. Defaults to 2.

Raises

ValueError
[description]
ValueError
[description]
Expand source code
def fit(self,
        featurenames=None,
        samples=None,
        data_obj=None,
        njobs=4):
    """[summary]

    Args:
      featurenames ([type]): [description]
      samples ([type], optional): [description]. Defaults to None.
      data_obj ([type], optional): [description]. Defaults to None.
      njobs (int, optional): [description]. Defaults to 2.

    Raises:
        ValueError: [description]
        ValueError: [description]
    """
    num_None = assert_None([featurenames,samples,data_obj], raise_error=False)
    if num_None == 0:
        raise ValueError("input either samples and features or data object, not both!")
    elif data_obj is not None:
        featurenames, samples=data_obj.train() # returns the training data
        self.immutable_vars, self.mutable_vars = data_obj.immutable_vars, data_obj.mutable_vars
    elif num_None > 1:
        raise ValueError("input both samples and features or data object!")
    self.myQnet = Qnet(n_jobs=njobs, feature_names=featurenames)
    print("qnet")
    self.myQnet.fit(samples)
    print("done")
    self.samples = samples
    self.features = featurenames
def load(self, file_path)

[summary]

Args

file_path : [type]
[description]

Returns

[type]
[description]
Expand source code
def load(self,
         file_path):
    """[summary]

    Args:
      file_path ([type]): [description]

    Returns:
      [type]: [description]
    """
    ## can also directly use load from joblib, thoughts?
    print("updating")
    self.myQnet = load_qnet(file_path)
    self.features = self.myQnet.feature_names
    return self.myQnet
def save(self, file_path=None)

[summary]

Args

file_path : [type], optional
[description]. Defaults to None.
Expand source code
def save(self,
         file_path=None):
    """[summary]

    Args:
      file_path ([type], optional): [description]. Defaults to None.
    """
    assert_None([self.myQnet])
    if file_path is None:
        file_path = 'tmp_Qnet.joblib'
    save_qnet(self.myQnet, file_path)