机器学习模型保存和导出pmml文件(python代码)

1.导出依赖库文件
原生python环境

pip freeze这是最常用的方法,适用于任何基于pip的Python环境,无论是全局环境还是虚拟环境(如venv或virtualenv)。requirements.txt通常用于纯Python项目,不包括C库等非Python依赖。

导出所有已安装依赖:

pip freeze > requirements.txt

将当前环境中所有已安装的库及其版本信息输出到requirements.txt文件中。

精简导出项目依赖:
仅导出项目实际使用的依赖,可以自动检测项目中哪些库被实际引用并生成更精确的依赖列表:

pipreqs ./ --encoding=utf8 --force

安装命令:

pip install -r requirements.txt
conda环境

导出当前conda环境的所有包到一个environment.yml文件中,这个文件包含了conda环境中的所有依赖(包名和版本),包括Python包和非Python库,也可以用来完全恢复整个conda环境。

conda list --export > environment.yml

安装命令:

conda env create -f environment.yml
2.保存和导出PMML文件

PMML(Predictive Model Markup Language):预测模型标记语言,它是通过XML格式来描述生成的机器学习模型。通常训练好的模型需要在生产环境中部署和使用,一般导出为PMML格式,以便在其他平台上部署使用,再使用目标环境解析PMML文件的库来加载模型,并做出预测。

优点:PMML采用标准的XML格式保存模型,支持很多常用的开源模型转换成PMML文件。支持文本编辑器打开查阅,可以实现跨平台部署,易于使用Java调用。

缺点:对数据预处理的支持有限,支持几乎所有的标准数据处理方式,但对于自拓展的还缺乏有效支持。缺乏对深度学习模型的支持。

3.示例
# -*- coding: utf-8 -*-
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import tree
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn2pmml import sklearn2pmml
from sklearn2pmml.pipeline import PMMLPipeline


class TreeModel:
    def __int__(self):
        pass

    @staticmethod
    def load_data():
        iris = datasets.load_iris()
        iris_features = iris.data
        iris_target = iris.target
        feature_name = iris.feature_names
        train_x, test_x, train_y, test_y = train_test_split(iris_features,
                                                            iris_target,
                                                            test_size=0.3,
                                                            random_state=123)
        return train_x, test_x, train_y, test_y, feature_name

    def train_test_model(self):
        train_x, test_x, train_y, test_y, feature_name = self.load_data()
        model = tree.DecisionTreeClassifier(criterion='gini')
        model.fit(train_x, train_y)
        model.score(train_x, train_y)
        y_pre = model.predict(test_x)
        tree_matrix = metrics.confusion_matrix(test_y, y_pre)
        print('混淆矩阵:\n', tree_matrix)
        print('结果分类报告:\n', classification_report(test_y, y_pre))

        # 特征重要性
        feature_important = pd.DataFrame([*zip(feature_name, model.feature_importances_)],
                                         columns=['features', 'Gini importance'])
        print('特征重要度:\n', feature_important.sort_values(by='Gini importance'))

        return model

    def exe_func(self):
        model = self.train_test_model()
        # 创建一个PMMLPipeline对象
        pipline2 = PMMLPipeline([
            ('classifier', model)
        ])
        # 导出模型为PMML格式
        sklearn2pmml(pipline2, 'model.pmml')


if __name__ == '__main__':
    TreeModel().exe_func()

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 23:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 23:18:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 23:18:03       82 阅读
  4. Python语言-面向对象

    2024-04-26 23:18:03       91 阅读

热门阅读

  1. 贪吃蛇项目实践!(下)

    2024-04-26 23:18:03       44 阅读
  2. git 缓冲区查看与设置

    2024-04-26 23:18:03       29 阅读
  3. PostgreSQL恢复系列:pg_filedump恢复字典构造---惜分飞

    2024-04-26 23:18:03       38 阅读
  4. C++中的STL——stack类的基本使用

    2024-04-26 23:18:03       38 阅读
  5. web前端第三次笔记

    2024-04-26 23:18:03       32 阅读
  6. centos常用命令(持续更新)

    2024-04-26 23:18:03       34 阅读
  7. CSS - 定位详解

    2024-04-26 23:18:03       29 阅读
  8. 在 TypeScript 中declare module 关键字用法

    2024-04-26 23:18:03       32 阅读