跳转到主要内容

将各种机器学习模型转换为本地代码的代码生成。

项目描述

m2cgen

GitHub Actions Status Coverage Status License: MIT Python Versions PyPI Version Downloads

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

支持模型

分类 回归
线性
  • scikit-learn
    • LogisticRegression
    • LogisticRegressionCV
    • PassiveAggressiveClassifier
    • Perceptron
    • RidgeClassifier
    • RidgeClassifierCV
    • SGDClassifier
  • lightning
    • AdaGradClassifier
    • CDClassifier
    • FistaClassifier
    • SAGAClassifier
    • SAGClassifier
    • SDCAClassifier
    • SGDClassifier
  • scikit-learn
    • ARDRegression
    • BayesianRidge
    • ElasticNet
    • ElasticNetCV
    • GammaRegressor
    • HuberRegressor
    • Lars
    • LarsCV
    • Lasso
    • LassoCV
    • LassoLars
    • LassoLarsCV
    • LassoLarsIC
    • LinearRegression
    • OrthogonalMatchingPursuit
    • OrthogonalMatchingPursuitCV
    • PassiveAggressiveRegressor
    • PoissonRegressor
    • RANSACRegressor(仅支持回归估计器作为基估计器)
    • Ridge
    • RidgeCV
    • SGDRegressor
    • TheilSenRegressor
    • TweedieRegressor
  • StatsModels
    • 广义最小二乘法 (GLS)
    • 广义最小二乘法带自回归误差 (GLSAR)
    • 广义线性模型 (GLM)
    • 普通最小二乘法 (OLS)
    • 基于最大似然估计的[高斯]过程回归 (ProcessMLE)
    • 分位数回归 (QuantReg)
    • 加权最小二乘法 (WLS)
  • lightning
    • AdaGradRegressor
    • CDRegressor
    • FistaRegressor
    • SAGARegressor
    • SAGRegressor
    • SDCARegressor
    • SGDRegressor
SVM
  • scikit-learn
    • LinearSVC
    • NuSVC
    • OneClassSVM
    • SVC
  • lightning
    • KernelSVC
    • LinearSVC
  • scikit-learn
    • LinearSVR
    • NuSVR
    • SVR
  • lightning
    • LinearSVR
  • DecisionTreeClassifier
  • ExtraTreeClassifier
  • DecisionTreeRegressor
  • ExtraTreeRegressor
随机森林
  • ExtraTreesClassifier
  • LGBMClassifier(rf 动能机)
  • RandomForestClassifier
  • XGBRFClassifier
  • ExtraTreesRegressor
  • LGBMRegressor(rf 动能机)
  • RandomForestRegressor
  • XGBRFRegressor
提升
  • LGBMClassifier(gbdt/dart/goss 动能机)
  • XGBClassifier(gbtree(包括提升森林)/gblinear 动能机)
    • LGBMRegressor(gbdt/dart/goss 动能机)
    • XGBRegressor(gbtree(包括提升森林)/gblinear 动能机)

    您可以在以下位置找到通过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 / LGBMClassifierpredict_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仅支持float64double)数据类型。您可以尝试手动将输入数据转换为其他类型并再次检查结果。此外,由于目标语言中浮点数算术的具体实现,可能存在一些小的差异。

    项目详情


    下载文件

    下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

    源代码发行版

    m2cgen-0.10.0.tar.gz (55.8 KB 查看哈希值

    上传时间 源代码

    构建发行版

    m2cgen-0.10.0-py3-none-any.whl (92.2 KB 查看哈希值

    上传时间 Python 3

    由以下支持

    AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面