是否可以在python中提取训练好的机器学习模型的公式?

Posted

技术标签:

【中文标题】是否可以在python中提取训练好的机器学习模型的公式?【英文标题】:Is it possible to extract the formulas of the trained machine learning models in python? 【发布时间】:2018-11-06 07:32:43 【问题描述】:

在我的项目中,我应该使用分类器根据 6 个输入值预测 8 个类之一。 我必须在仅运行 C++ 代码的设备上比较所有监督学习分类器。 所以我使用 python 来教授/拟合机器学习模型,但我需要找出每个分类器在 C++ 上运行它的最终公式。 有没有办法从模型中获取这些公式/代码?

使用的机器学习算法:

    支持向量机 朴素贝叶斯 线性回归 线性判别分析 决策树 K-最近邻算法 逻辑回归 神经网络 梯度提升算法 随机森林。

【问题讨论】:

你在 Python 中使用什么 ML 框架?您可以通过导出模型并将其加载到 C++ 可执行文件中,从而在设备上实际运行模型。 ML 框架是 scikit learn。实际上我想在超低功耗设备上运行它。所以我需要使用公式本身,并可能对其进行优化。 我不认为 scikit learn 有一个很好的机制来导出到可编译的语言。使用 TensorFlow 之类的东西会更好,它允许您导出模型并使用 C++ API 加载它们。以在低功耗设备上合理执行的方式重新实现所有这些算法将是大量工作 你是对的。但我认为只使用分类器(这是一种公式)不应该那么复杂。例如,神经网络公式约为:总和 += 权重 * 输入(每个节点上的 2 或 3 层)。我的意思是无论计算时间如何,实现本身都应该很简单。 (感谢您的 cmets) 【参考方案1】:

没有将 Python 机器学习模型转换为 C++ 代码的通用机制,因为 Python 代码需要完整的运行时实现。

我还需要在低功耗嵌入式设备/微控制器上运行分类器。并已开始根据在 scikit-learn 中训练的模型,以嵌入式友好 C 语言实现您列出的一些算法。

朴素贝叶斯:embayes 随机森林/决策树:emtrees。最终还有梯度提升树(XGBoost、LightGBM)。

还有一些其他嵌入式友好分类器项目可用:

神经网络。 uTensor 允许使用 CMSIS-NN 在 ARM Cortex 上运行 TensorFlow Lite 模型。 K-最近邻 (kNN)。经典的 kNN 实现起来非常简单。但是由于它存储了所有的训练样本,模型大小对于嵌入式设备来说通常是有问题的。已经提出了许多替代方案,例如ProtoNN。已实施in ELL

对于其他算法,您可以找到各种 C/C++ 实现,但大多数都是用于操作系统(如 Linux)。根据您的设备的受限程度,可能可以重复使用这些设备。然后你只需要实现从 Python 的模型导出和模型导入到 C++ 库中。

【讨论】:

以上是关于是否可以在python中提取训练好的机器学习模型的公式?的主要内容,如果未能解决你的问题,请参考以下文章

保存训练好的机器学习模型

iOS - 机器学习学习《一》

机器学习——Java调用sklearn生成好的Logistic模型进行鸢尾花的预测

(sklearn)机器学习模型的保存与加载

如何在 iOS 中使用经过 Tensorflow 训练的机器学习模型

基于python如何建立人脸库