机器学习模型保存和导出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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值