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.
- co sugerujesz, byłoby dobrym podejściem do tego zadania?
- jakiego frameworka do tworzenia aplikacji webowych powinienem użyć (jeśli istnieje)?
- 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ąć.
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.
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)
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
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]
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