postgresql 保存分类器到postrgesql数据库,在scikit-learn中

mhd8tkvw  于 5个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(42)

我知道scikit-learn模型可以通过使用joblib(如这里所述:http://scikit-learn.org/stable/modules/model_persistence.html)持久化在文件中。但是,由于我在postgresql plpythonu函数中有机器学习过程,我宁愿将模型持久化在Postgresql数据库中。
在PostgreSQL数据库中存储scikit-learn模型最方便的方法是什么?

kmb7vmvb

kmb7vmvb1#

如果你使用Django,你可以二进制化sci-kit学习模型
使用pickle,然后将其保存到具有BinaryField成员的表中。

一个简单的例子:

  • views.py(保存)*
from sklearn import svm
import pickle
from ml.models import MlModels
from rest_framework.response import Response

@api_view(['GET'])
def save(request):
  if request.method == 'GET':
    X = [[0.12, 22, 33, 100], [0.19, 19, 99, 33], [0.5, 50, 150, 0]]
    y = [1, 0, 1]
    model = svm()
    model.fit(X=X, y=y)
    data = pickle.dumps(model)
    MlModels.objects.create(model=data)
    return Response(status=status.HTTP_200_OK)

字符串

  • models.py*
from django.db import models

class MlModels(models.Model):
    model       =   models.BinaryField()

  • views.py(using)*
import pickle
from ml.models import MlModels
from rest_framework.response import Response

@api_view(['GET'])
def predict(request):
    if request.method == "GET":
        X = [[0.12, 22, 33, 100]]
        raw_model = MlModel.objects.all()[0]
        model = pickle.loads(raw_model.model)
        print(model.predict(X))
        return Response(status=status.HTTP_200_OK)

fruv7luv

fruv7luv2#

下面是一个Python示例代码,用于将训练好的模型发送到Postgres表中。请注意,您首先需要创建一个表,其中包含一个“bytea”类型的列,以便以二进制格式存储pickle sklearn模型。

from sklearn import svm
    
import psycopg2
import pickle
    
#### # Connect to Postgres
    
connection = psycopg2.connect(user, password, host, port, database)
cur = connection.cursor()
model = svm.OneClassSVM()
model.fit(features)   # features are some training data
data = pickle.dumps(model)    # first we should pickle the model
    
#### # Assuming you have a Postgres table with columns epoch and file

sql = "INSERT INTO sampletable (epoch, file) VALUES(%s)"
cur.execute(sql, (epoch, psycopg2.Binary(data)))
connection.commit()

字符串

相关问题