Skip to content

Commit

Permalink
Merge 5fa4531 into d85dc30
Browse files Browse the repository at this point in the history
  • Loading branch information
StrikerRUS committed Mar 3, 2020
2 parents d85dc30 + 5fa4531 commit 8ea7a4f
Show file tree
Hide file tree
Showing 9 changed files with 465 additions and 72 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -16,6 +16,7 @@ before_install:
- bash .travis/setup.sh

install:
- pip install Cython
- pip install -r requirements-test.txt

script:
Expand Down
3 changes: 2 additions & 1 deletion Dockerfile
Expand Up @@ -29,6 +29,7 @@ RUN apt-get update && \
WORKDIR /m2cgen

COPY requirements-test.txt ./
RUN pip3 install --no-cache-dir -r requirements-test.txt
RUN pip3 install --no-cache-dir Cython && \
pip3 install --no-cache-dir -r requirements-test.txt

CMD python3 setup.py develop && pytest -v -x --fast
4 changes: 2 additions & 2 deletions README.md
Expand Up @@ -42,8 +42,8 @@ pip install m2cgen

| | Classification | Regression |
| --- | --- | --- |
| **Linear** | <ul><li>LogisticRegression</li><li>LogisticRegressionCV</li><li>PassiveAggressiveClassifier</li><li>Perceptron</li><li>RidgeClassifier</li><li>RidgeClassifierCV</li><li>SGDClassifier</li></ul> | <ul><li>scikit-learn<ul><li>ARDRegression</li><li>BayesianRidge</li><li>ElasticNet</li><li>ElasticNetCV</li><li>HuberRegressor</li><li>Lars</li><li>LarsCV</li><li>Lasso</li><li>LassoCV</li><li>LassoLars</li><li>LassoLarsCV</li><li>LassoLarsIC</li><li>LinearRegression</li><li>OrthogonalMatchingPursuit</li><li>OrthogonalMatchingPursuitCV</li><li>PassiveAggressiveRegressor</li><li>RANSACRegressor(only supported regression estimators can be used as a base estimator)</li><li>Ridge</li><li>RidgeCV</li><li>SGDRegressor</li><li>TheilSenRegressor</li></ul><li>StatsModels<ul><li>Generalized Least Squares (GLS)</li><li>Generalized Least Squares with AR Errors (GLSAR)</li><li>Ordinary Least Squares (OLS)</li><li>Weighted Least Squares (WLS)</li></ul></li><ul> |
| **SVM** | <ul><li>LinearSVC</li><li>NuSVC</li><li>SVC</li></ul> | <ul><li>LinearSVR</li><li>NuSVR</li><li>SVR</li></ul> |
| **Linear** | <ul><li>scikit-learn<ul><li>LogisticRegression</li><li>LogisticRegressionCV</li><li>PassiveAggressiveClassifier</li><li>Perceptron</li><li>RidgeClassifier</li><li>RidgeClassifierCV</li><li>SGDClassifier</li></ul></li><li>lightning<ul><li>AdaGradClassifier</li><li>CDClassifier</li><li>FistaClassifier</li><li>SAGAClassifier</li><li>SAGClassifier</li><li>SDCAClassifier</li><li>SGDClassifier</li></ul></li></ul> | <ul><li>scikit-learn<ul><li>ARDRegression</li><li>BayesianRidge</li><li>ElasticNet</li><li>ElasticNetCV</li><li>HuberRegressor</li><li>Lars</li><li>LarsCV</li><li>Lasso</li><li>LassoCV</li><li>LassoLars</li><li>LassoLarsCV</li><li>LassoLarsIC</li><li>LinearRegression</li><li>OrthogonalMatchingPursuit</li><li>OrthogonalMatchingPursuitCV</li><li>PassiveAggressiveRegressor</li><li>RANSACRegressor(only supported regression estimators can be used as a base estimator)</li><li>Ridge</li><li>RidgeCV</li><li>SGDRegressor</li><li>TheilSenRegressor</li></ul><li>StatsModels<ul><li>Generalized Least Squares (GLS)</li><li>Generalized Least Squares with AR Errors (GLSAR)</li><li>Ordinary Least Squares (OLS)</li><li>Weighted Least Squares (WLS)</li></ul><li>lightning<ul><li>AdaGradRegressor</li><li>CDRegressor</li><li>FistaRegressor</li><li>SAGARegressor</li><li>SAGRegressor</li><li>SDCARegressor</li></ul></li></ul> |
| **SVM** | <ul><li>scikit-learn<ul><li>LinearSVC</li><li>NuSVC</li><li>SVC</li></ul></li><li>lightning<ul><li>LinearSVC</li></ul></li></ul> | <ul><li>scikit-learn<ul><li>LinearSVR</li><li>NuSVR</li><li>SVR</li></ul></li><li>lightning<ul><li>LinearSVR</li></ul></li></ul> |
| **Tree** | <ul><li>DecisionTreeClassifier</li><li>ExtraTreeClassifier</li></ul> | <ul><li>DecisionTreeRegressor</li><li>ExtraTreeRegressor</li></ul> |
| **Random Forest** | <ul><li>ExtraTreesClassifier</li><li>LGBMClassifier(rf booster only)</li><li>RandomForestClassifier</li><li>XGBRFClassifier(binary only, multiclass is not supported yet)</li></ul> | <ul><li>ExtraTreesRegressor</li><li>LGBMRegressor(rf booster only)</li><li>RandomForestRegressor</li><li>XGBRFRegressor</li></ul> |
| **Boosting** | <ul><li>LGBMClassifier(gbdt/dart/goss booster only)</li><li>XGBClassifier(gbtree/gblinear booster only)</li><ul> | <ul><li>LGBMRegressor(gbdt/dart/goss booster only)</li><li>XGBRegressor(gbtree/gblinear booster only)</li></ul> |
Expand Down
137 changes: 82 additions & 55 deletions m2cgen/assemblers/__init__.py
Expand Up @@ -25,75 +25,102 @@

SUPPORTED_MODELS = {
# LightGBM
"LGBMClassifier": LightGBMModelAssembler,
"LGBMRegressor": LightGBMModelAssembler,
"lightgbm_LGBMClassifier": LightGBMModelAssembler,
"lightgbm_LGBMRegressor": LightGBMModelAssembler,

# XGBoost
"XGBClassifier": XGBoostModelAssemblerSelector,
"XGBRFClassifier": XGBoostModelAssemblerSelector,
"XGBRegressor": XGBoostModelAssemblerSelector,
"XGBRFRegressor": XGBoostModelAssemblerSelector,

# SVM
"LinearSVC": SklearnLinearModelAssembler,
"LinearSVR": SklearnLinearModelAssembler,
"NuSVC": SVMModelAssembler,
"NuSVR": SVMModelAssembler,
"SVC": SVMModelAssembler,
"SVR": SVMModelAssembler,
"xgboost_XGBClassifier": XGBoostModelAssemblerSelector,
"xgboost_XGBRFClassifier": XGBoostModelAssemblerSelector,
"xgboost_XGBRegressor": XGBoostModelAssemblerSelector,
"xgboost_XGBRFRegressor": XGBoostModelAssemblerSelector,

# Sklearn SVM
"sklearn_LinearSVC": SklearnLinearModelAssembler,
"sklearn_LinearSVR": SklearnLinearModelAssembler,
"sklearn_NuSVC": SVMModelAssembler,
"sklearn_NuSVR": SVMModelAssembler,
"sklearn_SVC": SVMModelAssembler,
"sklearn_SVR": SVMModelAssembler,

# Lightning SVM
"lightning_LinearSVC": SklearnLinearModelAssembler,
"lightning_LinearSVR": SklearnLinearModelAssembler,

# Sklearn Linear Regressors
"ARDRegression": SklearnLinearModelAssembler,
"BayesianRidge": SklearnLinearModelAssembler,
"ElasticNet": SklearnLinearModelAssembler,
"ElasticNetCV": SklearnLinearModelAssembler,
"HuberRegressor": SklearnLinearModelAssembler,
"Lars": SklearnLinearModelAssembler,
"LarsCV": SklearnLinearModelAssembler,
"Lasso": SklearnLinearModelAssembler,
"LassoCV": SklearnLinearModelAssembler,
"LassoLars": SklearnLinearModelAssembler,
"LassoLarsCV": SklearnLinearModelAssembler,
"LassoLarsIC": SklearnLinearModelAssembler,
"LinearRegression": SklearnLinearModelAssembler,
"OrthogonalMatchingPursuit": SklearnLinearModelAssembler,
"OrthogonalMatchingPursuitCV": SklearnLinearModelAssembler,
"PassiveAggressiveRegressor": SklearnLinearModelAssembler,
"RANSACRegressor": RANSACModelAssembler,
"Ridge": SklearnLinearModelAssembler,
"RidgeCV": SklearnLinearModelAssembler,
"SGDRegressor": SklearnLinearModelAssembler,
"TheilSenRegressor": SklearnLinearModelAssembler,
"sklearn_ARDRegression": SklearnLinearModelAssembler,
"sklearn_BayesianRidge": SklearnLinearModelAssembler,
"sklearn_ElasticNet": SklearnLinearModelAssembler,
"sklearn_ElasticNetCV": SklearnLinearModelAssembler,
"sklearn_HuberRegressor": SklearnLinearModelAssembler,
"sklearn_Lars": SklearnLinearModelAssembler,
"sklearn_LarsCV": SklearnLinearModelAssembler,
"sklearn_Lasso": SklearnLinearModelAssembler,
"sklearn_LassoCV": SklearnLinearModelAssembler,
"sklearn_LassoLars": SklearnLinearModelAssembler,
"sklearn_LassoLarsCV": SklearnLinearModelAssembler,
"sklearn_LassoLarsIC": SklearnLinearModelAssembler,
"sklearn_LinearRegression": SklearnLinearModelAssembler,
"sklearn_OrthogonalMatchingPursuit": SklearnLinearModelAssembler,
"sklearn_OrthogonalMatchingPursuitCV": SklearnLinearModelAssembler,
"sklearn_PassiveAggressiveRegressor": SklearnLinearModelAssembler,
"sklearn_RANSACRegressor": RANSACModelAssembler,
"sklearn_Ridge": SklearnLinearModelAssembler,
"sklearn_RidgeCV": SklearnLinearModelAssembler,
"sklearn_SGDRegressor": SklearnLinearModelAssembler,
"sklearn_TheilSenRegressor": SklearnLinearModelAssembler,

# Statsmodels Linear Regressors
"RegressionResultsWrapper": StatsmodelsLinearModelAssembler,
"RegularizedResultsWrapper": StatsmodelsLinearModelAssembler,

# Linear Classifiers
"LogisticRegression": SklearnLinearModelAssembler,
"LogisticRegressionCV": SklearnLinearModelAssembler,
"PassiveAggressiveClassifier": SklearnLinearModelAssembler,
"Perceptron": SklearnLinearModelAssembler,
"RidgeClassifier": SklearnLinearModelAssembler,
"RidgeClassifierCV": SklearnLinearModelAssembler,
"SGDClassifier": SklearnLinearModelAssembler,
"statsmodels_RegressionResultsWrapper": StatsmodelsLinearModelAssembler,
"statsmodels_RegularizedResultsWrapper": StatsmodelsLinearModelAssembler,

# Lightning Linear Regressors
"lightning_AdaGradRegressor": SklearnLinearModelAssembler,
"lightning_CDRegressor": SklearnLinearModelAssembler,
"lightning_FistaRegressor": SklearnLinearModelAssembler,
"lightning_SAGARegressor": SklearnLinearModelAssembler,
"lightning_SAGRegressor": SklearnLinearModelAssembler,
"lightning_SDCARegressor": SklearnLinearModelAssembler,

# Sklearn Linear Classifiers
"sklearn_LogisticRegression": SklearnLinearModelAssembler,
"sklearn_LogisticRegressionCV": SklearnLinearModelAssembler,
"sklearn_PassiveAggressiveClassifier": SklearnLinearModelAssembler,
"sklearn_Perceptron": SklearnLinearModelAssembler,
"sklearn_RidgeClassifier": SklearnLinearModelAssembler,
"sklearn_RidgeClassifierCV": SklearnLinearModelAssembler,
"sklearn_SGDClassifier": SklearnLinearModelAssembler,

# Lightning Linear Classifiers
"lightning_AdaGradClassifier": SklearnLinearModelAssembler,
"lightning_CDClassifier": SklearnLinearModelAssembler,
"lightning_FistaClassifier": SklearnLinearModelAssembler,
"lightning_SAGAClassifier": SklearnLinearModelAssembler,
"lightning_SAGClassifier": SklearnLinearModelAssembler,
"lightning_SDCAClassifier": SklearnLinearModelAssembler,
"lightning_SGDClassifier": SklearnLinearModelAssembler,

# Decision trees
"DecisionTreeClassifier": TreeModelAssembler,
"DecisionTreeRegressor": TreeModelAssembler,
"ExtraTreeClassifier": TreeModelAssembler,
"ExtraTreeRegressor": TreeModelAssembler,
"sklearn_DecisionTreeClassifier": TreeModelAssembler,
"sklearn_DecisionTreeRegressor": TreeModelAssembler,
"sklearn_ExtraTreeClassifier": TreeModelAssembler,
"sklearn_ExtraTreeRegressor": TreeModelAssembler,

# Ensembles
"ExtraTreesClassifier": RandomForestModelAssembler,
"ExtraTreesRegressor": RandomForestModelAssembler,
"RandomForestClassifier": RandomForestModelAssembler,
"RandomForestRegressor": RandomForestModelAssembler,
"sklearn_ExtraTreesClassifier": RandomForestModelAssembler,
"sklearn_ExtraTreesRegressor": RandomForestModelAssembler,
"sklearn_RandomForestClassifier": RandomForestModelAssembler,
"sklearn_RandomForestRegressor": RandomForestModelAssembler,
}


def _get_full_model_name(model):
type_name = type(model)
return "{}_{}".format(type_name.__module__.split(".")[0],
type_name.__name__)


def get_assembler_cls(model):
model_name = type(model).__name__
model_name = _get_full_model_name(model)
assembler_cls = SUPPORTED_MODELS.get(model_name)

if not assembler_cls:
Expand Down
3 changes: 2 additions & 1 deletion m2cgen/assemblers/linear.py
Expand Up @@ -33,7 +33,8 @@ def _get_coef(self):
class SklearnLinearModelAssembler(BaseLinearModelAssembler):

def _get_intercept(self):
return self.model.intercept_
return getattr(self.model, "intercept_",
np.zeros(self._get_coef().shape[0]))

def _get_coef(self):
return self.model.coef_
Expand Down
3 changes: 2 additions & 1 deletion requirements-test.txt
@@ -1,4 +1,4 @@
numpy==1.15.1
numpy==1.16.1
scipy==1.1.0
scikit-learn==0.20.2
xgboost==0.90
Expand All @@ -10,3 +10,4 @@ coveralls==1.9.2
pytest-cov==2.8.1
py-mini-racer==0.1.18
statsmodels==0.10.2
git+git://github.com/scikit-learn-contrib/lightning.git@b96f9c674968496e854078163c8814049a7b9f43

0 comments on commit 8ea7a4f

Please sign in to comment.