tfidfvectorizer tfidftransformer sklearn ensemble bagging python web-applications scikit-learn

python - tfidftransformer - Aplicación web que utiliza scikit-learn.



sklearn ensemble (4)

Estoy trabajando en una imagen de Docker que envuelve los métodos de predict y predictproba y los expone como una API web: https://github.com/hexacta/docker-sklearn-predict-http-api

Necesitas guardar tu modelo:

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

crear un Dockerfile:

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

y ejecute el contenedor:

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

entonces usted puede hacer solicitudes:

$ 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]

He entrenado localmente un clasificador de sklearn y tengo que crear una aplicación web simple que demuestre su uso. Soy un noob completo en el desarrollo de aplicaciones web y no quiero perder horas en crear una aplicación web utilizando un marco que no admita los módulos que estoy usando.

  1. ¿Cuál sugieres que sería un buen enfoque para esta tarea?
  2. ¿Qué marco de desarrollo de aplicaciones web debo usar (si corresponde)?
  3. ¿Tengo que sumergirme en cosas como Heoku , django , etc. o hay soluciones más simples y rápidas para una demostración científica simple?

Mi idea era tomar el clasificador que entrené, decaparlo y quitarlo en el servidor, luego ejecutar la classify desde el servidor, pero no estoy seguro de por dónde empezar.



Si bien esto no es un clasificador, he implementado un servicio web de aprendizaje automático simple utilizando el marco de la botella y scikit-learn. Dado un conjunto de datos en formato .csv, devuelve visualizaciones en 2D con respecto al análisis de componentes principales y técnicas de análisis discriminante lineal.

Puede encontrar más información y ejemplos de archivos de datos en: http://mindwriting.org/blog/?p=153

Aquí está la implementación: 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 (modificar nombre de host y número de puerto):

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)


Si esto es solo para una demostración, entrene a su clasificador fuera de línea, escoja el modelo y luego use un marco web de Python simple como un flask o una bottle para desentrañar el modelo en el momento de inicio del servidor y llame a la función de predicción en un controlador de solicitud HTTP.

django es un marco completo de características, por lo tanto, es más largo de aprender que el matraz o la botella, pero tiene una gran documentación y una comunidad más grande.

heroku es un servicio para alojar su aplicación en la nube. Es posible alojar aplicaciones de matraz en heroku , aquí hay una plantilla de proyecto simple + instrucciones para hacerlo.

Para las configuraciones de "producción", le aconsejaría que no use pickle, sino que escriba su propia capa de persistencia para el modelo de aprendizaje automático para tener un control total sobre los parámetros de su tienda y ser más robusto con las actualizaciones de la biblioteca que podrían romper el descifrado de los antiguos modelos