将在Python中训练的XGBoost模型移植到用C/C++编写的另一个系统

假设我已经在Python中成功训练了一个XGBoost机器学习模型。

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=7)model = XGBClassifier()model.fit(x_train, y_train)y_pred = model.predict(x_test)

我想将这个模型移植到另一个用C/C++编写的系统中。为了做到这一点,我需要了解XGBoost训练模型的内部逻辑,并将其翻译成一系列类似决策树的if-then-else语句,如果我没有理解错的话。

这该如何实现呢?如何找出XGBoost训练模型的内部逻辑,以便在另一个系统上实现它?

我使用的是Python 3.7版本。


回答:

m2cgen 是一个非常棒的包,它可以将兼容Scikit-Learn的模型转换为原始代码。如果你使用的是XGBoost的sklearn包装器(看起来你就是这样做的),那么你可以简单地调用如下代码:

model = XGBClassifier()model.fit(x_train, y_train) ...import m2cgen as m2cwith open('./model.c','w') as f:    code = m2c.export_to_c(model)    f.write(code)

这个包的真正强大之处在于它支持多种不同类型的模型,比如

  • 线性模型
  • 支持向量机(SVM)
  • 决策树
  • 随机森林
  • 提升方法

还有一点。m2cgen还支持多种语言,例如

  • C
  • C#
  • Dart
  • Go
  • Haskell
  • Java
  • JavaScript
  • PHP
  • PowerShell
  • Python
  • R
  • Visual Basic

希望这对你有帮助!

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注