【问题标题】:Save classifier to postrgesql database, in scikit-learn在 scikit-learn 中将分类器保存到 postgresql 数据库
【发布时间】:2021-03-17 18:12:07
【问题描述】:

我知道 scikit-learn 模型可以通过使用 joblib 保存在文件中(如此处所述:http://scikit-learn.org/stable/modules/model_persistence.html)。 但是,由于我在 postgresql plpythonu 函数中有机器学习过程,我宁愿将模型保存在 Postgresql 数据库中。

在 Postgresql 数据库中存储 scikit-learn 模型最方便的推荐方式是什么?

【问题讨论】:

标签: postgresql scikit-learn persistence


【解决方案1】:

如果你使用 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(使用)

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)

【讨论】:

    【解决方案2】:

    这里是 python 中的示例代码,用于将训练好的模型发送到 Postgres 表。请注意,您首先需要创建一个包含“bytea”类型列的表,以二进制格式存储腌制的 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, (epochpsycopg2.Binary(data)) )
    connection.commit()  
    

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 2018-07-01
      • 2015-05-09
      • 2014-06-28
      • 1970-01-01
      • 2015-03-02
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多