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

"""
Wrapper module around `sklearn.ensemble`
"""

[docs]__author__ = "Elisha Yadgaran"
import logging from sklearn.ensemble import ( AdaBoostClassifier, BaggingClassifier, ExtraTreesClassifier, GradientBoostingClassifier, HistGradientBoostingClassifier, RandomForestClassifier, VotingClassifier, ) from simpleml.models.classifiers.external_models import ClassificationExternalModelMixin from .base_sklearn_classifier import SklearnClassifier
[docs]LOGGER = logging.getLogger(__name__)
""" AdaBoost Classifier """ # TODO: experiment with try excepts on different estimator types (feature_importances_, coefficients, ...)
[docs]class WrappedSklearnAdaBoostClassifier( AdaBoostClassifier, ClassificationExternalModelMixin ): # Boosted classifier doesnt have an easy way to aggregate feature metadata pass
[docs]class SklearnAdaBoostClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnAdaBoostClassifier(**kwargs)
""" Bagging Classfier """
[docs]class WrappedSklearnBaggingClassifier( BaggingClassifier, ClassificationExternalModelMixin ): # Bagging classifier doesnt have an easy way to aggregate feature metadata pass
[docs]class SklearnBaggingClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnBaggingClassifier(**kwargs)
""" Extra Trees Classifier """
[docs]class WrappedSklearnExtraTreesClassifier( ExtraTreesClassifier, ClassificationExternalModelMixin ):
[docs] def get_feature_metadata(self, features, **kwargs): feature_importances = self.feature_importances_.squeeze() if features is None or len(features) < len(feature_importances): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(feature_importances)) return dict(zip(features, feature_importances))
[docs]class SklearnExtraTreesClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnExtraTreesClassifier(**kwargs)
""" Gradient Boosting Classifier """
[docs]class WrappedSklearnGradientBoostingClassifier( GradientBoostingClassifier, ClassificationExternalModelMixin ):
[docs] def get_feature_metadata(self, features, **kwargs): feature_importances = self.feature_importances_.squeeze() if features is None or len(features) < len(feature_importances): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(feature_importances)) return dict(zip(features, feature_importances))
[docs]class SklearnGradientBoostingClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnGradientBoostingClassifier(**kwargs)
""" Random Forest Classifier """
[docs]class WrappedSklearnRandomForestClassifier( RandomForestClassifier, ClassificationExternalModelMixin ):
[docs] def get_feature_metadata(self, features, **kwargs): feature_importances = self.feature_importances_.squeeze() if features is None or len(features) < len(feature_importances): LOGGER.warning( "Fewer feature names than features passed, defaulting to numbered list" ) features = range(len(feature_importances)) return dict(zip(features, feature_importances))
[docs]class SklearnRandomForestClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnRandomForestClassifier(**kwargs)
""" Voting Classifier """
[docs]class WrappedSklearnVotingClassifier( VotingClassifier, ClassificationExternalModelMixin ): # Voting classifier doesnt have an easy way to aggregate feature metadata pass
[docs]class SklearnVotingClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnVotingClassifier(**kwargs)
""" Histogram-based Gradient Boosting Classifier """
[docs]class WrappedSklearnHistGradientBoostingClassifier( HistGradientBoostingClassifier, ClassificationExternalModelMixin ): # Voting classifier doesnt have an easy way to aggregate feature metadata pass
[docs]class SklearnHistGradientBoostingClassifier(SklearnClassifier):
[docs] def _create_external_model(self, **kwargs): return WrappedSklearnHistGradientBoostingClassifier(**kwargs)