[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-nok--sklearn-porter":3,"tool-nok--sklearn-porter":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":79,"owner_email":78,"owner_twitter":78,"owner_website":78,"owner_url":80,"languages":81,"stars":86,"forks":87,"last_commit_at":88,"license":89,"difficulty_score":90,"env_os":91,"env_gpu":92,"env_ram":93,"env_deps":94,"category_tags":99,"github_topics":100,"view_count":23,"oss_zip_url":78,"oss_zip_packed_at":78,"status":16,"created_at":105,"updated_at":106,"faqs":107,"releases":138},3394,"nok\u002Fsklearn-porter","sklearn-porter","Transpile trained scikit-learn estimators to C, Java, JavaScript and others.","sklearn-porter 是一款专为机器学习开发者设计的实用工具，它能将训练好的 scikit-learn 模型自动“翻译”成 C、Java、JavaScript、Go、PHP 或 Ruby 等多种主流编程语言的代码。\n\n在实际应用中，许多高性能场景（如嵌入式设备、移动端应用或对延迟极其敏感的关键系统）无法直接运行依赖庞大的 Python 环境。sklearn-porter 恰好解决了这一痛点：它让开发者无需手动重写复杂的算法逻辑，即可将 Python 中训练的模型无缝迁移到资源受限或非 Python 的生产环境中，同时确保预测结果的高度一致性与执行效率。\n\n这款工具特别适合需要将原型快速落地的算法工程师、嵌入式开发人员以及追求极致性能的后端开发者。其核心亮点在于支持广泛的模型类型（包括支持向量机、决策树及随机森林等）与多种语言模板的灵活组合，部分模式还专门针对生产环境进行了优化。通过 sklearn-porter，你可以轻松打破语言壁垒，让机器学习模型在任何需要的地方高效运行。","\n# sklearn-porter\n\n[![Build Status stable branch](https:\u002F\u002Fimg.shields.io\u002Ftravis\u002Fnok\u002Fsklearn-porter\u002Fstable.svg)](https:\u002F\u002Ftravis-ci.org\u002Fnok\u002Fsklearn-porter)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fnok\u002Fsklearn-porter\u002Fbranch\u002Fstable\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fnok\u002Fsklearn-porter)\n[![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Fnok\u002Fsklearn-porter\u002Frelease\u002F1.0.0?filepath=examples\u002Fbasics\u002Findex.pct.ipynb)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fsklearn-porter.svg?color=blue)](https:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fsklearn-porter)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fsklearn-porter.svg)](https:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fsklearn-porter)\n[![GitHub license](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fl\u002Fsklearn-porter.svg?color=blue)](https:\u002F\u002Fraw.githubusercontent.com\u002Fnok\u002Fsklearn-porter\u002Fmain\u002FLICENSE)\n\nTranspile trained [scikit-learn](https:\u002F\u002Fgithub.com\u002Fscikit-learn\u002Fscikit-learn) estimators to C, Java, JavaScript and others.\u003Cbr>It'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>\n  \u003Ctr>\n    \u003Cth rowspan=\"2\">\u003C\u002Fth>\n    \u003Cth colspan=\"18\">Programming language\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Cth colspan=\"3\">C\u003C\u002Fth>\n    \u003Cth colspan=\"3\">Go\u003C\u002Fth>\n    \u003Cth colspan=\"3\">Java\u003C\u002Fth>\n    \u003Cth colspan=\"3\">JS\u003C\u002Fth>\n    \u003Cth colspan=\"3\">PHP\u003C\u002Fth>\n    \u003Cth colspan=\"3\">Ruby\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.SVC.html\">svm.SVC\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.NuSVC.html\">svm.NuSVC\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.LinearSVC.html\">svm.LinearSVC\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.tree.DecisionTreeClassifier.html\">tree.DecisionTreeClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.ensemble.RandomForestClassifier.html\">ensemble.RandomForestClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.ensemble.ExtraTreesClassifier.html\">ensemble.ExtraTreesClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.ensemble.AdaBoostClassifier.html\">ensemble.AdaBoostClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neighbors.KNeighborsClassifier.html\">neighbors.KNeighborsClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB\">naive_bayes.BernoulliNB\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB\">naive_bayes.GaussianNB\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neural_network.MLPClassifier.html\">neural_network.MLPClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neural_network.MLPRegressor.html\">neural_network.MLPRegressor\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"2\">\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Cth colspan=\"18\">Template\u003C\u002Fth>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n✓ = support of `predict`,　ᴾ = support of `predict_proba`,　× = not supported or feasible\u003Cbr>\nᴀ = attached model data,　ᴇ = exported model data (JSON),　ᴄ = combined model data\n\n\n## Installation\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Cth align=\"left\">Purpose\u003C\u002Fth>\n    \u003Cth align=\"left\">Version\u003C\u002Fth>\n    \u003Cth align=\"left\">Branch\u003C\u002Fth>\n    \u003Cth align=\"left\">Build\u003C\u002Fth>\n    \u003Cth align=\"left\">Command\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Production\u003C\u002Ftd>\n    \u003Ctd>v0.7.4\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Ftree\u002Fstable\">stable\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Ftravis-ci.org\u002Fnok\u002Fsklearn-porter\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftravis\u002Fnok\u002Fsklearn-porter\u002Fstable.svg\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ccode>pip install sklearn-porter\u003C\u002Fcode>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Development\u003C\u002Ftd>\n    \u003Ctd>v1.0.0\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Ftree\u002Fmain\">main\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Ftravis-ci.org\u002Fnok\u002Fsklearn-porter\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftravis\u002Fnok\u002Fsklearn-porter\u002Fmain.svg\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ccode>pip install https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fzipball\u002Fmain\u003C\u002Fcode>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\nIn both environments the only prerequisite is `scikit-learn >= 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:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Fnok\u002Fsklearn-porter\u002Frelease\u002F1.0.0?filepath=examples\u002Fbasics\u002Findex.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='\u002Ftmp')\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='\u002Ftmp')\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> [-l {c,go,java,js,php,ruby}]\n                        [-t {attached,combined,exported}]\n                        [--skip-warnings] [-h]\n\nporter save \u003Cestimator> [-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:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fmodel_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 > estimator.js\n```\n\nFor further processing you can pass the result to another applications, e.g. [UglifyJS](https:\u002F\u002Fgithub.com\u002Fmishoo\u002FUglifyJS2).\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:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.SVC.html) and [NuSVC](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.NuSVC.html), fail since `scikit-learn>=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:\u002F\u002Fdocs.conda.io\u002Fen\u002Flatest\u002Fminiconda.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:\u002F\u002Fgithub.com\u002Fscikit-learn\u002Fscikit-learn) and Python versions:\n\n\u003Ctable border=\"0\" width=\"100%\">\n  \u003Ctr align=\"center\">\n    \u003Ctd colspan=\"2\" rowspan=\"2\">\u003C\u002Ftd>\n    \u003Ctd colspan=\"4\">\u003Cstrong>Python\u003C\u002Fstrong>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>\u003Cstrong>3.5\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>\u003Cstrong>3.6\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>\u003Cstrong>3.7\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>\u003Cstrong>3.8\u003C\u002Fstrong>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"18\">\u003Cstrong>scikit-learn\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.17\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">not supported\u003Cbr>by scikit-learn\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">no support\u003Cbr>by scikit-learn\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.18\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">not supported\u003Cbr>by scikit-learn\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">not supported\u003Cbr>by scikit-learn\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.19\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">not supported\u003Cbr>by scikit-learn\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">not supported\u003Cbr>by scikit-learn\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy 1.14.5\u003C\u002Ftd>\n    \u003Ctd>numpy 1.14.5\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy 1.1.0\u003C\u002Ftd>\n    \u003Ctd>scipy 1.1.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.20\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">not supported\u003Cbr>by joblib\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.21\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.22\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\nFor the regression tests we have to use specific compilers and interpreters:\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Cth align=\"left\">Name\u003C\u002Fth>\n    \u003Cth align=\"left\">Source\u003C\u002Fth>\n    \u003Cth align=\"left\">Version\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>GCC\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgcc.gnu.org\">https:\u002F\u002Fgcc.gnu.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>10.2.1\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Go\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgolang.org\">https:\u002F\u002Fgolang.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>1.15.15\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Java (OpenJDK)\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fopenjdk.java.net\">https:\u002F\u002Fopenjdk.java.net\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>1.8.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Node.js\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002F\">https:\u002F\u002Fnodejs.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>12.22.5\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>PHP\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.php.net\u002F\">https:\u002F\u002Fwww.php.net\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>7.4.28\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Ruby\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002F\">https:\u002F\u002Fwww.ruby-lang.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>2.7.4\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\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):\u002Fhome\u002Fabc\u002Frepo \\\n  --detach \\\n  --entrypoint=\u002Fbin\u002Fbash \\\n  --name test \\\n  -t sklearn-porter\n\ndocker exec -it test .\u002Fdocker-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\u002Fcitation 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:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter}\n}\n```\n\n\n## License\n\nThe package is Open Source Software released under the [BSD 3-Clause](LICENSE) license.\n","# sklearn-porter\n\n[![稳定分支构建状态](https:\u002F\u002Fimg.shields.io\u002Ftravis\u002Fnok\u002Fsklearn-porter\u002Fstable.svg)](https:\u002F\u002Ftravis-ci.org\u002Fnok\u002Fsklearn-porter)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fnok\u002Fsklearn-porter\u002Fbranch\u002Fstable\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fnok\u002Fsklearn-porter)\n[![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Fnok\u002Fsklearn-porter\u002Frelease\u002F1.0.0?filepath=examples\u002Fbasics\u002Findex.pct.ipynb)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fsklearn-porter.svg?color=blue)](https:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fsklearn-porter)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fsklearn-porter.svg)](https:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fsklearn-porter)\n[![GitHub 许可证](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fl\u002Fsklearn-porter.svg?color=blue)](https:\u002F\u002Fraw.githubusercontent.com\u002Fnok\u002Fsklearn-porter\u002Fmain\u002FLICENSE)\n\n将训练好的 [scikit-learn](https:\u002F\u002Fgithub.com\u002Fscikit-learn\u002Fscikit-learn) 估计器转译为 C、Java、JavaScript 等语言。\u003Cbr>推荐用于资源受限的嵌入式系统以及对性能要求极高的关键应用。\n\n导航： [估计器](#estimators) • [安装](#installation) • [使用](#usage) • [已知问题](#known-issues) • [开发](#development) • [引用](#citation) • [许可证](#license)\n\n## 估算器\n\n此表格概述了所有受支持的估算器、编程语言和模板的组合。\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Cth rowspan=\"2\">\u003C\u002Fth>\n    \u003Cth colspan=\"18\">编程语言\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Cth colspan=\"3\">C\u003C\u002Fth>\n    \u003Cth colspan=\"3\">Go\u003C\u002Fth>\n    \u003Cth colspan=\"3\">Java\u003C\u002Fth>\n    \u003Cth colspan=\"3\">JS\u003C\u002Fth>\n    \u003Cth colspan=\"3\">PHP\u003C\u002Fth>\n    \u003Cth colspan=\"3\">Ruby\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.SVC.html\">svm.SVC\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.NuSVC.html\">svm.NuSVC\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.LinearSVC.html\">svm.LinearSVC\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.tree.DecisionTreeClassifier.html\">tree.DecisionTreeClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓ᴾ\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.ensemble.RandomForestClassifier.html\">ensemble.RandomForestClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.ensemble.ExtraTreesClassifier.html\">ensemble.ExtraTreesClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.ensemble.AdaBoostClassifier.html\">ensemble.AdaBoostClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neighbors.KNeighborsClassifier.html\">neighbors.KNeighborsClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB\">naive_bayes.BernoulliNB\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>✓\u003C\u002Ftd>\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB\">naive_bayes.GaussianNB\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neural_network.MLPClassifier.html\">neural_network.MLPClassifier\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd align=\"left\">\n      \u003Ca href=\"http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neural_network.MLPRegressor.html\">neural_network.MLPRegressor\u003C\u002Fa>\n    \u003C\u002Ftd>\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>✓\u003C\u002Ftd\n    \u003Ctd>×\u003C\u002F\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n    \u003Ctd>\u003C\u002Ftd\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"2\">\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n    \u003Ctd>ᴀ\u003C\u002Ftd>\n    \u003Ctd>ᴇ\u003C\u002Ftd>\n    \u003Ctd>ᴄ\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Cth colspan=\"18\">模板\u003C\u002Fth>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n✓ = 支持 `predict`，　ᴾ = 支持 `predict_proba`，　× = 不支持或不可行\u003Cbr>\nᴀ = 附带模型数据，　ᴇ = 导出模型数据（JSON），　ᴄ = 组合模型数据\n\n## 安装\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Cth align=\"left\">用途\u003C\u002Fth>\n    \u003Cth align=\"left\">版本\u003C\u002Fth>\n    \u003Cth align=\"left\">分支\u003C\u002Fth>\n    \u003Cth align=\"left\">构建状态\u003C\u002Fth>\n    \u003Cth align=\"left\">命令\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>生产环境\u003C\u002Ftd>\n    \u003Ctd>v0.7.4\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Ftree\u002Fstable\">stable\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Ftravis-ci.org\u002Fnok\u002Fsklearn-porter\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftravis\u002Fnok\u002Fsklearn-porter\u002Fstable.svg\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ccode>pip install sklearn-porter\u003C\u002Fcode>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>开发环境\u003C\u002Ftd>\n    \u003Ctd>v1.0.0\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Ftree\u002Fmain\">main\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Ftravis-ci.org\u002Fnok\u002Fsklearn-porter\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftravis\u002Fnok\u002Fsklearn-porter\u002Fmain.svg\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>\u003Ccode>pip install https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fzipball\u002Fmain\u003C\u002Fcode>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n在两种环境下，唯一的先决条件是 `scikit-learn >= 0.17, \u003C= 0.22`。\n\n\n## 使用方法\n\n### Binder\n\n您可以通过启动 Binder 中的交互式笔记本自行尝试： [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Fnok\u002Fsklearn-porter\u002Frelease\u002F1.0.0?filepath=examples\u002Fbasics\u002Findex.pct.ipynb)\n\n### 基础用法\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. 加载数据并训练一个示例分类器：\nX, y = load_iris(return_X_y=True)\nclf = DecisionTreeClassifier()\nclf.fit(X, y)\n\n# 2. 导出或转译模型：\noutput = port(clf, language='js', template='attached')\nprint(output)\n\n# 3. 保存导出的模型：\nsrc_path, json_path = save(clf, language='js', template='exported', directory='\u002Ftmp')\nprint(src_path, json_path)\n\n# 4. 使用导出的模型进行预测：\ny_classes, y_probas = make(clf, X[:10], language='js', template='exported')\nprint(y_classes, y_probas)\n\n# 5. 始终通过完整性检查来测试导出的模型：\nscore = test(clf, X[:10], language='js', template='exported')\nprint(score)\n```\n\n### 面向对象编程\n\n```python\nfrom sklearn.datasets import load_iris\nfrom sklearn.tree import DecisionTreeClassifier\n\nfrom sklearn_porter import Estimator\n\n# 1. 加载数据并训练一个示例分类器：\nX, y = load_iris(return_X_y=True)\nclf = DecisionTreeClassifier()\nclf.fit(X, y)\n\n# 2. 导出或转译模型：\nest = Estimator(clf, language='js', template='attached')\noutput = est.port()\nprint(output)\n\n# 3. 保存导出的模型：\nest.template = 'exported'\nsrc_path, json_path = est.save(directory='\u002Ftmp')\nprint(src_path, json_path)\n\n# 4. 使用导出的模型进行预测：\ny_classes, y_probas = est.make(X[:10])\nprint(y_classes, y_probas)\n\n# 5. 始终通过完整性检查来测试导出的模型：\nscore = est.test(X[:10])\nprint(score)\n```\n\n### 命令行工具\n\n此外，您还可以在命令行中使用 sklearn-porter。安装完成后即可使用 `porter` 命令。\n\n```\nporter {show,port,save} [-h] [-v]\n\nporter show [-l {c,go,java,js,php,ruby}] [-h]\n\nporter port \u003Cestimator> [-l {c,go,java,js,php,ruby}]\n                        [-t {attached,combined,exported}]\n                        [--skip-warnings] [-h]\n\nporter save \u003Cestimator> [-l {c,go,java,js,php,ruby}]\n                        [-t {attached,combined,exported}]\n                        [--directory DIRECTORY]\n                        [--skip-warnings] [-h]\n```\n\n您可以序列化一个模型并将其本地保存。有关更多详细信息，请参阅 [模型持久化](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fmodel_persistence.html#persistence-example) 的说明。\n\n```python\nfrom joblib import dump\n\ndump(clf, 'estimator.joblib', compress=0)\n```\n\n之后，可以使用子命令 `port` 将模型转译：\n\n```bash\nporter port estimator.joblib -l js -t attached > estimator.js\n```\n\n为进一步处理，您可以将结果传递给其他应用程序，例如 [UglifyJS](https:\u002F\u002Fgithub.com\u002Fmishoo\u002FUglifyJS2)。\n\n```bash\nporter port estimator.joblib -l js -t attached | uglifyjs --compress -o estimator.min.js\n```\n\n## 已知问题\n\n- 在某些罕见情况下，支持向量机的回归测试，即 [SVC](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.SVC.html) 和 [NuSVC](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.NuSVC.html)，由于 `scikit-learn>=0.22` 而会失败。因此会引发 `QualityWarning` 警告，提醒您使用 `test` 方法评估结果。\n\n\n## 开发\n\n### 别名\n\n以下命令可在日常开发中节省时间：\n\n```bash\n# 使用 conda 安装 Python 环境：\nmake setup\n\n# 启动包含示例的 Jupyter 笔记本：\nmake notebook\n\n# 在主机或独立的 Docker 容器中运行测试：\nmake tests\nmake tests-docker\n\n# 使用 pylint 检查源代码：\nmake lint\n\n# 使用 jupytext 生成笔记本：\nmake examples\n\n# 使用 twine 部署新版本：\nmake deploy\n```\n\n### 依赖项\n\n先决条件是 Python 3.6，您可以通过 [conda](https:\u002F\u002Fdocs.conda.io\u002Fen\u002Flatest\u002Fminiconda.html) 安装：\n\n```bash\nconda env create -n sklearn-porter_3.6 python=3.6\nconda activate sklearn-porter_3.6\n```\n\n之后，您需要安装所有必需的包：\n\n```bash\npip install --no-cache-dir -e \".[development,examples]\"\n```\n\n### 环境\n\n所有测试均在以下 [scikit-learn](https:\u002F\u002Fgithub.com\u002Fscikit-learn\u002Fscikit-learn) 和 Python 版本的组合上运行：\n\n\u003Ctable border=\"0\" width=\"100%\">\n  \u003Ctr align=\"center\">\n    \u003Ctd colspan=\"2\" rowspan=\"2\">\u003C\u002Ftd>\n    \u003Ctd colspan=\"4\">\u003Cstrong>Python\u003C\u002Fstrong>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>\u003Cstrong>3.5\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>\u003Cstrong>3.6\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>\u003Cstrong>3.7\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>\u003Cstrong>3.8\u003C\u002Fstrong>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"18\">\u003Cstrong>scikit-learn\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.17\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">scikit-learn 不支持\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">scikit-learn 不支持\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.18\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">scikit-learn 不支持\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">scikit-learn 不支持\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n    \u003Ctd>numpy 1.9.3\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n    \u003Ctd>scipy 0.16.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.19\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">scikit-learn 不支持\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">scikit-learn 不支持\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy 1.14.5\u003C\u002Ftd>\n    \u003Ctd>numpy 1.14.5\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy 1.1.0\u003C\u002Ftd>\n    \u003Ctd>scipy 1.1.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.20\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd>cython 0.27.3\u003C\u002Ftd>\n    \u003Ctd rowspan=\"3\">joblib 不支持\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.21\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd rowspan=\"3\">\u003Cstrong>0.22\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n    \u003Ctd>cython\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n    \u003Ctd>numpy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr align=\"center\">\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n    \u003Ctd>scipy\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n对于回归测试，我们必须使用特定的编译器和解释器：\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Cth align=\"left\">名称\u003C\u002Fth>\n    \u003Cth align=\"left\">来源\u003C\u002Fth>\n    \u003Cth align=\"left\">版本\u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>GCC\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgcc.gnu.org\">https:\u002F\u002Fgcc.gnu.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>10.2.1\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Go\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgolang.org\">https:\u002F\u002Fgolang.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>1.15.15\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Java (OpenJDK)\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fopenjdk.java.net\">https:\u002F\u002Fopenjdk.java.net\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>1.8.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Node.js\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002F\">https:\u002F\u002Fnodejs.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>12.22.5\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>PHP\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.php.net\u002F\">https:\u002F\u002Fwww.php.net\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>7.4.28\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>Ruby\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002F\">https:\u002F\u002Fwww.ruby-lang.org\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>2.7.4\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n请注意，通常情况下，您可以使用较旧的编译器和解释器来处理生成的源代码。例如，您可以使用 Java 1.6 来编译和运行模型。\n\n### 日志记录\n\n您可以通过更改 `logging.level` 选项来启用日志记录。\n\n```python\nfrom sklearn_porter import options\n\nfrom logging import DEBUG\n\noptions['logging.level'] = DEBUG\n```\n\n### 测试\n\n您可以在本地机器（主机）或单独运行的 Docker 容器中运行单元测试和回归测试。\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):\u002Fhome\u002Fabc\u002Frepo \\\n  --detach \\\n  --entrypoint=\u002Fbin\u002Fbash \\\n  --name test \\\n  -t sklearn-porter\n\ndocker exec -it test .\u002Fdocker-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## 引用\n\n如果您在工作中使用了此实现，请添加对该论文的引用。您可以使用以下 BibTeX 条目：\n\n```bibtex\n@unpublished{sklearn_porter,\n  author = {Darius Morawiec},\n  title = {sklearn-porter},\n  note = {将训练好的 scikit-learn 估计器转译为 C、Java、JavaScript 等},\n  url = {https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter}\n}\n```\n\n\n## 许可证\n\n该软件包是根据 [BSD 3-Clause](LICENSE) 许可证发布的开源软件。","# sklearn-porter 快速上手指南\n\n`sklearn-porter` 是一个将训练好的 scikit-learn 模型转译为 C、Java、JavaScript、Go、PHP 或 Ruby 代码的工具。它特别适用于资源受限的嵌入式系统或对性能要求极高的关键应用场景，让你能在非 Python 环境中直接运行机器学习模型。\n\n## 环境准备\n\n*   **操作系统**：Linux, macOS, Windows\n*   **Python 版本**：支持 Python 2.7 及 Python 3.x\n*   **核心依赖**：\n    *   `scikit-learn` (版本要求：`>= 0.17` 且 `\u003C= 0.22`)\n    *   `joblib` (用于模型序列化)\n\n> **注意**：由于该工具对 scikit-learn 版本有严格限制（最高支持到 0.22），建议在独立的虚拟环境中使用，以免与项目中其他需要新版 scikit-learn 的代码冲突。\n\n## 安装步骤\n\n### 1. 创建虚拟环境（推荐）\n为了避免依赖冲突，建议先创建一个隔离环境并安装指定版本的 scikit-learn：\n\n```bash\npython -m venv skporter-env\nsource skporter-env\u002Fbin\u002Factivate  # Windows 用户请使用: skporter-env\\Scripts\\activate\n\n# 安装兼容版本的 scikit-learn (国内用户可使用清华源加速)\npip install scikit-learn==0.22.0 -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n### 2. 安装 sklearn-porter\n生产环境推荐安装稳定版：\n\n```bash\npip install sklearn-porter -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n若需体验最新开发版功能：\n```bash\npip install https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fzipball\u002Fmain\n```\n\n## 基本使用\n\n以下示例演示如何将一个训练好的决策树模型转译为 JavaScript 代码，并进行预测验证。\n\n### 1. 训练模型并转译代码\n\n```python\nfrom sklearn.datasets import load_iris\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn_porter import port\n\n# 1. 加载数据并训练模型\nX, y = load_iris(return_X_y=True)\nclf = DecisionTreeClassifier()\nclf.fit(X, y)\n\n# 2. 将模型转译为 JavaScript 代码 (模板模式：attached，即模型数据嵌入代码中)\njs_code = port(clf, language='js', template='attached')\n\n# 打印生成的代码，可保存为 .js 文件\nprint(js_code)\n```\n\n### 2. 保存模型文件（分离模式）\n\n如果你希望将模型数据与逻辑代码分离（例如生成一个 `.js` 文件和一个 `.json` 数据文件）：\n\n```python\nfrom sklearn_porter import save\n\n# 保存为 exported 模式，生成源文件路径和 JSON 数据路径\nsrc_path, json_path = save(clf, language='js', template='exported', directory='\u002Ftmp')\nprint(f\"Source: {src_path}, Data: {json_path}\")\n```\n\n### 3. 在 Python 中验证转译后的模型\n\n`sklearn-porter` 提供了 `make` 和 `test` 方法，可以在不离开 Python 环境的情况下，调用生成的外部代码逻辑进行预测和完整性校验：\n\n```python\nfrom sklearn_porter import make, test\n\n# 使用前 10 条数据进行预测\ny_classes, y_probas = make(clf, X[:10], language='js', template='attached')\nprint(\"预测类别:\", y_classes)\nprint(\"预测概率:\", y_probas)\n\n# 进行完整性测试（对比原始模型与转译后模型的输出一致性）\nscore = test(clf, X[:10], language='js', template='attached')\nprint(\"一致性得分:\", score)\n```\n\n### 4. 命令行使用 (CLI)\n\n你也可以先将模型保存为本地文件，再通过命令行工具进行转译：\n\n```bash\n# 1. 在 Python 中保存模型\n# from joblib import dump\n# dump(clf, 'model.joblib')\n\n# 2. 使用 porter 命令转译\nporter port model.joblib -l js -t attached > model.js\n\n# 3. 结合其他工具（如 UglifyJS）进行压缩\nporter port model.joblib -l js -t attached | uglifyjs --compress -o model.min.js\n```","某工业物联网团队需要在资源受限的嵌入式网关上实时运行故障预测模型，以监测生产线电机状态。\n\n### 没有 sklearn-porter 时\n- **环境依赖沉重**：网关必须安装完整的 Python 解释器和 scikit-learn 库，导致固件体积庞大，启动缓慢。\n- **推理延迟过高**：Python 的动态特性在低主频 CPU 上执行效率低下，无法满足毫秒级的实时报警需求。\n- **部署维护困难**：嵌入式系统缺乏完善的包管理工具，更新模型版本往往需要重刷整个系统镜像，风险极高。\n- **语言生态隔离**：底层控制逻辑由 C\u002FJava 编写，调用 Python 模型需通过复杂的进程间通信或 API，增加了系统不稳定性。\n\n### 使用 sklearn-porter 后\n- **原生代码集成**：直接将训练好的决策树或 SVM 模型转译为纯 C 或 Java 代码，无需任何外部依赖即可编译进固件。\n- **极致运行性能**：生成的代码利用编译器优化，在嵌入式芯片上的推理速度提升数十倍，轻松实现实时响应。\n- **轻量级部署**：模型逻辑变为普通源代码文件，更新算法只需替换单个文件并重新编译，极大降低了运维成本。\n- **无缝系统融合**：预测逻辑直接嵌入现有的 C\u002FC++ 或 Java 控制流中，消除了跨语言调用的开销与复杂性。\n\nsklearn-porter 成功打破了数据科学原型与高性能生产环境之间的壁垒，让复杂的机器学习模型能在最苛刻的硬件边缘高效落地。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnok_sklearn-porter_db1babed.png","nok","Darius Morawiec","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fnok_720bcbc2.jpg",null,"Germany","https:\u002F\u002Fgithub.com\u002Fnok",[82],{"name":83,"color":84,"percentage":85},"Python","#3572A5",100,1309,169,"2026-03-21T15:41:15","BSD-3-Clause",1,"","不需要 GPU","未说明",{"notes":95,"python":96,"dependencies":97},"该工具用于将训练好的 scikit-learn 模型转译为 C、Go、Java、JavaScript、PHP 或 Ruby 代码，适用于嵌入式系统或对性能要求苛刻的场景。主要依赖仅为特定版本的 scikit-learn (0.17 至 0.22)，不支持更新的 scikit-learn 版本。","2.7, 3.4+",[98],"scikit-learn>=0.17, \u003C=0.22",[54,51,13],[101,102,103,104],"machine-learning","data-science","scikit-learn","sklearn","2026-03-27T02:49:30.150509","2026-04-06T07:11:46.614127",[108,113,118,123,128,133],{"id":109,"question_zh":110,"answer_zh":111,"source_url":112},15591,"如何解决大型随机森林模型导出到 Java 时出现的“常量过多（Too many constants）”编译错误？","当模型过大导致生成的 Java 代码常量超出限制时，可以使用 `export_data=True` 参数将模型数据外部化。请安装最新的主分支版本：\n1. 卸载旧版本：`pip uninstall -y sklearn-porter`\n2. 安装最新版：`pip install --no-cache-dir https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fzipball\u002Fmaster`\n3. 在调用预测方法时使用 `export_data=True` 参数。具体示例可参考官方 Notebook：https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fblob\u002Fmaster\u002Fexamples\u002Festimator\u002Fclassifier\u002FRandomForestClassifier\u002Fjava\u002Fbasics_imported.ipynb","https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F8",{"id":114,"question_zh":115,"answer_zh":116,"source_url":117},15592,"使用 pip 安装 sklearn-porter 时出现 'ImportError: No module named Porter' 错误怎么办？","这是一个已修复的安装脚本 bug。解决方法是直接从 GitHub 主分支安装最新版本，而不是使用 PyPI 上的旧缓存包。请执行以下命令：\n1. `pip uninstall -y sklearn-porter`\n2. `pip install --no-cache-dir https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fzipball\u002Fmaster`\n这将安装包含修复补丁的最新开发版本。","https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F10",{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},15593,"为什么导出的 Naive Bayes 模型在 Android\u002FJava 中总是预测同一个标签，而在 Python 中正常？","这通常是由于训练数据或模型参数在移植过程中不一致导致的。排查步骤如下：\n1. 确认在 Java 端使用的输入数据格式（如 roll, pitch, yaw 值）与 Python 训练时的 `.fit()` 数据完全一致。\n2. 检查是否使用了默认参数的 `GaussianNB` 分类器。\n3. 建议分享用于训练的具体数据样本和 Java 端的预测调用代码，以便对比数据预处理步骤是否存在差异（例如归一化或数据类型转换问题）。","https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F21",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},15594,"尝试导出包含 OneVsRestClassifier 或 Pipeline 的 LinearSVC 模型时报错不支持，该如何解决？","sklearn-porter 目前可能不直接支持包裹在 `OneVsRestClassifier` 或复杂 `Pipeline` 中的模型。报错信息明确指出模型结构不受支持。解决方案包括：\n1. 尝试解包模型，直接导出内部的基估计器（如果业务逻辑允许）。\n2. 关注项目的新建 Issue（如 #19），等待对 `OneVsRestClassifier` 的原生支持更新。\n3. 暂时避免在需要导出的模型中使用多层封装结构，直接使用基础分类器进行训练。","https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F18",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},15595,"SVC 或 RandomForest 模型导出后，如何在 Java\u002FJS 中获取预测概率（predict_proba）而不仅仅是类别标签？","虽然库可能未直接支持 `predict_proba` 方法，但可以通过修改生成的代码逻辑来实现。以 RandomForest 为例，原代码通过 `findMax(classes)` 返回得票最多的类别索引。你可以修改生成的代码，使其直接返回投票计数数组 `classes`，然后在外层计算概率（即每个类别的票数除以总树的数量）。\n示例修改（JS）：将 `return findMax(classes);` 改为 `return classes;`，然后在应用层自行计算比例。对于 SVM，由于原理不同，可能需要更复杂的数学公式移植，目前社区建议关注后续功能更新。","https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F46",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},15596,"是否支持导出由 scikit-neuralnetwork 训练的 Multilayer Perceptron (MLP) 模型到 Java？","sklearn-porter 主要针对 scikit-learn 原生库设计的。对于第三方库如 `scikit-neuralnetwork` 训练的模型，该工具可能无法直接读取或转换。建议方案：\n1. 尝试使用 scikit-learn 原生的 `MLPClassifier` 重新训练模型，因为它是被支持的。\n2. 如果必须使用特定库，可能需要手动编写解析器来读取 pickle 文件并生成对应的 Java 代码，或者寻找专门针对该库的转换工具。","https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F6",[139,144,149,154,159,164,169,174,179,184,189,194,199,204,209],{"id":140,"version":141,"summary_zh":142,"released_at":143},90200,"v0.7.2","## 0.7.1 和 0.7.2\n\n这些补丁解决了 `0.7.0` 版本中的构建问题。\n\n### 修复\n\n- 修复了集中式元信息和构建过程中的安装问题\n- 修复了遗漏的包，并将 `six` 添加到 `requirements.txt` 文件中\n\n## 0.7.0\n\n这是在下一个主要版本 `1.0.0` 之前的次要更新。\n\n### 修复\n\n- 修复了 RandomForestClassifier 中的索引格式问题 ([#41](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fpull\u002F41)，感谢 [@apasanen](https:\u002F\u002Fgithub.com\u002Fapasanen))\n\n### 新增\n\n- 在 CI 中添加了使用 Xenial 的 Python 3.7 环境用于测试\n- 添加了 [PyTest](https:\u002F\u002Fdocs.pytest.org) 以进行扩展测试（参见 [pytest.ini](pytest.ini)）\n- 添加了一些带有依赖处理的实用 Makefile 任务（参见 [Makefile](Makefile)）：\n    - `install.environment`：安装 `conda` 环境\n    - `install.requirements`：安装所有 `pip` 依赖\n    - `make link`：将 `porter`（CLI）安装到命令行\n    - `make open.examples`：启动本地 Jupyter 服务器\n    - `make stop.examples`：停止已启动的 Jupyter 服务器\n    - `make test`：运行 [tests](tests) 中的所有单元测试\n    - `make lint`：对 [sklearn_porter](sklearn_porter) 运行 pylint 检查\n    - `make jupytext`：从 Python 源代码生成笔记本文件\n\n### 变更\n\n- 核心：\n    - 将所有元信息合并到 `sklearn_porter\u002Fpackage.json`\n- CI 和依赖：\n    - 从 CI 中移除 `conda`\n    - 清理并拆分 `pip` 依赖为三部分：\n        - [requirements.txt](requirements.txt)：库依赖\n        - [requirements.examples.txt](requirements.examples.txt)：示例依赖\n        - [requirements.development.txt](requirements.development.txt)：开发依赖\n    - 更新了扩展依赖（例如 GCC、PHP 等）\n- 工具：\n    - 重构了类 [sklearn_porter.utils.Shell](sklearn_porter.utils.Shell)，以消除冗余\n    - 对 CLI 进行了重构，并进行了多项改进（分组参数、使用控制台脚本等）\n- 测试：\n    - 将测试用的 Web 服务器端口从 `8080` 改为 `8713`（因为与 Jenkins 的默认端口冲突）\n    - 移除了类 [tests.utils.DependencyChecker](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fblob\u002Frelease\u002F0.6.2\u002Ftests\u002Futils\u002FDependencyChecker.py)，改用 [sklearn_porter.utils.Environment](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fblob\u002Frelease\u002F0.7.0\u002Fsklearn_porter\u002Futils\u002FEnvironment.py)\n    - 移除了类 [tests.utils.Timer](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fblob\u002Frelease\u002F0.6.2\u002Ftests\u002Futils\u002FTimer.py)，改用 PyTest 的 `--durations=0` 参数","2019-01-20T13:14:03",{"id":145,"version":146,"summary_zh":147,"released_at":148},90201,"v0.6.2","### 修复\r\n\r\n- 修复转译后的估计器的 getter 方法，并移除文件名操作 ([#b5efe78](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Fb5efe78de9dd721f9135f65c525a3e8ab8b06f79))\r\n- 修复并添加 Python 3.x 中二进制数据到字符串的转换 ([#bdcfb1f](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Fbdcfb1ff4c076485a5fc3b00beaf81becec0717b))\r\n- 修复并关闭已打开的模板文件 ([#b5efe78](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Fb5efe78de9dd721f9135f65c525a3e8ab8b06f79))","2018-02-03T22:10:21",{"id":150,"version":151,"summary_zh":152,"released_at":153},90202,"v0.6.1","### 新增\n\n- 添加新的估算器：\n    - Go：\n        - `ensemble.RandomForestClassifier`（由 [tpotega](https:\u002F\u002Fgithub.com\u002Ftpotega) 提交的 [PR #24](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fpull\u002F24)）\n\n### 修复\n\n- 修复 C 语言中 DecisionTreeClassifier 的方法签名错误（由 [sanjivsoni17](https:\u002F\u002Fgithub.com\u002Fsanjivsoni17) 提交的 [Issue #23](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F23)）","2018-01-03T12:10:46",{"id":155,"version":156,"summary_zh":157,"released_at":158},90203,"v0.6.0","### 新增内容\r\n\r\n- 为后续版本添加 [changelog.md](changelog.md) 文件（[#ee44ac9](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Fee44ac92618bf48e3aff6fbb65591b6f87c88826)）。\n- 在每个发布版本的构建中添加 [changelog.md](changelog.md) 和 [readme.md](readme.md) 文件（[#ee44ac9](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Fee44ac92618bf48e3aff6fbb65591b6f87c88826)）。\n- 为每种目标编程语言新增一个命令行参数（例如 `--java`、`--c` 或 `--go`）（[#41b93a0](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F41b93a0bff44dd045e711a08a53fe8c75d8d460a)）。\n- 添加 `--class_name` 和 `--method_name` 参数，用于直接在最终输出中定义类名和方法名（[#6f2a1d9](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F6f2a1d97b5cddb6232a4fcf0d469cf167a019fdf)）。\n- 增加管道功能及相关命令行参数（`--pipe` 或 `-p`）（[#8a57746](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F8a57746e4e97b137032fa7401e37792d496c0aa2)）。\n- 添加 `--export` 参数，用于转储模型数据并使用特定模板（[#0669645](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F0669645acdfa8cbe39a8446f95f671c580cc2026)）。\n- 添加 `--checksum` 参数，用于在转储的模型数据文件末尾追加计算出的 MD5 校验和（[#cd12827](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Fcd12827cb136d0711c555fe321f72d6aa8326143)）。\n- 添加 `--data` 参数，仅导出模型数据（[#fad499a](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Ffad499a4448f55d8c344f1088cca54a5c267c3e9)）。\n- 在 `tests\u002Flanguage\u002FGo.py` 中添加测试类 `Go`，用于测试 Go 目标编程语言的所有实现（[#1d0b5d6](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F1d0b5d6a2bf1a5604ae283cc728e3a83fb17a6ea)）。\n- 添加 Go 编译命令（`go build -o brain brain.go`）和执行命令（`.\u002Fbrain`）（[#5d24f57](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F5d24f57ec50e9935dac8389e243deda7b09659d7)）。\n- 在 JavaScript 模板中添加 Web Workers 的初始功能（[#87d3236](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F87d32365d06ba01cce7667b03f9a4265a1312dad)），并创建单独示例（[#187efac](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F187efac3fa045e177a1980244bef302a462fcf4e)）。\n- 添加从已使用的 [Pipeline](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fpipeline.Pipeline.html) 中读取估计器的功能（[#b92edff](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002Fb92edfff278a997d03f6bca65ea99d0bd02f8ba3)，问题：[#18](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F18)）。\n- 添加一个新的类参数（`num_format=lambda x: str(x)`），用于更改浮点值的默认表示方式（[#7f9fac8](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F7f9fac8eb35371e9374b4cf73519f83dbcb66632)）。\n- 使用估计器名称作为默认类名（例如 `MLPClasifier`、`KNeighborsClassifier`、`SVC` 等）（[#710a854](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F710a854072bf19054cc2c46eff661241ffa92d65)）。\n- 添加新的估计器：\n    - Go:\n        - `tree.Decision","2017-12-04T22:00:28",{"id":160,"version":161,"summary_zh":162,"released_at":163},90204,"v0.5.2","## 错误修复：\n\n- 增加自动使用优化器的最佳估计器的功能 https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F18","2017-08-26T21:41:36",{"id":165,"version":166,"summary_zh":167,"released_at":168},90205,"v0.5.1","## 修复bug：\n\n- 修复安装 bug https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F17","2017-08-26T21:33:00",{"id":170,"version":171,"summary_zh":172,"released_at":173},90206,"v0.5.0","## Bug修复：\n\n- 修复 [sklearn.svm.SVC](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.SVC.html) 中的投票机制（[提交](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fcommit\u002F303eef11644658c59a31e0b81a066477a43011ff)）\n\n## 算法：\n\n- 添加首个回归器：[sklearn.neural_network.MLPRegressor](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neural_network.MLPRegressor.html) ✨\n- 为以下分类器添加二分类功能：\n  - [sklearn.svm.LinearSVC](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.LinearSVC.html)\n  - [sklearn.svm.SVC.html](http:\u002F\u002Fscikit-learn.org\u002F0.18\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.SVC.html)\n  - [sklearn.svm.NuSVC](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.svm.NuSVC.html)\n  - [sklearn.neural_network.MLPClassifier](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.neural_network.MLPClassifier.html)\n- 为 [sklearn.naive_bayes.GaussianNB](http:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB) 添加 JavaScript 语法\n\n## 变更：\n\n- 重构测试并添加新的通用测试\n- 将 `breast_cancer`、`digits` 和 `iris` 数据集添加到所有 [分类器测试](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fblob\u002Fstable\u002Ftests\u002Fclassifier\u002FClassifier.py#L37-L53)\n- 添加新的环境变量 `N_RANDOM_FEATURE_SETS` 和 `N_EXISTING_FEATURE_SETS`","2017-05-26T21:55:59",{"id":175,"version":176,"summary_zh":177,"released_at":178},90207,"v0.4.1","## 新特性：\n\n- 在 [export](https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fblob\u002Fstable\u002Fsklearn_porter\u002FPorter.py#L158-L159) 方法中添加参数 `use_repr`，用于控制浮点数值的输出格式。","2017-04-16T21:01:42",{"id":180,"version":181,"summary_zh":182,"released_at":183},90208,"v0.4.0","## 新特性：\n\n- 从 Python 预测目标编程语言中的结果\n- 计算移植后估计器与原始估计器之间的准确率\n","2017-03-24T00:01:34",{"id":185,"version":186,"summary_zh":187,"released_at":188},90209,"v0.3.2","## 添加更改：\n\n### 包\n- 通过重构依赖处理、测试和示例，扩展向后兼容性（`scikit-learn>=0.14.1`）\n\n## 修复的 bug：\n\n### AdaBoostClassifier、DecisionTreeClassifier 和 RandomForestClassifier\n- 修复负索引错误（https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F5）\n","2017-01-29T22:25:30",{"id":190,"version":191,"summary_zh":192,"released_at":193},90210,"v0.3.1","## Fixed bugs:\n\n### SVC & NuSVC\n- The size of the initialized arrays was too small (https:\u002F\u002Fgithub.com\u002Fnok\u002Fsklearn-porter\u002Fissues\u002F7)\n","2017-01-28T18:26:35",{"id":195,"version":196,"summary_zh":197,"released_at":198},90211,"v0.3.0","## New algorithm support:\r\n\r\n### Java\r\n- sklearn.neighbors.KNeighborsClassifier\r\n- sklearn.naive_bayes.GaussianNB\r\n- sklearn.naive_bayes.BernoulliNB\r\n\r\n### JavaScript\r\n- sklearn.svm.SVC\r\n- sklearn.neighbors.KNeighborsClassifier\r\n\r\n### PHP\r\n- sklearn.svm.SVC\r\n- sklearn.svm.LinearSVC\r\n- sklearn.tree.DecisionTreeClassifier\r\n\r\n### Ruby\r\n- sklearn.svm.LinearSVC\r\n","2017-01-08T22:49:03",{"id":200,"version":201,"summary_zh":202,"released_at":203},90212,"v0.2.1","## Fix:\n- Imports on the CLI by using Python (>= v3.3) #3\n","2016-12-10T11:01:55",{"id":205,"version":206,"summary_zh":207,"released_at":208},90213,"v0.2.0","## New algorithm support:\r\n\r\n### C\r\n- sklearn.svm.SVC\r\n- sklearn.tree.DecisionTreeClassifier\r\n- sklearn.ensemble.RandomForestClassifier\r\n- sklearn.ensemble.ExtraTreesClassifier\r\n- sklearn.ensemble.AdaBoostClassifier\r\n","2016-11-18T09:32:58",{"id":210,"version":211,"summary_zh":212,"released_at":213},90214,"v0.1.0","## Description:\r\n\r\nRelease first stable version.\r\n\r\n## New algorithm support:\r\n\r\n### C\r\n- sklearn.svm.LinearSVC\r\n\r\n### Java\r\n- sklearn.svm.SVC\r\n- sklearn.svm.LinearSVC\r\n- sklearn.tree.DecisionTreeClassifier\r\n- sklearn.ensemble.RandomForestClassifier\r\n- sklearn.ensemble.ExtraTreesClassifier\r\n- sklearn.ensemble.AdaBoostClassifier\r\n- sklearn.neural_network.MLPClassifier\r\n\r\n### JavaScript\r\n- sklearn.svm.LinearSVC\r\n- sklearn.tree.DecisionTreeClassifier\r\n- sklearn.ensemble.RandomForestClassifier\r\n- sklearn.ensemble.ExtraTreesClassifier\r\n- sklearn.ensemble.AdaBoostClassifier\r\n- sklearn.neural_network.MLPClassifier\r\n\r\n### Go\r\n- sklearn.svm.LinearSVC\r\n","2016-11-07T08:43:44"]