Source code for mindpype.classifier

"""

Use this class to create a classifier object that can be used by the
MindPype Classifier kernel.

.. note::
   MindPype Classifier objects must be created in order to be used by
   the MindPype Classifier kernel.

"""

from sklearn.linear_model import LogisticRegression
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.svm import SVC
from .core import MPBase, MPEnums


[docs] class Classifier(MPBase): """ A classifier that can be used by different MindPype kernels Args: MPBase (MPBase): The base class for all MindPype objects Parameters ---------- sess : Session Session where the Array object will exist ctype : str The name of the classifier to be created classifier : Classifier The classifier object to be used within the node (should be the return from a MindPype kernel) Attributes ---------- ctype : str One of ['lda', 'svm', 'logistic regression', 'custom'], corresponding to the type of classifier classifier : Classifier The Classifier object (ie. Scipy classifier object) that will dictate this node's function Examples -------- .. code:: python from mindpype import Classifier # Create a MindPype Classifier object using the factory method classifier_object = Classifier.create_LDA(sess, solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001) Return ------ MindPype Classifier object : Classifier The MindPype Classifier object that can be used by the MindPype Classifier kernel """ # these are the possible internal methods for storing the filter # parameters which determine how it will be executed ctypes = ["lda", "svm", "logistic regression", "custom"] def __init__(self, sess, ctype, classifier): """ Constructor to create a new filter object """ self.ctype = ctype self.classifier = classifier super().__init__(MPEnums.CLASSIFIER, sess) def __str__(self): return ( "MindPype {} Classifier with following" + f"attributes:\nClassifier Type: {self.ctype}\n" )
[docs] @classmethod def create_SVM( cls, sess, C=1, kernel="rbf", degree=3, gamma="scale", coef0=0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape="ovr", break_ties=False, random_state=None, ): """ Factory Method to create an SVM MindPype Classifier object. .. note:: This is simply a wrapper for the sklearn SVC object. .. note:: This method utilizes the :class:`SVC <sklearn:sklearn.svm.SVC>` class from the :mod:`sklearn <sklearn:sklearn>` package. Parameters ---------- sess : session object Session where the SVM MindPype Classifier object will exist Examples -------- >>> from mindpype import Classifier >>> classifier_object = Classifier.create_SVM(sess) Return ------ MindPype Classifier Object : Classifier MindPype Classifier Object containing the SVM classifier """ svm_object = SVC( C, kernel, degree, gamma, coef0, shrinking, probability, tol, cache_size, class_weight, verbose, max_iter, decision_function_shape, break_ties, random_state, ) f = cls(sess, "svm", svm_object) sess.add_misc_mp_obj(f) return f
[docs] @classmethod def create_LDA( cls, sess, solver="svd", shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001, covariance_estimator=None, ): """ Factory method to create an LDA MindPype Classifier object. .. note:: This is simply a wrapper for the sklearn LDA object. .. note:: This method utilizes the :class:`LinearDiscriminantAnalysis <sklearn:sklearn.discriminant_analysis.LinearDiscriminantAnalysis>` class from the :mod:`sklearn <sklearn:sklearn>` package. Parameters ---------- sess : Session Session where the LDA MindPype Classifier object will exist Return ------ MindPype Classifier : Classifier MindPype Classifier Object containing the LDA classifier Examples -------- >>> from mindpype import Classifier >>> classifier_object = Classifier.create_LDA(sess) """ lda_object = LinearDiscriminantAnalysis( solver, shrinkage, priors, n_components, store_covariance, tol, covariance_estimator, ) # clf = classification.TSclassifier(clf=lda_object) f = cls(sess, "lda", lda_object) sess.add_misc_mp_obj(f) return f
[docs] @classmethod def create_logistic_regression( cls, sess, penalty="l2", dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver="lbfgs", max_iter=100, multi_class="auto", verbose=0, warm_start=False, n_jobs=None, l1_ratio=None, ): """ .. note:: This is simply a wrapper for the sklearn Logistic Regression object. .. note:: This method utilizes the :class:`LogisticRegression <sklearn:sklearn.linear_model.LogisticRegression>` class from the :mod:`sklearn <sklearn:sklearn>` package. Parameters ---------- sess : session object Session where the Logistic Regression MindPype Classifier object will exist Return ------ MindPype Classifier Object : Classifier MindPype Classifier Object containing the Logistic Regression classifier Examples -------- >>> from mindpype import Classifier >>> classifier_object = Classifier.create_logistic_regression(sess) """ log_reg_object = LogisticRegression( penalty, dual=dual, tol=tol, C=C, fit_intercept=fit_intercept, intercept_scaling=intercept_scaling, class_weight=class_weight, random_state=random_state, solver=solver, max_iter=max_iter, multi_class=multi_class, verbose=verbose, warm_start=warm_start, n_jobs=n_jobs, l1_ratio=l1_ratio, ) f = cls(sess, "logistic regression", log_reg_object) sess.add_misc_mp_obj(f) return f
[docs] @classmethod def create_custom_classifier(cls, sess, classifier_object, classifier_type): """ Factory method to create a generic MindPype Classifier object. Parameters ---------- sess : Session The MindPype Session object to which the classifier will be added. classifier_object : Sklearn Classifier object The classifier object to be added to the MindPype Session. classifier_type : str The type of classifier to be added to the MindPype Session. Return ------ Classifier Object : Classifier MindPype Classifier object that contains the classifier object and type. Examples -------- >>> from mindpype import Classifier >>> from sklearn.svm import SVC >>> svm_object = SVC() >>> classifier_object = Classifier.create_custom_classifier(sess, svm_object, 'svm') """ f = cls(sess, classifier_type, classifier_object) sess.add_misc_mp_obj(f) return f