Source code for simpleml.models.classifiers.sklearn.linear_model

"""
Wrapper module around `sklearn.linear_model`
"""

[docs]__author__ = "Elisha Yadgaran"
import logging from sklearn.linear_model import ( LogisticRegression, LogisticRegressionCV, Perceptron, RidgeClassifier, RidgeClassifierCV, SGDClassifier, ) from simpleml.models.classifiers.external_models import ClassificationExternalModelMixin from .base_sklearn_classifier import SklearnClassifier
[docs]LOGGER = logging.getLogger(__name__)
""" Logistic Regression """
[docs]class WrappedSklearnLogisticRegression( LogisticRegression, ClassificationExternalModelMixin ):
[docs] def get_feature_metadata(self, features, **kwargs): coefficients = self.coef_.squeeze() if features is None or len(features) < len(coefficients): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(coefficients)) return dict(zip(features, coefficients))
[docs]class SklearnLogisticRegression(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnLogisticRegression(**kwargs)
[docs]class WrappedSklearnLogisticRegressionCV( LogisticRegressionCV, ClassificationExternalModelMixin ):
[docs] def get_feature_metadata(self, features, **kwargs): coefficients = self.coef_.squeeze() if features is None or len(features) < len(coefficients): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(coefficients)) return dict(zip(features, coefficients))
[docs]class SklearnLogisticRegressionCV(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnLogisticRegressionCV(**kwargs)
""" Perceptron """
[docs]class WrappedSklearnPerceptron(Perceptron, ClassificationExternalModelMixin):
[docs] def get_feature_metadata(self, features, **kwargs): coefficients = self.coef_.squeeze() if features is None or len(features) < len(coefficients): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(coefficients)) return dict(zip(features, coefficients))
[docs]class SklearnPerceptron(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnPerceptron(**kwargs)
""" Ridge Classifier """
[docs]class WrappedSklearnRidgeClassifier(RidgeClassifier, ClassificationExternalModelMixin):
[docs] def get_feature_metadata(self, features, **kwargs): coefficients = self.coef_.squeeze() if features is None or len(features) < len(coefficients): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(coefficients)) return dict(zip(features, coefficients))
[docs]class SklearnRidgeClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnRidgeClassifier(**kwargs)
[docs]class WrappedSklearnRidgeClassifierCV( RidgeClassifierCV, ClassificationExternalModelMixin ):
[docs] def get_feature_metadata(self, features, **kwargs): coefficients = self.coef_.squeeze() if features is None or len(features) < len(coefficients): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(coefficients)) return dict(zip(features, coefficients))
[docs]class SklearnRidgeClassifierCV(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnRidgeClassifierCV(**kwargs)
""" SGD Classifier """
[docs]class WrappedSklearnSGDClassifier(SGDClassifier, ClassificationExternalModelMixin):
[docs] def get_feature_metadata(self, features, **kwargs): coefficients = self.coef_.squeeze() if features is None or len(features) < len(coefficients): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(coefficients)) return dict(zip(features, coefficients))
[docs]class SklearnSGDClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnSGDClassifier(**kwargs)