from sklearn.ensemble import RandomForestClassifier as randomforest
from sklearn.svm import SVC
from sklearn.base import ClassifierMixin
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import VarianceThreshold
from sklearn.neural_network import MLPClassifier
__all__ = ['randomforest', 'svm', 'neuralnetwork']
class OddtClassifier(ClassifierMixin):
_model = None
def __init__(self, *args, **kwargs):
""" Assemble Neural network or SVM using sklearn pipeline """
# Cherrypick arguments for model. Exclude 'steps', which is pipeline argument
local_kwargs = {key: kwargs.pop(key) for key in list(kwargs.keys())
if key != 'steps' and '__' not in key}
if self._model is None:
raise ValueError('Model not specified!')
model = self._model(*args, **local_kwargs)
self.pipeline = Pipeline([('empty_dims_remover', VarianceThreshold()),
('scaler', StandardScaler()),
('model', model)]).set_params(**kwargs)
def get_params(self, deep=True):
return self.pipeline.get_params(deep=deep)
def set_params(self, **kwargs):
return self.pipeline.set_params(**kwargs)
def fit(self, descs, target_values, **kwargs):
self.pipeline.fit(descs, target_values, **kwargs)
return self
def predict(self, descs):
return self.pipeline.predict(descs)
def predict_proba(self, descs):
return self.pipeline.predict_proba(descs)
def predict_log_proba(self, descs):
return self.pipeline.predict_log_proba(descs)
def score(self, descs, target_values):
return self.pipeline.score(descs, target_values)
[docs]class neuralnetwork(OddtClassifier):
_model = MLPClassifier
def __init__(self, *args, **kwargs):
super(neuralnetwork, self).__init__(*args, **kwargs)
[docs]class svm(OddtClassifier):
_model = SVC
def __init__(self, *args, **kwargs):
super(svm, self).__init__(*args, **kwargs)