Home > Blockchain >  How to use trained Scikit Learn Python model in GoLang?
How to use trained Scikit Learn Python model in GoLang?

Time:03-10

I have trained a Scikit Learn model in Python environment which i need to use it for inference in GoLang. Could you please help me how can i export/save my model in python and then use it back in GoLang.

I found a solution for Neural Network model where i can save Tensorflow model in ONNX format and load it using Onnx-go in GoLang. But this is specific for Neural Network models. But I am unable to figure it out for scikit-learn models.

CodePudding user response:

You can develop an REST json API service to expose your scikit-learn model and communicate with go client.

CodePudding user response:

Found out the following solutions.

Solution1:

We should be exporting the python model in PMML format and then import in GoLang using GoScore Library

Here is a GoLang code snippet loading PMML file using GoScore

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]

Found this solution referring to this medium article. (Although its R Model to GoLang, it still relevant)

Solution2:

SkLearn-Porter is library in python to port models into various languages. Unfortunately, It doesn't support all the models for Go at the moment.

  • Related