sklearn-json

June 9, 2023 ยท View on GitHub

:warning: This deceased repo is now continued at OlivierBeq/ml2json.

sklearn-json

Export scikit-learn model files to JSON for sharing or deploying predictive models with peace of mind.

Why sklearn-json?

Other methods for exporting scikit-learn models require Pickle or Joblib (based on Pickle).

  • Serializing model files with Pickle provides a simple attack vector for malicious users - they give an attacker the ability to execute arbitrary code wherever the file is deserialized. For an example see: https://www.smartfile.com/blog/python-pickle-security-problems-and-solutions/.
  • Internal designs of Pickle and Joblib files make the binary files not mandatorily supported across Python versions.

sklearn-json is a safe and transparent solution for exporting scikit-learn model files to text files both machine and human readeable.

Safe

Export model files to 100% JSON which cannot execute code on deserialization.

Transparent

Model files are serialized in JSON (i.e., not binary), so you have the ability to see exactly what's inside.

Getting Started

sklearn-json makes exporting model files to JSON simple.

Install

pip install https://github.com/OlivierBeq/sklearn-json/tarball/master

To install other all dependencies (e.g. XGBoost, HDBSCAN), use:

pip install -e git+https://github.com/OlivierBeq/sklearn-json.git#egg=sklearn-json[full]

Example Usage

import sklearn_json as skljson
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=10, max_depth=5, random_state=0).fit(X, y)

skljson.to_json(model, file_name)
deserialized_model = skljson.from_json(file_name)

deserialized_model.predict(X)

Features

The list of supported models is rapidly growing. In addition of the support for scikit-learn models, sklearn-json supports the following librairies:

  • scikit-learn-extra
  • XGBoost
  • LightGBM
  • CatBoost
  • Imbalanced-learn
  • kmodes
  • HDBSCAN
  • UMAP
  • PyNNDescent
  • Prince

sklearn-json requires scikit-learn >= 0.21.3.

Supported scikit-learn Models

LibraryCategoryClassSupported?
Scikit-LearnClusteringcluster.AffinityPropagationYes
Scikit-LearnClusteringcluster.AgglomerativeClusteringYes
Scikit-LearnClusteringcluster.BirchYes
Scikit-LearnClusteringcluster.DBSCANYes
Scikit-LearnClusteringcluster.FeatureAgglomerationYes
Scikit-LearnClusteringcluster.KMeansYes
Scikit-LearnClusteringcluster.BisectingKMeansYes
Scikit-LearnClusteringcluster.MiniBatchKMeansYes
Scikit-LearnClusteringcluster.MeanShiftYes
Scikit-LearnClusteringcluster.OPTICSYes
Scikit-LearnClusteringcluster.SpectralClusteringYes
Scikit-LearnClusteringcluster.SpectralBiclusteringYes
Scikit-LearnClusteringcluster.SpectralCoclusteringYes
Scikit-LearnCross decompositioncross_decomposition.CCAYes
Scikit-LearnCross decompositioncross_decomposition.PLSCanonicalYes
Scikit-LearnCross decompositioncross_decomposition.PLSRegressionYes
Scikit-LearnCross decompositioncross_decomposition.PLSSVDYes
Scikit-LearnDecompositiondecomposition.DictionaryLearningYes
Scikit-LearnDecompositiondecomposition.FactorAnalysisYes
Scikit-LearnDecompositiondecomposition.FastICAYes
Scikit-LearnDecompositiondecomposition.IncrementalPCAYes
Scikit-LearnDecompositiondecomposition.KernelPCAYes
Scikit-LearnDecompositiondecomposition.LatentDirichletAllocationYes
Scikit-LearnDecompositiondecomposition.MiniBatchDictionaryLearningYes
Scikit-LearnDecompositiondecomposition.MiniBatchSparsePCAYes
Scikit-LearnDecompositiondecomposition.NMFYes
Scikit-LearnDecompositiondecomposition.MiniBatchNMFYes
Scikit-LearnDecompositiondecomposition.PCAYes
Scikit-LearnDecompositiondecomposition.SparsePCAYes
Scikit-LearnDecompositiondecomposition.SparseCoderYes
Scikit-LearnDecompositiondecomposition.TruncatedSVDYes
Scikit-LearnDiscriminant Analysisdiscriminant_analysis.LinearDiscriminantAnalysisYes
Scikit-LearnDiscriminant Analysisdiscriminant_analysis.QuadraticDiscriminantAnalysisYes
Scikit-LearnEnsemble Methodsensemble.AdaBoostClassifierYes
Scikit-LearnEnsemble Methodsensemble.AdaBoostRegressorYes
Scikit-LearnEnsemble Methodsensemble.BaggingClassifierYes
Scikit-LearnEnsemble Methodsensemble.BaggingRegressorYes
Scikit-LearnEnsemble Methodsensemble.ExtraTreesClassifierYes
Scikit-LearnEnsemble Methodsensemble.ExtraTreesRegressorYes
Scikit-LearnEnsemble Methodsensemble.GradientBoostingClassifierYes
Scikit-LearnEnsemble Methodsensemble.GradientBoostingRegressorYes
Scikit-LearnEnsemble Methodsensemble.IsolationForestYes
Scikit-LearnEnsemble Methodsensemble.RandomForestClassifierYes
Scikit-LearnEnsemble Methodsensemble.RandomForestRegressorYes
Scikit-LearnEnsemble Methodsensemble.RandomTreesEmbeddingYes
Scikit-LearnEnsemble Methodsensemble.StackingClassifierYes
Scikit-LearnEnsemble Methodsensemble.StackingRegressorYes
Scikit-LearnEnsemble Methodsensemble.VotingClassifierYes
Scikit-LearnEnsemble Methodsensemble.VotingRegressorYes
Scikit-LearnEnsemble Methodsensemble.HistGradientBoostingRegressorNo
Scikit-LearnEnsemble Methodsensemble.HistGradientBoostingClassifierNo
Scikit-LearnFeature Extractionfeature_extraction.DictVectorizerYes
Scikit-LearnFeature Extractionfeature_extraction.FeatureHasherNo
Scikit-LearnFeature Extractionfeature_extraction.image.PatchExtractorNo
Scikit-LearnFeature Extractionfeature_extraction.text.CountVectorizerNo
Scikit-LearnFeature Extractionfeature_extraction.text.HashingVectorizerNo
Scikit-LearnFeature Extractionfeature_extraction.text.TfidfTransformerNo
Scikit-LearnFeature Extractionfeature_extraction.text.TfidfVectorizerNo
Scikit-LearnFeature Selectionfeature_selection.GenericUnivariateSelectNo
Scikit-LearnFeature Selectionfeature_selection.SelectPercentileNo
Scikit-LearnFeature Selectionfeature_selection.SelectKBestNo
Scikit-LearnFeature Selectionfeature_selection.SelectFprNo
Scikit-LearnFeature Selectionfeature_selection.SelectFdrNo
Scikit-LearnFeature Selectionfeature_selection.SelectFromModelNo
Scikit-LearnFeature Selectionfeature_selection.SelectFweNo
Scikit-LearnFeature Selectionfeature_selection.SequentialFeatureSelectorNo
Scikit-LearnFeature Selectionfeature_selection.RFENo
Scikit-LearnFeature Selectionfeature_selection.RFECVNo
Scikit-LearnFeature Selectionfeature_selection.VarianceThresholdNo
Scikit-LearnGaussian Processesgaussian_process.GaussianProcessClassifierNo
Scikit-LearnGaussian Processesgaussian_process.GaussianProcessRegressorNo
Scikit-LearnImputeimpute.SimpleImputerNo
Scikit-LearnImputeimpute.IterativeImputerNo
Scikit-LearnImputeimpute.MissingIndicatorNo
Scikit-LearnImputeimpute.KNNImputerNo
Scikit-LearnIsotonic regressionisotonic.IsotonicRegressionNo
Scikit-LearnKernel Approximationkernel_approximation.AdditiveChi2SamplerNo
Scikit-LearnKernel Approximationkernel_approximation.NystroemNo
Scikit-LearnKernel Approximationkernel_approximation.PolynomialCountSketchNo
Scikit-LearnKernel Approximationkernel_approximation.RBFSamplerNo
Scikit-LearnKernel Approximationkernel_approximation.SkewedChi2SamplerNo
Scikit-LearnKernel Ridge Regressionkernel_ridge.KernelRidgeNo
Scikit-LearnLinear Modelslinear_model.LogisticRegressionYes
Scikit-LearnLinear Modelslinear_model.LogisticRegressionCVNo
Scikit-LearnLinear Modelslinear_model.PassiveAggressiveClassifierNo
Scikit-LearnLinear Modelslinear_model.PerceptronYes
Scikit-LearnLinear Modelslinear_model.RidgeClassifierNo
Scikit-LearnLinear Modelslinear_model.RidgeClassifierCVNo
Scikit-LearnLinear Modelslinear_model.SGDClassifierNo
Scikit-LearnLinear Modelslinear_model.SGDOneClassSVMNo
Scikit-LearnLinear Modelslinear_model.LinearRegressionYes
Scikit-LearnLinear Modelslinear_model.RidgeYes
Scikit-LearnLinear Modelslinear_model.RidgeCVNo
Scikit-LearnLinear Modelslinear_model.SGDRegressorNo
Scikit-LearnLinear Modelslinear_model.ElasticNetYes
Scikit-LearnLinear Modelslinear_model.ElasticNetCVNo
Scikit-LearnLinear Modelslinear_model.LarsNo
Scikit-LearnLinear Modelslinear_model.LarsCVNo
Scikit-LearnLinear Modelslinear_model.LassoYes
Scikit-LearnLinear Modelslinear_model.LassoCVNo
Scikit-LearnLinear Modelslinear_model.LassoLarsNo
Scikit-LearnLinear Modelslinear_model.LassoLarsCVNo
Scikit-LearnLinear Modelslinear_model.LassoLarsICNo
Scikit-LearnLinear Modelslinear_model.OrthogonalMatchingPursuitNo
Scikit-LearnLinear Modelslinear_model.OrthogonalMatchingPursuitCVNo
Scikit-LearnLinear Modelslinear_model.ARDRegressionNo
Scikit-LearnLinear Modelslinear_model.BayesianRidgeNo
Scikit-LearnLinear Modelslinear_model.MultiTaskElasticNetNo
Scikit-LearnLinear Modelslinear_model.MultiTaskElasticNetCVNo
Scikit-LearnLinear Modelslinear_model.MultiTaskLassoNo
Scikit-LearnLinear Modelslinear_model.MultiTaskLassoCVNo
Scikit-LearnLinear Modelslinear_model.HuberRegressorNo
Scikit-LearnLinear Modelslinear_model.QuantileRegressorNo
Scikit-LearnLinear Modelslinear_model.RANSACRegressorNo
Scikit-LearnLinear Modelslinear_model.TheilSenRegressorNo
Scikit-LearnLinear Modelslinear_model.PoissonRegressorNo
Scikit-LearnLinear Modelslinear_model.TweedieRegressorNo
Scikit-LearnLinear Modelslinear_model.GammaRegressorNo
Scikit-LearnLinear Modelslinear_model.PassiveAggressiveRegressorNo
Scikit-LearnManifold Learningmanifold.IsomapYes
Scikit-LearnManifold Learningmanifold.LocallyLinearEmbeddingYes
Scikit-LearnManifold Learningmanifold.MDSYes
Scikit-LearnManifold Learningmanifold.SpectralEmbeddingYes
Scikit-LearnManifold Learningmanifold.TSNEYes
Scikit-LearnGaussian Mixture Modelsmixture.BayesianGaussianMixtureNo
Scikit-LearnGaussian Mixture Modelsmixture.GaussianMixtureNo
Scikit-LearnModel Selectionmodel_selection.GroupKFoldNo
Scikit-LearnModel Selectionmodel_selection.GroupShuffleSplitNo
Scikit-LearnModel Selectionmodel_selection.KFoldNo
Scikit-LearnModel Selectionmodel_selection.LeaveOneGroupOutNo
Scikit-LearnModel Selectionmodel_selection.LeavePGroupsOutNo
Scikit-LearnModel Selectionmodel_selection.LeaveOneOutNo
Scikit-LearnModel Selectionmodel_selection.LeavePOutNo
Scikit-LearnModel Selectionmodel_selection.PredefinedSplitNo
Scikit-LearnModel Selectionmodel_selection.RepeatedKFoldNo
Scikit-LearnModel Selectionmodel_selection.RepeatedStratifiedKFoldNo
Scikit-LearnModel Selectionmodel_selection.ShuffleSplitNo
Scikit-LearnModel Selectionmodel_selection.StratifiedKFoldNo
Scikit-LearnModel Selectionmodel_selection.StratifiedShuffleSplitNo
Scikit-LearnModel Selectionmodel_selection.StratifiedGroupKFoldNo
Scikit-LearnModel Selectionmodel_selection.TimeSeriesSplitNo
Scikit-LearnModel Selectionmodel_selection.GridSearchCVNo
Scikit-LearnModel Selectionmodel_selection.HalvingGridSearchCVNo
Scikit-LearnModel Selectionmodel_selection.ParameterGridNo
Scikit-LearnModel Selectionmodel_selection.ParameterSamplerNo
Scikit-LearnModel Selectionmodel_selection.RandomizedSearchCVNo
Scikit-LearnModel Selectionmodel_selection.HalvingRandomSearchCVNo
Scikit-LearnMulticlass classificationmulticlass.OneVsRestClassifierNo
Scikit-LearnMulticlass classificationmulticlass.OneVsOneClassifierNo
Scikit-LearnMulticlass classificationmulticlass.OutputCodeClassifierNo
Scikit-LearnMultioutput regression and classificationmultioutput.ClassifierChainNo
Scikit-LearnMultioutput regression and classificationmultioutput.MultiOutputRegressorNo
Scikit-LearnMultioutput regression and classificationmultioutput.MultiOutputClassifierNo
Scikit-LearnMultioutput regression and classificationmultioutput.RegressorChainNo
Scikit-LearnNaive Bayesnaive_bayes.BernoulliNBYes
Scikit-LearnNaive Bayesnaive_bayes.CategoricalNBNo
Scikit-LearnNaive Bayesnaive_bayes.ComplementNBYes
Scikit-LearnNaive Bayesnaive_bayes.GaussianNBYes
Scikit-LearnNaive Bayesnaive_bayes.MultinomialNBYes
Scikit-LearnNearest Neighborsneighbors.BallTreeNo
Scikit-LearnNearest Neighborsneighbors.KDTreeYes
Scikit-LearnNearest Neighborsneighbors.KernelDensityNo
Scikit-LearnNearest Neighborsneighbors.KNeighborsClassifierNo
Scikit-LearnNearest Neighborsneighbors.KNeighborsRegressorNo
Scikit-LearnNearest Neighborsneighbors.KNeighborsTransformerNo
Scikit-LearnNearest Neighborsneighbors.LocalOutlierFactorNo
Scikit-LearnNearest Neighborsneighbors.RadiusNeighborsClassifierNo
Scikit-LearnNearest Neighborsneighbors.RadiusNeighborsRegressorNo
Scikit-LearnNearest Neighborsneighbors.RadiusNeighborsTransformerNo
Scikit-LearnNearest Neighborsneighbors.NearestCentroidNo
Scikit-LearnNearest Neighborsneighbors.NearestNeighborsYes
Scikit-LearnNearest Neighborsneighbors.NeighborhoodComponentsAnalysisNo
Scikit-LearnNeural network modelsneural_network.BernoulliRBMNo
Scikit-LearnNeural network modelsneural_network.MLPClassifierYes
Scikit-LearnNeural network modelsneural_network.MLPRegressorYes
Scikit-LearnPipelinepipeline.FeatureUnionNo
Scikit-LearnPipelinepipeline.PipelineNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.BinarizerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.FunctionTransformerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.KBinsDiscretizerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.KernelCentererYes
Scikit-LearnPreprocessing and Normalizationpreprocessing.LabelBinarizerYes
Scikit-LearnPreprocessing and Normalizationpreprocessing.LabelEncoderYes
Scikit-LearnPreprocessing and Normalizationpreprocessing.MultiLabelBinarizerYes
Scikit-LearnPreprocessing and Normalizationpreprocessing.MaxAbsScalerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.MinMaxScalerYes
Scikit-LearnPreprocessing and Normalizationpreprocessing.NormalizerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.OneHotEncoderYes
Scikit-LearnPreprocessing and Normalizationpreprocessing.OrdinalEncoderNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.PolynomialFeaturesNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.PowerTransformerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.QuantileTransformerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.RobustScalerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.SplineTransformerNo
Scikit-LearnPreprocessing and Normalizationpreprocessing.StandardScalerYes
Scikit-LearnRandom projectionrandom_projection.GaussianRandomProjectionNo
Scikit-LearnRandom projectionrandom_projection.SparseRandomProjectionNo
Scikit-LearnSemi-Supervised Learningsemi_supervised.LabelPropagationNo
Scikit-LearnSemi-Supervised Learningsemi_supervised.LabelSpreadingNo
Scikit-LearnSemi-Supervised Learningsemi_supervised.SelfTrainingClassifierNo
Scikit-LearnSupport Vector Machinessvm.LinearSVCNo
Scikit-LearnSupport Vector Machinessvm.LinearSVRNo
Scikit-LearnSupport Vector Machinessvm.NuSVCNo
Scikit-LearnSupport Vector Machinessvm.NuSVRNo
Scikit-LearnSupport Vector Machinessvm.OneClassSVMNo
Scikit-LearnSupport Vector Machinessvm.SVCYes
Scikit-LearnSupport Vector Machinessvm.SVRYes
Scikit-LearnDecision Treestree.DecisionTreeClassifierYes
Scikit-LearnDecision Treestree.DecisionTreeRegressorYes
Scikit-LearnDecision Treestree.ExtraTreeClassifierYes
Scikit-LearnDecision Treestree.ExtraTreeRegressorYes
Imbalanced-LearnUnder-samplingClusterCentroidsNo
Imbalanced-LearnUnder-samplingCondensedNearestNeighbourNo
Imbalanced-LearnUnder-samplingEditedNearestNeighboursNo
Imbalanced-LearnUnder-samplingRepeatedEditedNearestNeighboursNo
Imbalanced-LearnUnder-samplingAllKNNNo
Imbalanced-LearnUnder-samplingInstanceHardnessThresholdNo
Imbalanced-LearnUnder-samplingNearMissNo
Imbalanced-LearnUnder-samplingNeighbourhoodCleaningRuleNo
Imbalanced-LearnUnder-samplingOneSidedSelectionNo
Imbalanced-LearnUnder-samplingRandomUnderSamplerNo
Imbalanced-LearnUnder-samplingTomekLinksNo
Imbalanced-LearnOver-samplingRandomOverSamplerNo
Imbalanced-LearnOver-samplingSMOTENo
Imbalanced-LearnOver-samplingSMOTENCNo
Imbalanced-LearnOver-samplingSMOTENNo
Imbalanced-LearnOver-samplingADASYNNo
Imbalanced-LearnOver-samplingBorderlineSMOTENo
Imbalanced-LearnOver-samplingKMeansSMOTENo
Imbalanced-LearnOver-samplingSVMSMOTENo
Imbalanced-LearnCombined over & under samplingSMOTEENNNo
Imbalanced-LearnCombined over & under samplingSMOTETomekNo
Imbalanced-LearnEnsemble MethodsEasyEnsembleClassifierNo
Imbalanced-LearnEnsemble MethodsRUSBoostClassifierNo
Imbalanced-LearnEnsemble MethodsBalancedBaggingClassifierNo
Imbalanced-LearnEnsemble MethodsBalancedRandomForestClassifierNo
XGBoostEnsemble MethodsXGBRegressorYes
XGBoostEnsemble MethodsXGBClassifierYes
XGBoostEnsemble MethodsXGBRankerYes
XGBoostEnsemble MethodsXGBRFRegressorYes
XGBoostEnsemble MethodsXGBRFClassifierYes
LightGBMEnsemble MethodsLGBMClassifierYes
LightGBMEnsemble MethodsLGBMRegressorYes
LightGBMEnsemble MethodsLGBMRankerYes
CatBoostEnsemble MethodsCatBoostClassifierYes
CatBoostEnsemble MethodsCatBoostRankerYes
CatBoostEnsemble MethodsCatBoostRegressorYes
kmodesClusteringKModesYes
kmodesClusteringKPrototypesYes
Scikit-Learn-extraClusteringcluster.KMedoidsNo
Scikit-Learn-extraClusteringcluster.CommonNNClusteringNo
Scikit-Learn-extraKernel approximationkernel_approximation.FastfoodNo
Scikit-Learn-extraEigenProkernel_methods.EigenProRegressorNo
Scikit-Learn-extraRobustkernel_methods.EigenProClassifierNo
Scikit-Learn-extraRobustrobust.RobustWeightedClassifierNo
Scikit-Learn-extraRobustrobust.RobustWeightedRegressorNo
Scikit-Learn-extraRobustrobust.RobustWeightedKMeansNo
HDBSCANClusteringHDBSCANYes
UMAPManifold LearningUMAPYes
PyNNDescentNearest NeighborsNNDescentYes
PrinceDecompositionPCANo
PrinceDecompositionCANo
PrinceDecompositionMCANo
PrinceDecompositionMFANo
PrinceDecompositionFAMDNo
PrinceDecompositionGPANo