sklearn-porter源码地址:https://github.com/nok/sklearn-porter
安装指令:
pip install sklearn-porter
部分windows系统会报错,原因在于编码,转化一下编码方式。
先列出目前所支持的机器学习的模型到转换语言的对应关系吧:
官方提供的例程:
from sklearn.datasets import load_iris
from sklearn.tree import tree
from sklearn_porter import Porter
# Load data and train the classifier:
samples = load_iris()
X, y = samples.data, samples.target
clf = tree.DecisionTreeClassifier()
clf.fit(X, y)
# Export:
porter = Porter(clf, language='java')#这里可以改变转化语言
output = porter.export(embed_data=True)
print(output)
转化后的语言为java,这里我转化为C语言:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int predict(float features[4]) {
int classes[3];
if (features[3] <= 0.800000011920929) {
classes[0] = 50;
classes[1] = 0;
classes[2] = 0;
} else {
if (features[3] <= 1.75) {
if (features[2] <= 4.950000047683716) {
if (features[3] <= 1.6500000357627869) {
classes[0] = 0;
classes[1] = 47;
classes[2] = 0;
} else {
classes[0] = 0;
classes[1] = 0;
classes[2] = 1;
}
} else {
if (features[3] <= 1.550000011920929) {
classes[0] = 0;
classes[1] = 0;
classes[2] = 3;
} else {
if (features[2] <= 5.450000047683716) {
classes[0] = 0;
classes[1] = 2;
classes[2] = 0;
} else {
classes[0] = 0;
classes[1] = 0;
classes[2] = 1;
}
}
}
} else {
if (features[2] <= 4.8500001430511475) {
if (features[1] <= 3.100000023841858) {
classes[0] = 0;
classes[1] = 0;
classes[2] = 2;
} else {
classes[0] = 0;
classes[1] = 1;
classes[2] = 0;
}
} else {
classes[0] = 0;
classes[1] = 0;
classes[2] = 43;
}
}
}
int index = 0;
for (int i = 0; i < 3; i++) {
index = classes[i] > classes[index] ? i : index;
}
return index;
}
int main(int argc, const char * argv[]) {
/* Features: */
double features[argc-1];
int i;
for (i = 1; i < argc; i++) {
features[i-1] = atof(argv[i]);
}
/* Prediction: */
printf("%d", predict(features));
return 0;
}
可以看到,sklearn-porter的功能就是把模型的预测逻辑以代码的形式表现出来,如果想向在python中调用joblib存取模型还需要再进行进一步的修改。