Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add module for sklearn external configurables #49

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
68 changes: 68 additions & 0 deletions gin/sklearn/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# coding=utf-8
# Copyright 2018 The Gin-Config Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Init file for scikit-learn-specific Gin-Config package."""

# pylint: disable=g-import-not-at-top


# Ensure scikit-learn is importable and its version is sufficiently recent.
# This needs to happen before anything else, since the imports below will try
# to import scikit-learn, too.
def _ensure_sklearn_install(): # pylint: disable=g-statement-before-imports
"""Attempt to import scikit-learn, and ensure its version is sufficient.

Raises:
ImportError: If either scikit-learn is not importable or its version is
inadequate.
"""
try:
import sklearn
except ImportError:
# Print more informative error message, then reraise.
print("\n\nFailed to import scikit-learn. Please note that scikit-learn "
"is not installed by default when you install Gin-Config. This is "
"so that users can decide whether to install TensorFlow, "
"GPU-enabled Tensorflow, PyTorch, or scikit-learn. To use "
"Gin-Config with scikit-learn, please install the most recent "
"version of scikit-learn, by following instructions at "
"https://scikit-learn.org/stable/install.html.\n\n")
raise

# Update this whenever we need to depend on a newer scikit-learn release.
required_sklearn_version = "0.19.1"

import distutils.version

if (distutils.version.LooseVersion(sklearn.__version__) <
distutils.version.LooseVersion(required_sklearn_version)):
raise ImportError(
"This version of Gin-Config requires TensorFlow "
"version >= {required}; Detected an installation of version {present}. "
"Please upgrade scikit-learn to proceed.".format(
required=required_sklearn_version,
present=sklearn.__version__))


_ensure_sklearn_install()


# Cleanup symbols to avoid polluting namespace.
import sys as _sys
import .external_configurables as _ext
for symbol in ["_ensure_sklearn_install", "_sys", "_ext"]:
delattr(_sys.modules[__name__], symbol)

# pylint: enable=g-import-not-at-top
300 changes: 300 additions & 0 deletions gin/sklearn/external_configurables.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,300 @@
# coding=utf-8
# Copyright 2018 The Gin-Config Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Supplies a default set of configurables from core scikit-learn."""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from gin import config

import sklearn


# Most of the classes mentioned in the docs:
# https://scikit-learn.org/stable/modules/classes.html

# Clustering
import sklearn.cluster
gin.external_configurable(sklearn.cluster.AffinityPropagation)
gin.external_configurable(sklearn.cluster.AgglomerativeClustering)
gin.external_configurable(sklearn.cluster.Birch)
gin.external_configurable(sklearn.cluster.DBSCAN)
gin.external_configurable(sklearn.cluster.FeatureAgglomeration)
gin.external_configurable(sklearn.cluster.KMeans)
gin.external_configurable(sklearn.cluster.MiniBatchKMeans)
gin.external_configurable(sklearn.cluster.MeanShift)
gin.external_configurable(sklearn.cluster.OPTICS)
gin.external_configurable(sklearn.cluster.SpectralClustering)
gin.external_configurable(sklearn.cluster.SpectralBiclustering)
gin.external_configurable(sklearn.cluster.SpectralCoclustering)

# Cross Decomposition
import sklearn.cross_decomposition
gin.external_configurable(sklearn.cross_decomposition.CCA)
gin.external_configurable(sklearn.cross_decomposition.PLSCanonical)
gin.external_configurable(sklearn.cross_decomposition.PLSRegression)
gin.external_configurable(sklearn.cross_decomposition.PLSSVD)

# Decomposition
import sklearn.decomposition
gin.external_configurable(sklearn.decomposition.DictionaryLearning)
gin.external_configurable(sklearn.decomposition.FactorAnalysis)
gin.external_configurable(sklearn.decomposition.FastICA)
gin.external_configurable(sklearn.decomposition.IncrementalPCA)
gin.external_configurable(sklearn.decomposition.KernelPCA)
gin.external_configurable(sklearn.decomposition.LatentDirichletAllocation)
gin.external_configurable(sklearn.decomposition.MiniBatchDictionaryLearning)
gin.external_configurable(sklearn.decomposition.MiniBatchSparsePCA)
gin.external_configurable(sklearn.decomposition.NMF)
gin.external_configurable(sklearn.decomposition.PCA)
gin.external_configurable(sklearn.decomposition.SparsePCA)
gin.external_configurable(sklearn.decomposition.SparseCoder)
gin.external_configurable(sklearn.decomposition.TruncatedSVD)

# Discriminant Analysis
import sklearn.discriminant_analysis
gin.external_configurable(sklearn.discriminant_analysis.LinearDiscriminantAnalysis)
gin.external_configurable(sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis)

# Ensemble
import sklearn.ensemble
gin.external_configurable(sklearn.ensemble.AdaBoostClassifier)
gin.external_configurable(sklearn.ensemble.AdaBoostRegressor)
gin.external_configurable(sklearn.ensemble.BaggingClassifier)
gin.external_configurable(sklearn.ensemble.BaggingRegressor)
gin.external_configurable(sklearn.ensemble.ExtraTreesClassifier)
gin.external_configurable(sklearn.ensemble.ExtraTreesRegressor)
gin.external_configurable(sklearn.ensemble.GradientBoostingClassifier)
gin.external_configurable(sklearn.ensemble.GradientBoostingRegressor)
gin.external_configurable(sklearn.ensemble.IsolationForest)
gin.external_configurable(sklearn.ensemble.RandomForestClassifier)
gin.external_configurable(sklearn.ensemble.RandomForestRegressor)
gin.external_configurable(sklearn.ensemble.StackingClassifier)
gin.external_configurable(sklearn.ensemble.StackingRegressor)
gin.external_configurable(sklearn.ensemble.VotingClassifier)
gin.external_configurable(sklearn.ensemble.VotingRegressor)

# Feature Extraction
import sklearn.feature_extraction
gin.external_configurable(sklearn.feature_extraction.DictVectorizer)
gin.external_configurable(sklearn.feature_extraction.FeatureHasher)
gin.external_configurable(sklearn.feature_extraction.image.extract_patches_2d)
gin.external_configurable(sklearn.feature_extraction.image.grid_to_graph)
gin.external_configurable(sklearn.feature_extraction.image.img_to_graph)
gin.external_configurable(sklearn.feature_extraction.image.reconstruct_from_patches_2d)
gin.external_configurable(sklearn.feature_extraction.image.PatchExtractor)
gin.external_configurable(sklearn.feature_extraction.text.CountVectorizer)
gin.external_configurable(sklearn.feature_extraction.text.HashingVectorizer)
gin.external_configurable(sklearn.feature_extraction.text.TfidfTransformer)
gin.external_configurable(sklearn.feature_extraction.text.TfidfVectorizer)

# Feature Selection
import sklearn.feature_selection
gin.external_configurable(sklearn.feature_selection.GenericUnivariateSelect)
gin.external_configurable(sklearn.feature_selection.SelectPercentile)
gin.external_configurable(sklearn.feature_selection.SelectKBest)
gin.external_configurable(sklearn.feature_selection.SelectFpr)
gin.external_configurable(sklearn.feature_selection.SelectFdr)
gin.external_configurable(sklearn.feature_selection.SelectFromModel)
gin.external_configurable(sklearn.feature_selection.SelectFwe)
gin.external_configurable(sklearn.feature_selection.RFE)
gin.external_configurable(sklearn.feature_selection.RFECV)
gin.external_configurable(sklearn.feature_selection.VarianceThreshold)
gin.external_configurable(sklearn.feature_selection.chi2)
gin.external_configurable(sklearn.feature_selection.f_classif)
gin.external_configurable(sklearn.feature_selection.f_regression)
gin.external_configurable(sklearn.feature_selection.mutual_info_classif)
gin.external_configurable(sklearn.feature_selection.mutual_info_regression)

# Gaussian Processes
import sklearn.gaussian_process
gin.external_configurable(sklearn.gaussian_process.GaussianProcessRegressor)
gin.external_configurable(sklearn.gaussian_process.GaussianProcessClassifier)
gin.external_configurable(sklearn.gaussian_process.kernels.CompoundKernel)
gin.external_configurable(sklearn.gaussian_process.kernels.ConstantKernel)
gin.external_configurable(sklearn.gaussian_process.kernels.DotProduct)
gin.external_configurable(sklearn.gaussian_process.kernels.ExpSineSquared)
gin.external_configurable(sklearn.gaussian_process.kernels.Exponentiation)
gin.external_configurable(sklearn.gaussian_process.kernels.Hyperparameter)
gin.external_configurable(sklearn.gaussian_process.kernels.Matern)
gin.external_configurable(sklearn.gaussian_process.kernels.PairwiseKernel)
gin.external_configurable(sklearn.gaussian_process.kernels.Product)
gin.external_configurable(sklearn.gaussian_process.kernels.RBF)
gin.external_configurable(sklearn.gaussian_process.kernels.RationalQuadratic)
gin.external_configurable(sklearn.gaussian_process.kernels.Sum)
gin.external_configurable(sklearn.gaussian_process.kernels.WhiteKernel)

# Impute
import sklearn.impute
gin.external_configurable(sklearn.impute.SimpleImputer)
gin.external_configurable(sklearn.impute.MissingIndicator)
gin.external_configurable(sklearn.impute.KNNImputer)

# Isotonic
import sklearn.isotonic
gin.external_configurable(sklearn.isotonic.IsotonicRegression)

# Kernel Approximation
import sklearn.kernel_approximation
gin.external_configurable(sklearn.kernel_approximation.AdditiveChi2Sampler)
gin.external_configurable(sklearn.kernel_approximation.Nystroem)
gin.external_configurable(sklearn.kernel_approximation.RBFSampler)
gin.external_configurable(sklearn.kernel_approximation.SkewedChi2Sampler)

# Kernel Ridge Regression
import sklearn.kernel_ridge
gin.external_configurable(sklearn.kernel_ridge.KernelRidge)

# Linear Classifiers
import sklearn.linear_model
gin.external_configurable(sklearn.linear_model.LogisticRegression)
gin.external_configurable(sklearn.linear_model.LogisticRegressionCV)
gin.external_configurable(sklearn.linear_model.PassiveAggressiveClassifier)
gin.external_configurable(sklearn.linear_model.Perceptron)
gin.external_configurable(sklearn.linear_model.RidgeClassifier)
gin.external_configurable(sklearn.linear_model.RidgeClassifierCV)
gin.external_configurable(sklearn.linear_model.SGDClassifier)

# Classical Linear Regressors
gin.external_configurable(sklearn.linear_model.LinearRegression)
gin.external_configurable(sklearn.linear_model.Ridge)
gin.external_configurable(sklearn.linear_model.RidgeCV)
gin.external_configurable(sklearn.linear_model.SGDRegressor)

# Regressors with variable selection
gin.external_configurable(sklearn.linear_model.ElasticNet)
gin.external_configurable(sklearn.linear_model.ElasticNetCV)
gin.external_configurable(sklearn.linear_model.Lars)
gin.external_configurable(sklearn.linear_model.LarsCV)
gin.external_configurable(sklearn.linear_model.Lasso)
gin.external_configurable(sklearn.linear_model.LassoCV)
gin.external_configurable(sklearn.linear_model.LassoLars)
gin.external_configurable(sklearn.linear_model.LassoLarsCV)
gin.external_configurable(sklearn.linear_model.OrthogonalMatchingPursuit)
gin.external_configurable(sklearn.linear_model.OrthogonalMatchingPursuitCV)

# Bayesian Regressors
gin.external_configurable(sklearn.linear_model.ARDRegression)
gin.external_configurable(sklearn.linear_model.BayesianRidge)

# Multi-task Linear Regressors with Variable Selection
gin.external_configurable(sklearn.linear_model.MultiTaskElasticNet)
gin.external_configurable(sklearn.linear_model.MultiTaskElasticNetCV)
gin.external_configurable(sklearn.linear_model.MultiTaskLasso)
gin.external_configurable(sklearn.linear_model.MultiTaskLassoCV)

# Outlier-robust Regressors
gin.external_configurable(sklearn.linear_model.HuberRegressor)
gin.external_configurable(sklearn.linear_model.RANSACRegressor)
gin.external_configurable(sklearn.linear_model.TheilSenRegressor)

# Miscellaneous
gin.external_configurable(sklearn.linear_model.PassiveAggressiveRegressor)

# Manifold
import sklearn.manifold
gin.external_configurable(sklearn.manifold.Isomap)
gin.external_configurable(sklearn.manifold.LocallyLinearEmbedding)
gin.external_configurable(sklearn.manifold.MDS)
gin.external_configurable(sklearn.manifold.SpectralEmbedding)
gin.external_configurable(sklearn.manifold.TSNE)

# Mixture Models
import sklearn.mixture
gin.external_configurable(sklearn.mixture.GaussianMixture)
gin.external_configurable(sklearn.mixture.BayesianGaussianMixture)

# Multiclass
import sklearn.multiclass
gin.external_configurable(sklearn.multiclass.OneVsRestClassifier)
gin.external_configurable(sklearn.multiclass.OneVsOneClassifier)
gin.external_configurable(sklearn.multiclass.OutputCodeClassifier)

# Multioutput
import sklearn.multioutput
gin.external_configurable(sklearn.multioutput.ClassifierChain)
gin.external_configurable(sklearn.multioutput.MultiOutputRegressor)
gin.external_configurable(sklearn.multioutput.MultiOutputClassifier)
gin.external_configurable(sklearn.multioutput.RegressorChain)

# Naive Bayes
import sklearn.naive_bayes
gin.external_configurable(sklearn.naive_bayes.BernoulliNB)
gin.external_configurable(sklearn.naive_bayes.CategoricalNB)
gin.external_configurable(sklearn.naive_bayes.ComplementNB)
gin.external_configurable(sklearn.naive_bayes.GaussianNB)
gin.external_configurable(sklearn.naive_bayes.MultinomialNB)

# Nearest Neighbors
import sklearn.neighbors
gin.external_configurable(sklearn.neighbors.BallTree)
gin.external_configurable(sklearn.neighbors.KDTree)
gin.external_configurable(sklearn.neighbors.KNeighborsClassifier)
gin.external_configurable(sklearn.neighbors.KNeighborsRegressor)
gin.external_configurable(sklearn.neighbors.LocalOutlierFactor)
gin.external_configurable(sklearn.neighbors.RadiusNeighborsClassifier)
gin.external_configurable(sklearn.neighbors.RadiusNeighborsRegressor)
gin.external_configurable(sklearn.neighbors.NearestCentroid)
gin.external_configurable(sklearn.neighbors.NearestNeighbors)
gin.external_configurable(sklearn.neighbors.NeighborhoodComponentsAnalysis)

# Pipeline
import sklearn.pipeline
gin.external_configurable(sklearn.pipeline.FeatureUnion)
gin.external_configurable(sklearn.pipeline.Pipeline)

# Preprocessing
import sklearn.preprocessing
gin.external_configurable(sklearn.preprocessing.Binarizer)
gin.external_configurable(sklearn.preprocessing.FunctionTransformer)
gin.external_configurable(sklearn.preprocessing.KBinsDiscretizer)
gin.external_configurable(sklearn.preprocessing.KernelCenterer)
gin.external_configurable(sklearn.preprocessing.LabelBinarizer)
gin.external_configurable(sklearn.preprocessing.LabelEncoder)
gin.external_configurable(sklearn.preprocessing.MultiLabelBinarizer)
gin.external_configurable(sklearn.preprocessing.MaxAbsScaler)
gin.external_configurable(sklearn.preprocessing.MinMaxScaler)
gin.external_configurable(sklearn.preprocessing.Normalizer)
gin.external_configurable(sklearn.preprocessing.OneHotEncoder)
gin.external_configurable(sklearn.preprocessing.OrdinalEncoder)
gin.external_configurable(sklearn.preprocessing.PolynomialFeatures)
gin.external_configurable(sklearn.preprocessing.PowerTransformer)
gin.external_configurable(sklearn.preprocessing.QuantileTransformer)
gin.external_configurable(sklearn.preprocessing.RobustScaler)
gin.external_configurable(sklearn.preprocessing.StandardScaler)

# Random Projection
import sklearn.random_projection
gin.external_configurable(sklearn.random_projection.GaussianRandomProjection)
gin.external_configurable(sklearn.random_projection.SparseRandomProjection)

# Support Vector Machines
import sklearn.svm
gin.external_configurable(sklearn.svm.LinearSVC)
gin.external_configurable(sklearn.svm.LinearSVR)
gin.external_configurable(sklearn.svm.NuSVC)
gin.external_configurable(sklearn.svm.NuSVR)
gin.external_configurable(sklearn.svm.OneClassSVM)
gin.external_configurable(sklearn.svm.SVC)
gin.external_configurable(sklearn.svm.SVR)

# Decision Trees
import sklearn.tree
gin.external_configurable(sklearn.tree.DecisionTreeClassifier)
gin.external_configurable(sklearn.tree.DecisionTreeRegressor)
gin.external_configurable(sklearn.tree.ExtraTreeClassifier)
gin.external_configurable(sklearn.tree.ExtraTreeRegressor)