Aplikacja internetowa wykorzystująca scikit-dowiedz się

Szkoliłem lokalnie klasyfikatora sklearn i muszę stworzyć prostą aplikację internetową, która zademonstruje jej wykorzystanie. Jestem kompletnym noobem w tworzeniu aplikacji internetowych i nie chcę marnować godzin na tworzenie aplikacji internetowych przy użyciu frameworka, który nie obsługuje modułów używam.

  1. co sugerujesz, byłoby dobrym podejściem do tego zadania?
  2. jakiego frameworka do tworzenia aplikacji webowych powinienem użyć (jeśli istnieje)?
  3. Czy muszę nurkować w takie rzeczy jak Heoku, django itd. a może istnieją prostsze i szybsze rozwiązania dla prostego demo naukowego?

Moim pomysłem było wziąć klasyfikator, którego trenowałem, marynować go i odpiąć na serwerze, a następnie uruchomić {[2] } z serwera, ale nie jestem pewien, od czego zacząć.

Author: zenpoy, 2012-07-22

4 answers

Jeśli jest to tylko dla wersji demonstracyjnej, wytrenuj klasyfikator w trybie offline, wytrenuj model, a następnie użyj prostego frameworka internetowego Pythona, takiego jak flask lub bottle, aby rozpakować model podczas uruchamiania serwera i wywołać funkcję predict w obsłudze żądań HTTP.

Django jest kompletnym frameworkiem, dlatego jest dłuższy do nauczenia się niż flask czy bottle, ale ma świetną dokumentację i większą społeczność.

Heroku jest usługą do hostowania aplikacji w chmurze. Możliwe jest hostowanie aplikacji flask na heroku , Oto prosty projekt szablonu + instrukcje aby to zrobić.

W przypadku konfiguracji "produkcyjnych" radzę nie używać pickle ' a, ale napisać własną warstwę trwałości dla modelu uczenia maszynowego, aby mieć pełną kontrolę nad parametrami sklepu i być bardziej odpornym na aktualizacje bibliotek, które mogą złamać rozpakowywanie starych modeli.

 9
Author: ogrisel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-22 13:59:46

Chociaż nie jest to klasyfikator, zaimplementowałem prostą usługę uczenia maszynowego za pomocą frameworka bottle i scikit-learn. / Align = "left" / format csv zwraca wizualizacje 2D w odniesieniu do analizy głównych komponentów i technik analizy liniowej.

Więcej informacji i przykładowe pliki danych można znaleźć na stronie: http://mindwriting.org/blog/?p=153

Oto implementacja: upload.html:

<form
 action="/plot" method="post"
 enctype="multipart/form-data"
>
Select a file: <input type="file" name="upload" />
<input type="submit" value="PCA & LDA" />
</form>

Pca_lda_viz.py (Zmień Nazwa hosta i numer portu):

import matplotlib
matplotlib.use('Agg')

import matplotlib.pyplot as plt
import numpy as np
from cStringIO import StringIO

from bottle import route, run, request, static_file
import csv
from matplotlib.font_manager import FontProperties
import colorsys

from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.lda import LDA

html = '''
<html>
    <body>
        <img src="data:image/png;base64,{}" />
    </body>
</html>
'''

 @route('/')
 def root():
     return static_file('upload.html', root='.')

 @route('/plot', method='POST')
    def plot():

       # Get the data
       upload = request.files.get('upload')
       mydata = list(csv.reader(upload.file, delimiter=','))

       x = [row[0:-1] for row in mydata[1:len(mydata)]]

       classes =  [row[len(row)-1] for row in mydata[1:len(mydata)]]
       labels = list(set(classes))
       labels.sort()

       classIndices = np.array([labels.index(myclass) for myclass in classes])

       X = np.array(x).astype('float')
       y = classIndices
       target_names = labels

       #Apply dimensionality reduction
       pca = PCA(n_components=2)
       X_r = pca.fit(X).transform(X)

       lda = LDA(n_components=2)
       X_r2 = lda.fit(X, y).transform(X)

        #Create 2D visualizations
       fig = plt.figure()
       ax=fig.add_subplot(1, 2, 1)
       bx=fig.add_subplot(1, 2, 2)

       fontP = FontProperties()
       fontP.set_size('small')

       colors = np.random.rand(len(labels),3)

       for  c,i, target_name in zip(colors,range(len(labels)), target_names):
           ax.scatter(X_r[y == i, 0], X_r[y == i, 1], c=c, 
                      label=target_name,cmap=plt.cm.coolwarm)
           ax.legend(loc='upper center', bbox_to_anchor=(1.05, -0.05),
                     fancybox=True,shadow=True, ncol=len(labels),prop=fontP)
           ax.set_title('PCA')
           ax.tick_params(axis='both', which='major', labelsize=6)

       for c,i, target_name in zip(colors,range(len(labels)), target_names):
           bx.scatter(X_r2[y == i, 0], X_r2[y == i, 1], c=c, 
                      label=target_name,cmap=plt.cm.coolwarm)
           bx.set_title('LDA');
           bx.tick_params(axis='both', which='major', labelsize=6)

       # Encode image to png in base64
       io = StringIO()
       fig.savefig(io, format='png')
       data = io.getvalue().encode('base64')

       return html.format(data)

run(host='mindwriting.org', port=8079, debug=True)
 2
Author: user3707687,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-04 15:24:24

Aby wdrożyć model scikit-learn w Azure ML, możesz skorzystać z poniższego samouczka:]}

Tworzenie i wdrażanie predykcyjnych aplikacji internetowych przy użyciu Pythona i Azure ML

Lub kombinacja yHat + Heroku może też zrobić sztuczkę

 2
Author: leo9r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 06:20:16

Pracuję nad obrazem dokera, który zawija metody predict i predictproba i wyświetla je jako web api: https://github.com/hexacta/docker-sklearn-predict-http-api

Musisz zapisać swój model:

from sklearn.externals import joblib
joblib.dump(clf, 'iris-svc.pkl')

Utwórz plik Dockerfile:

FROM hexacta/sklearn-predict-http-api:latest
COPY iris-svc.pkl /usr/src/app/model.pkl

I uruchom kontener:

$ docker build -t iris-svc .
$ docker run -d -p 4000:8080 iris-svc

Następnie można składać wnioski:

$ curl -H "Content-Type: application/json" -X POST -d '{"sepal length (cm)":4.4}' http://localhost:4000/predictproba
  [{"0":0.8284069169,"1":0.1077571623,"2":0.0638359208}]
$ curl -H "Content-Type: application/json" -X POST -d '[{"sepal length (cm)":4.4}, {"sepal length (cm)":15}]' http://localhost:4000/predict
  [0, 2]
 1
Author: pomber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-03 20:49:19