{"id":13468274,"url":"https://github.com/nok/sklearn-porter","last_synced_at":"2025-05-15T01:09:29.917Z","repository":{"id":11731656,"uuid":"61755318","full_name":"nok/sklearn-porter","owner":"nok","description":"Transpile trained scikit-learn estimators to C, Java, JavaScript and others.","archived":false,"fork":false,"pushed_at":"2024-06-12T09:16:57.000Z","size":3050,"stargazers_count":1300,"open_issues_count":45,"forks_count":169,"subscribers_count":32,"default_branch":"main","last_synced_at":"2025-04-11T14:17:02.185Z","etag":null,"topics":["data-science","machine-learning","scikit-learn","sklearn"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nok.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-22T22:21:34.000Z","updated_at":"2025-03-25T12:10:43.000Z","dependencies_parsed_at":"2024-09-29T06:18:13.732Z","dependency_job_id":null,"html_url":"https://github.com/nok/sklearn-porter","commit_stats":{"total_commits":1173,"total_committers":13,"mean_commits":90.23076923076923,"dds":"0.49786871270247224","last_synced_commit":"2509355ec7a421290819308b72ab5de71f83dd5e"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nok%2Fsklearn-porter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nok%2Fsklearn-porter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nok%2Fsklearn-porter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nok%2Fsklearn-porter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nok","download_url":"https://codeload.github.com/nok/sklearn-porter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253908969,"owners_count":21982685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","machine-learning","scikit-learn","sklearn"],"created_at":"2024-07-31T15:01:08.001Z","updated_at":"2025-05-15T01:09:24.908Z","avatar_url":"https://github.com/nok.png","language":"Python","funding_links":[],"categories":["Python","Conversion","Machine Learning Framework","模型序列化和转换","Deployment","Software"],"sub_categories":["Synthetic Data","General Purpose Framework","NLP","Ranking/Recommender","Serialising and transpiling models"],"readme":"\n# sklearn-porter\n\n[![Build Status stable branch](https://img.shields.io/travis/nok/sklearn-porter/stable.svg)](https://travis-ci.org/nok/sklearn-porter)\n[![codecov](https://codecov.io/gh/nok/sklearn-porter/branch/stable/graph/badge.svg)](https://codecov.io/gh/nok/sklearn-porter)\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/nok/sklearn-porter/release/1.0.0?filepath=examples/basics/index.pct.ipynb)\n[![PyPI](https://img.shields.io/pypi/v/sklearn-porter.svg?color=blue)](https://pypi.python.org/pypi/sklearn-porter)\n[![PyPI](https://img.shields.io/pypi/pyversions/sklearn-porter.svg)](https://pypi.python.org/pypi/sklearn-porter)\n[![GitHub license](https://img.shields.io/pypi/l/sklearn-porter.svg?color=blue)](https://raw.githubusercontent.com/nok/sklearn-porter/main/LICENSE)\n\nTranspile trained [scikit-learn](https://github.com/scikit-learn/scikit-learn) estimators to C, Java, JavaScript and others.\u003cbr\u003eIt's recommended for limited embedded systems and critical applications where performance matters most.\n\nNavigation: [Estimators](#estimators) • [Installation](#installation) • [Usage](#usage) • [Known Issues](#known-issues) • [Development](#development) • [Citation](#citation) • [License](#license)\n\n\n## Estimators\n\nThis table gives an overview over all supported combinations of estimators, programming languages and templates.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth rowspan=\"2\"\u003e\u003c/th\u003e\n    \u003cth colspan=\"18\"\u003eProgramming language\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003cth colspan=\"3\"\u003eC\u003c/th\u003e\n    \u003cth colspan=\"3\"\u003eGo\u003c/th\u003e\n    \u003cth colspan=\"3\"\u003eJava\u003c/th\u003e\n    \u003cth colspan=\"3\"\u003eJS\u003c/th\u003e\n    \u003cth colspan=\"3\"\u003ePHP\u003c/th\u003e\n    \u003cth colspan=\"3\"\u003eRuby\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html\"\u003esvm.SVC\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.svm.NuSVC.html\"\u003esvm.NuSVC\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html\"\u003esvm.LinearSVC\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html\"\u003etree.DecisionTreeClassifier\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html\"\u003eensemble.RandomForestClassifier\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html\"\u003eensemble.ExtraTreesClassifier\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html\"\u003eensemble.AdaBoostClassifier\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html\"\u003eneighbors.KNeighborsClassifier\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB\"\u003enaive_bayes.BernoulliNB\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB\"\u003enaive_bayes.GaussianNB\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html\"\u003eneural_network.MLPClassifier\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e✓ᴾ\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd align=\"left\"\u003e\n      \u003ca href=\"http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html\"\u003eneural_network.MLPRegressor\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e✓\u003c/td\u003e\n    \u003ctd\u003e×\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd rowspan=\"2\"\u003e\u003c/td\u003e\n    \u003ctd\u003eᴀ\u003c/td\u003e\n    \u003ctd\u003eᴇ\u003c/td\u003e\n    \u003ctd\u003eᴄ\u003c/td\u003e\n    \u003ctd\u003eᴀ\u003c/td\u003e\n    \u003ctd\u003eᴇ\u003c/td\u003e\n    \u003ctd\u003eᴄ\u003c/td\u003e\n    \u003ctd\u003eᴀ\u003c/td\u003e\n    \u003ctd\u003eᴇ\u003c/td\u003e\n    \u003ctd\u003eᴄ\u003c/td\u003e\n    \u003ctd\u003eᴀ\u003c/td\u003e\n    \u003ctd\u003eᴇ\u003c/td\u003e\n    \u003ctd\u003eᴄ\u003c/td\u003e\n    \u003ctd\u003eᴀ\u003c/td\u003e\n    \u003ctd\u003eᴇ\u003c/td\u003e\n    \u003ctd\u003eᴄ\u003c/td\u003e\n    \u003ctd\u003eᴀ\u003c/td\u003e\n    \u003ctd\u003eᴇ\u003c/td\u003e\n    \u003ctd\u003eᴄ\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth colspan=\"18\"\u003eTemplate\u003c/th\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n✓ = support of `predict`,　ᴾ = support of `predict_proba`,　× = not supported or feasible\u003cbr\u003e\nᴀ = attached model data,　ᴇ = exported model data (JSON),　ᴄ = combined model data\n\n\n## Installation\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth align=\"left\"\u003ePurpose\u003c/th\u003e\n    \u003cth align=\"left\"\u003eVersion\u003c/th\u003e\n    \u003cth align=\"left\"\u003eBranch\u003c/th\u003e\n    \u003cth align=\"left\"\u003eBuild\u003c/th\u003e\n    \u003cth align=\"left\"\u003eCommand\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eProduction\u003c/td\u003e\n    \u003ctd\u003ev0.7.4\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/nok/sklearn-porter/tree/stable\"\u003estable\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://travis-ci.org/nok/sklearn-porter\"\u003e\u003cimg src=\"https://img.shields.io/travis/nok/sklearn-porter/stable.svg\"\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003epip install sklearn-porter\u003c/code\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDevelopment\u003c/td\u003e\n    \u003ctd\u003ev1.0.0\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/nok/sklearn-porter/tree/main\"\u003emain\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://travis-ci.org/nok/sklearn-porter\"\u003e\u003cimg src=\"https://img.shields.io/travis/nok/sklearn-porter/main.svg\"\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003epip install https://github.com/nok/sklearn-porter/zipball/main\u003c/code\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\nIn both environments the only prerequisite is `scikit-learn \u003e= 0.17, \u003c= 0.22`.\n\n\n## Usage\n\n### Binder\n\nTry it out yourself by starting an interactive notebook with Binder: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/nok/sklearn-porter/release/1.0.0?filepath=examples/basics/index.pct.ipynb)\n\n### Basics\n\n```python\nfrom sklearn.datasets import load_iris\nfrom sklearn.tree import DecisionTreeClassifier\n\nfrom sklearn_porter import port, save, make, test\n\n# 1. Load data and train a dummy classifier:\nX, y = load_iris(return_X_y=True)\nclf = DecisionTreeClassifier()\nclf.fit(X, y)\n\n# 2. Port or transpile an estimator:\noutput = port(clf, language='js', template='attached')\nprint(output)\n\n# 3. Save the ported estimator:\nsrc_path, json_path = save(clf, language='js', template='exported', directory='/tmp')\nprint(src_path, json_path)\n\n# 4. Make predictions with the ported estimator:\ny_classes, y_probas = make(clf, X[:10], language='js', template='exported')\nprint(y_classes, y_probas)\n\n# 5. Test always the ported estimator by making an integrity check:\nscore = test(clf, X[:10], language='js', template='exported')\nprint(score)\n```\n\n### OOP\n\n```python\nfrom sklearn.datasets import load_iris\nfrom sklearn.tree import DecisionTreeClassifier\n\nfrom sklearn_porter import Estimator\n\n# 1. Load data and train a dummy classifier:\nX, y = load_iris(return_X_y=True)\nclf = DecisionTreeClassifier()\nclf.fit(X, y)\n\n# 2. Port or transpile an estimator:\nest = Estimator(clf, language='js', template='attached')\noutput = est.port()\nprint(output)\n\n# 3. Save the ported estimator:\nest.template = 'exported'\nsrc_path, json_path = est.save(directory='/tmp')\nprint(src_path, json_path)\n\n# 4. Make predictions with the ported estimator:\ny_classes, y_probas = est.make(X[:10])\nprint(y_classes, y_probas)\n\n# 5. Test always the ported estimator by making an integrity check:\nscore = est.test(X[:10])\nprint(score)\n```\n\n### CLI\n\nIn addition you can use the sklearn-porter on the command line. The command calls `porter` and is available after the installation.\n\n```\nporter {show,port,save} [-h] [-v]\n\nporter show [-l {c,go,java,js,php,ruby}] [-h]\n\nporter port \u003cestimator\u003e [-l {c,go,java,js,php,ruby}]\n                        [-t {attached,combined,exported}]\n                        [--skip-warnings] [-h]\n\nporter save \u003cestimator\u003e [-l {c,go,java,js,php,ruby}]\n                        [-t {attached,combined,exported}]\n                        [--directory DIRECTORY]\n                        [--skip-warnings] [-h]\n```\n\nYou can serialize an estimator and save it locally. For more details you can read the instructions to  [model persistence](http://scikit-learn.org/stable/modules/model_persistence.html#persistence-example).\n\n```python\nfrom joblib import dump\n\ndump(clf, 'estimator.joblib', compress=0)\n```\n\nAfter that the estimator can be transpiled by using the subcommand `port`:\n\n```bash\nporter port estimator.joblib -l js -t attached \u003e estimator.js\n```\n\nFor further processing you can pass the result to another applications, e.g. [UglifyJS](https://github.com/mishoo/UglifyJS2).\n\n```bash\nporter port estimator.joblib -l js -t attached | uglifyjs --compress -o estimator.min.js\n```\n\n## Known Issues\n\n- In some rare cases the regression tests of the support vector machine, [SVC](http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html) and [NuSVC](http://scikit-learn.org/stable/modules/generated/sklearn.svm.NuSVC.html), fail since `scikit-learn\u003e=0.22`. Because of that a `QualityWarning` will be raised which should reminds you to evaluate the result by using the `test` method.\n\n\n## Development\n\n### Aliases\n\nThe following commands are useful time savers in the daily development:\n\n```bash\n# Install a Python environment with `conda`:\nmake setup\n\n# Start a Jupyter notebook with examples:\nmake notebook\n\n# Start tests on the host or in a separate docker container:\nmake tests\nmake tests-docker\n\n# Lint the source code with `pylint`:\nmake lint\n\n# Generate notebooks with `jupytext`:\nmake examples\n\n# Deploy a new version with `twine`:\nmake deploy\n```\n\n### Dependencies\n\nThe prerequisite is Python 3.6 which you can install with [conda](https://docs.conda.io/en/latest/miniconda.html):\n\n```bash\nconda env create -n sklearn-porter_3.6 python=3.6\nconda activate sklearn-porter_3.6\n```\n\nAfter that you have to install all required packages:\n\n```bash\npip install --no-cache-dir -e \".[development,examples]\"\n```\n\n### Environment\n\nAll tests run against these combinations of [scikit-learn](https://github.com/scikit-learn/scikit-learn) and Python versions:\n\n\u003ctable border=\"0\" width=\"100%\"\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd colspan=\"2\" rowspan=\"2\"\u003e\u003c/td\u003e\n    \u003ctd colspan=\"4\"\u003e\u003cstrong\u003ePython\u003c/strong\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003e\u003cstrong\u003e3.5\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cstrong\u003e3.6\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cstrong\u003e3.7\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cstrong\u003e3.8\u003c/strong\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd rowspan=\"18\"\u003e\u003cstrong\u003escikit-learn\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003e\u003cstrong\u003e0.17\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003enot supported\u003cbr\u003eby scikit-learn\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003eno support\u003cbr\u003eby scikit-learn\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003enumpy 1.9.3\u003c/td\u003e\n    \u003ctd\u003enumpy 1.9.3\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003escipy 0.16.0\u003c/td\u003e\n    \u003ctd\u003escipy 0.16.0\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd rowspan=\"3\"\u003e\u003cstrong\u003e0.18\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003enot supported\u003cbr\u003eby scikit-learn\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003enot supported\u003cbr\u003eby scikit-learn\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003enumpy 1.9.3\u003c/td\u003e\n    \u003ctd\u003enumpy 1.9.3\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003escipy 0.16.0\u003c/td\u003e\n    \u003ctd\u003escipy 0.16.0\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd rowspan=\"3\"\u003e\u003cstrong\u003e0.19\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003enot supported\u003cbr\u003eby scikit-learn\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003enot supported\u003cbr\u003eby scikit-learn\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003enumpy 1.14.5\u003c/td\u003e\n    \u003ctd\u003enumpy 1.14.5\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003escipy 1.1.0\u003c/td\u003e\n    \u003ctd\u003escipy 1.1.0\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd rowspan=\"3\"\u003e\u003cstrong\u003e0.20\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd\u003ecython 0.27.3\u003c/td\u003e\n    \u003ctd rowspan=\"3\"\u003enot supported\u003cbr\u003eby joblib\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd rowspan=\"3\"\u003e\u003cstrong\u003e0.21\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd rowspan=\"3\"\u003e\u003cstrong\u003e0.22\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n    \u003ctd\u003ecython\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n    \u003ctd\u003enumpy\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr align=\"center\"\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n    \u003ctd\u003escipy\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\nFor the regression tests we have to use specific compilers and interpreters:\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth align=\"left\"\u003eName\u003c/th\u003e\n    \u003cth align=\"left\"\u003eSource\u003c/th\u003e\n    \u003cth align=\"left\"\u003eVersion\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eGCC\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://gcc.gnu.org\"\u003ehttps://gcc.gnu.org\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e10.2.1\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eGo\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://golang.org\"\u003ehttps://golang.org\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e1.15.15\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eJava (OpenJDK)\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://openjdk.java.net\"\u003ehttps://openjdk.java.net\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e1.8.0\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNode.js\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://nodejs.org/en/\"\u003ehttps://nodejs.org\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e12.22.5\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ePHP\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://www.php.net/\"\u003ehttps://www.php.net\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e7.4.28\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eRuby\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://www.ruby-lang.org/en/\"\u003ehttps://www.ruby-lang.org\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e2.7.4\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\nPlease notice that in general you can use older compilers and interpreters with the generated source code. For instance you can use Java 1.6 to compile and run models.\n\n### Logging\n\nYou can activate logging by changing the option `logging.level`.\n\n```python\nfrom sklearn_porter import options\n\nfrom logging import DEBUG\n\noptions['logging.level'] = DEBUG\n```\n\n### Testing\n\nYou can run the unit and regression tests either on your local machine (host) or in a separate running Docker container.\n\n```bash\npytest tests -v \\\n  --cov=sklearn_porter \\\n  --disable-warnings \\\n  --numprocesses=auto \\\n  -p no:doctest \\\n  -o python_files=\"EstimatorTest.py\" \\\n  -o python_functions=\"test_*\"\n```\n\n```bash\ndocker build \\\n  -t sklearn-porter \\\n  --build-arg PYTHON_VER=${PYTHON_VER:-python=3.6} \\\n  --build-arg SKLEARN_VER=${SKLEARN_VER:-scikit-learn=0.21} \\\n  .\n\ndocker run \\\n  -v $(pwd):/home/abc/repo \\\n  --detach \\\n  --entrypoint=/bin/bash \\\n  --name test \\\n  -t sklearn-porter\n\ndocker exec -it test ./docker-entrypoint.sh \\\n  pytest tests -v \\\n    --cov=sklearn_porter \\\n    --disable-warnings \\\n    --numprocesses=auto \\\n    -p no:doctest \\\n    -o python_files=\"EstimatorTest.py\" \\\n    -o python_functions=\"test_*\"\n\ndocker rm -f $(docker ps --all --filter name=test -q)\n```\n\n\n## Citation\n\nIf you use this implementation in you work, please add a reference/citation to the paper. You can use the following BibTeX entry:\n\n```bibtex\n@unpublished{sklearn_porter,\n  author = {Darius Morawiec},\n  title = {sklearn-porter},\n  note = {Transpile trained scikit-learn estimators to C, Java, JavaScript and others},\n  url = {https://github.com/nok/sklearn-porter}\n}\n```\n\n\n## License\n\nThe package is Open Source Software released under the [BSD 3-Clause](LICENSE) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnok%2Fsklearn-porter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnok%2Fsklearn-porter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnok%2Fsklearn-porter/lists"}