запустить Python Sklearn классификатор из Java - PullRequest
0 голосов
/ 21 мая 2018

Я обучил классификатор SVC на python, используя Sklearn и другие библиотеки.Я сделал это через сборку конвейера (sklearn). Я могу вывести обученную модель в файл pickle и создал другой скрипт на python, который загрузит файл pickle и получит данные из командной строки для прогнозирования.Я могу вызвать этот сценарий Python из Java, и он работает нормально.Единственная проблема заключается в том, что это занимает много времени, так как у меня есть библиотеки nltk, numpy, panda, вызываемые в скрипте python, необходимые для предварительной обработки входного аргумента.Я вызываю этот скрипт на Python несколько раз, и это увеличивает время.Как я могу обойти эту проблему.

вот так выглядит мой пиплэйн

pipeline = Pipeline([

# Use FeatureUnion to combine the features from dataset
('union', FeatureUnion(
    transformer_list=[

        # Pipeline for getting POS 
       ('ngrams', Pipeline([
            ('selector', ItemSelector(key='Sentence')),
            ('vect', CountVectorizer(analyzer='word')),
            ('tfidf', TfidfTransformer()),
        ])),


    ],

    # weight components in FeatureUnion
    transformer_weights={
        'ngrams': 0.7,
    },
)),

# Use a SVC classifier on the combined features
('clf', LinearSVC()),
])

1 Ответ

0 голосов
/ 21 мая 2018

Вот пример настройки простого FLASK, обслуживающего REST API для модели scikit.

import sys
import os
import time
import traceback

from flask import Flask, request, jsonify
from sklearn.externals import joblib

app = Flask(__name__)


model_directory = 'model'
model_file_name = '%s/model.pkl' % model_directory

# These will be populated at training time
clf = None


@app.route('/predict', methods=['POST'])
def predict():
    if clf:
        try:
            json_ = request.json
            # query = get the payload from the json and feed it to your model 
            prediction = list(clf.predict(query))

            return jsonify({'prediction': prediction})

        except Exception, e:

            return jsonify({'error': str(e), 'trace': traceback.format_exc()})
    else:
        return 'no model here'



if __name__ == '__main__':
    try:
        port = int(sys.argv[1])
    except Exception, e:
        port = 80

    try:
        clf = joblib.load(model_file_name)
        print 'model loaded'

    app.run(host='0.0.0.0', port=port, debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...