我在Python环境中训练了一个Scikit-Learn模型,我需要在GoLang中使用它进行推理。你能帮我如何在python中导出/保存我的模型,然后在GoLang中使用它吗。
我找到了一个神经网络模型的解决方案,我可以将Tensorflow模型保存为ONNX格式,并在GoLang中使用ONNX-go加载它。但这是针对神经网络模型的。但我无法为scikit学习模型找到答案。
找到了以下解决方案。
解决方案1:
我们应该以PMML格式导出python模型,然后使用GoScore Library 在GoLang中导入
以下是使用GoScore 加载PMML文件的GoLang代码片段
modelXml, err := ioutil.ReadFile("titanic_rf.pmml")
if (err != nil) {
panic(err)
}
var model goscore.RandomForest
xml.Unmarshal([]byte(modelXml), &model)
features := map[string]interface{}{
"Sex": "male",
"Parch": 0,
"Age": 30,
"Fare": 9.6875,
"Pclass": 2,
"SibSp": 0,
"Embarked": "Q",
}
score, _ := model.Score(features, "0") // scores 0.486
score, _ := model.Score(features, "1") // scores 0.514
score, _ := model.LabelScores(features) // map[0:243 1:257]
找到了参考此媒体文章的此解决方案。(尽管它的R模型与GoLang有关,但它仍然相关(
解决方案2:
SkLearn-Porter是python中的一个库,用于将模型移植到各种语言中。不幸的是,它目前并不支持Go的所有模型。
您可以开发一个REST-json API服务来公开您的scikit-learn模型并与go客户端通信。