将各种机器学习模型转换为本地代码的代码生成。
项目描述
m2cgen
m2cgen (模型2代码生成器) - 是一个轻量级的库,它提供了一种简单的方法将训练好的统计模型转换为本地代码(Python、C、Java、Go、JavaScript、Visual Basic、C#、PowerShell、R、PHP、Dart、Haskell、Ruby、F#、Rust、Elixir)。
安装
支持的Python版本为 >= 3.7。
pip install m2cgen
支持的语言
- C
- C#
- Dart
- F#
- Go
- Haskell
- Java
- JavaScript
- PHP
- PowerShell
- Python
- R
- Ruby
- Rust
- Visual Basic (VBA兼容)
- Elixir
支持模型
分类 | 回归 | |
---|---|---|
线性 |
|
|
SVM |
|
|
树 |
|
|
随机森林 |
|
|
提升 |
|
|
您可以在以下位置找到通过CI测试保证兼容性的软件包版本 这里。其他版本也可能得到支持,但它们尚未经过测试。
分类输出
线性 / 线性SVM / 核SVM
二元
标量值;样本到第二类超平面的有符号距离。
多类
向量值;每个类别的样本到超平面的有符号距离。
注释
输出与 LinearClassifierMixin.decision_function
的输出一致。
SVM
异常检测
标量值;样本到分离超平面的有符号距离:对于内点为正,对于异常点为负。
二元
标量值;样本到第二类超平面的有符号距离。
多类
向量值;每个类别的one-vs-one分数,形状为 (n_samples, n_classes * (n_classes-1) / 2)。
注释
当将 decision_function_shape
设置为 ovo
时,输出与 BaseSVC.decision_function
的输出一致。
树 / 随机森林 / 提升法
二元
向量值;类别概率。
多类
向量值;类别概率。
注释
输出与 DecisionTreeClassifier
/ ExtraTreeClassifier
/ ExtraTreesClassifier
/ RandomForestClassifier
/ XGBRFClassifier
/ XGBClassifier
/ LGBMClassifier
的 predict_proba
方法的输出一致。
用法
以下是一个简单示例,说明如何在Python环境中训练的线性模型可以表示为Java代码
from sklearn.datasets import load_diabetes
from sklearn import linear_model
import m2cgen as m2c
X, y = load_diabetes(return_X_y=True)
estimator = linear_model.LinearRegression()
estimator.fit(X, y)
code = m2c.export_to_java(estimator)
生成的Java代码
public class Model {
public static double score(double[] input) {
return ((((((((((152.1334841628965) + ((input[0]) * (-10.012197817470472))) + ((input[1]) * (-239.81908936565458))) + ((input[2]) * (519.8397867901342))) + ((input[3]) * (324.39042768937657))) + ((input[4]) * (-792.1841616283054))) + ((input[5]) * (476.74583782366153))) + ((input[6]) * (101.04457032134408))) + ((input[7]) * (177.06417623225025))) + ((input[8]) * (751.2793210873945))) + ((input[9]) * (67.62538639104406));
}
}
您可以在以下位置找到不同模型/语言的生成代码示例 这里。
命令行界面
m2cgen
可以用作命令行工具,通过序列化模型对象(pickle协议)生成代码。
$ m2cgen <pickle_file> --language <language> [--indent <indent>] [--function_name <function_name>]
[--class_name <class_name>] [--module_name <module_name>] [--package_name <package_name>]
[--namespace <namespace>] [--recursion-limit <recursion_limit>]
请记住,对于反序列化序列化模型对象,它们的类必须在反序列化环境的可导入模块的顶级中定义。
管道操作也受支持。
$ cat <pickle_file> | m2cgen --language <language>
常见问题解答
问:生成代码时出现RecursionError: 最大递归深度超出
错误。
答:如果在生成使用集成模型的代码时发生此错误,请尝试减少该模型中训练估计器的数量。或者,您可以使用sys.setrecursionlimit(<new_depth>)
来增加最大递归深度。
问:在将序列化模型对象转换为代码时,生成代码失败,出现ImportError: 未找到模块 <module_name_here>
错误。
答:此错误表明pickle协议无法反序列化模型对象。对于反序列化序列化模型对象,要求它们的类必须在反序列化环境的可导入模块的顶级中定义。因此,安装提供模型类定义的包可以解决问题。
问:m2cgen生成的代码在某些输入上与原始Python模型提供的结果不同。
答:一些模型在其原生的Python库预测阶段强制输入数据具有特定类型。目前,m2cgen仅支持float64
(double
)数据类型。您可以尝试手动将输入数据转换为其他类型并再次检查结果。此外,由于目标语言中浮点数算术的具体实现,可能存在一些小的差异。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
m2cgen-0.10.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9adfc5c6e693b1bb2e757c379e14ff97c95d1a11f9f6536882ebd7e402d34aa8 |
|
MD5 | a38ad77fc0388e2b347e3ea5df3a9798 |
|
BLAKE2b-256 | 7292eb4176f0e71bcd988a9df54e7103987a232082e5b6ef14a12d56b1c3bddf |
m2cgen-0.10.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b9f3e85133e905a306b507139ea40e595eccf499a7f4842889773caea7b74beb |
|
MD5 | b5104c5a27bb4d084e803d7055200bee |
|
BLAKE2b-256 | 0b1fd57169a8458481e0292b672f8939688b269109d5d559bb0fd1ef3276cd91 |