2012-07-22 45 views
14

Tôi đã đào tạo cục bộ bộ phân loại sklearn và tôi phải tạo một ứng dụng web đơn giản thể hiện việc sử dụng nó. Tôi là một noob hoàn chỉnh về phát triển ứng dụng web và tôi không muốn lãng phí thời gian để tạo một ứng dụng web bằng cách sử dụng một khung công tác không hỗ trợ các mô-đun tôi đang sử dụng.Ứng dụng web sử dụng scikit-learn

  1. Bạn gợi ý điều gì sẽ là cách tiếp cận tốt cho tác vụ này?
  2. Tôi nên sử dụng khung phát triển ứng dụng web nào (nếu có)?
  3. Tôi có phải đi sâu vào những thứ như Heoku, django v.v. hoặc có giải pháp đơn giản và nhanh hơn cho bản trình diễn khoa học đơn giản không?

Suy nghĩ của tôi là lấy trình phân loại mà tôi đã đào tạo, nhặt và bỏ nó trên máy chủ, sau đó chạy classify từ máy chủ, nhưng tôi không chắc bắt đầu từ đâu.

Trả lời

8

Nếu đây chỉ là bản trình diễn, hãy đào tạo trình phân loại của bạn ngoại tuyến, hãy chọn mô hình và sau đó sử dụng khung web python đơn giản như flask hoặc bottle để bỏ chọn mô hình lúc khởi động máy chủ và gọi hàm dự đoán trong yêu cầu HTTP xử lý.

django là khung tính năng hoàn chỉnh do đó còn dài để tìm hiểu hơn bình hoặc chai nhưng có tài liệu tuyệt vời và cộng đồng lớn hơn.

heroku là dịch vụ lưu trữ ứng dụng của bạn trên đám mây. Có thể host flask applications on heroku, đây là số simple template project + instructions để làm như vậy.

Để thiết lập "sản xuất", tôi khuyên bạn không nên sử dụng dưa mà phải viết lớp kiên trì của riêng bạn cho mô hình học máy để có toàn quyền kiểm soát các thông số của cửa hàng và mạnh mẽ hơn để nâng cấp thư viện. sự tháo bỏ các mô hình cũ.

+0

thx cho câu trả lời Tôi sẽ cho bình + heroku một shot – zenpoy

+0

Sau khi nghịch với bình và heroku tôi gặp vấn đề khi làm việc với sklearn, bởi vì nó đòi hỏi scipy mà requiers blas mà tôi không có một đầu mối về cách cài đặt nó trên heroku ... bất kỳ suy nghĩ? – zenpoy

+0

Thực ra tôi không nghĩ về điều đó. Rõ ràng những người khác đã xoay xở để làm cho nó hoạt động theo cách này: http://stackoverflow.com/questions/9819968/running-scipy-on-heroku – ogrisel

2

Mặc dù đây không phải là trình phân loại, tôi đã triển khai một dịch vụ web học máy đơn giản bằng cách sử dụng khung chai và tìm hiểu. Cho một tập dữ liệu theo định dạng .csv nó trả về các hình ảnh 2D đối với các phân tích thành phần chính và các kỹ thuật phân tích phân biệt tuyến tính.

biết thêm thông tin và ví dụ tập tin dữ liệu có thể được tìm thấy tại địa chỉ: http://mindwriting.org/blog/?p=153

Đây là việc thực hiệ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 (sửa đổi tên máy chủ và số cổng):

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

Bạn có thể làm theo các hướng dẫn dưới đây để triển khai của bạn scikit-học mô hình trong Azure ML và nhận được dịch vụ web tự động tạo ra:

Build and Deploy a Predictive Web App Using Python and Azure ML

hoặc sự kết hợp của yHat + Heroku cũng có thể làm các trick

+1

Lưu ý rằng [câu trả lời chỉ có liên kết] (http://meta.stackoverflow.com/tags/link-only-answers/info) không được khuyến khích, các câu trả lời SO phải là điểm cuối của việc tìm kiếm giải pháp (so với nhưng một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu – kleopatra

1

tôi đang làm việc trên một hình ảnh Docker rằng kết thúc tốt đẹp predictpredictproba phương pháp và e xpose chúng như là một api web: https://github.com/hexacta/docker-sklearn-predict-http-api

Bạn cần phải lưu mô hình của bạn:

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

tạo Dockerfile:

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

và chạy container:

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

sau đó bạn có thể yêu cầu:

$ 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] 
Các vấn đề liên quan