c - 如何在c中加载包含机器学习的pickle文件?

标签 c machine-learning scikit-learn

我需要通过 C 中的 pickle 文件加载 sklearn 模型。但我不知道如何做到这一点。这是我的代码和我的模型:

import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
import pickle

url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:, 0:8]
Y = array[:, 8]
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)
# Fit the model on 33%
model = LogisticRegression()
model.fit(X_train, Y_train)
print(model.score(X_test, Y_test))
# save the model to disk
filename = 'finalized_model.sav'
pickle.dump(model, open(filename, 'wb'))

我不知道该怎么做。如果您能帮助我,我将不胜感激。

最佳答案

总有解决方法,其中一种方法可能是

在 Python 代码上编写基于 Python Flask 的 API/微服务,并使用 LibCurl 库在 C 中调用它。我假设您的 test_data 将是单列 csv 文件,所有 Flask 应用程序默认在 localhost:5000 上运行。如果您的数据看起来不像这样,我建议您编写自己的应用程序,并带有适当的参数请求。这段代码仅供引用。

#python flask code

from flask import Flask
app = Flask(__name__)

@app.route('/')
def your_model():
   test_data = pandas.read_csv('test_data.csv')
   model = pickle.load("your_model.pkl")
   pred_result = model.predict(test_data)
   return(pred_result)

app.run()


/* c code*/

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "http://localhost:5000/your_API_name");

struct curl_slist *headers = NULL;
test_data_as_json_string = {""};
headers = curl_slist_append(headers, "any_parameter: value");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, test_data_as_json_string);

CURLcode ret = curl_easy_perform(hnd);

此代码也可供引用,编写您自己的 C 代码,或者您可以在运行 Flask api 时从 Postman 的代码部分复制粘贴类似的代码。

关于c - 如何在c中加载包含机器学习的pickle文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56198491/

相关文章:

使用这些标志编译时代码无法执行

machine-learning - 是否可以为 scikit-learn LDA 设置初始主题分配?

c - 了解 memcpy 在内存分配中的使用

C - 从文件读取并将信息保存在变量上

java - 线性回归中的梯度下降

python - 用于改变 X 和 y 的 sklearn 管道的自定义转换器

python - `np.concatenate` 一个带有稀疏矩阵的 numpy 数组

python-3.x - cluster_centers_的排序/索引在KMeans聚类SKlearn中代表什么

c - 如何从c中的bind()获取参数?

python - 是否需要在 scikit-learn 中对训练数据进行编码的输入进行编码?