2012-07-22 14 views
14

मैंने स्थानीय रूप से sklearn क्लासिफायरफायर को प्रशिक्षित किया है और मुझे एक सरल वेब एप्लिकेशन बनाना है जो इसका उपयोग प्रदर्शित करता है। मैं वेब ऐप विकास पर एक पूर्ण नोब हूं और मैं एक ऐसे फ्रेमवर्क का उपयोग करके वेब ऐप बनाने के घंटों को बर्बाद नहीं करना चाहता हूं जो मॉड्यूल का उपयोग नहीं कर रहा है।वेब अनुप्रयोग जो कि विज्ञान-सीखने का उपयोग करता है

  1. आप इस कार्य के लिए एक अच्छा दृष्टिकोण क्या सुझाव देंगे?
  2. मैं किस वेब ऐप विकास ढांचे का उपयोग करना चाहिए (यदि कोई हो)?
  3. क्या मुझे Heoku, django आदि जैसी चीजों में डुबोना है या क्या एक साधारण वैज्ञानिक डेमो के लिए और अधिक सरल और त्वरित समाधान हैं?

मेरे विचार, वर्गीकारक मैं प्रशिक्षित ले यह और सर्वर पर अन-अचार अचार, तो सर्वर से classify चलाने के लिए जाना था, लेकिन मुझे यकीन है कि जहां शुरू करने के लिए नहीं कर रहा हूँ।

उत्तर

8

यदि यह सिर्फ एक डेमो के लिए है, अपने वर्गीकारक ऑफ़लाइन ट्रेन, मॉडल अचार और उसके बाद सर्वर स्टार्टअप समय में मॉडल unpickle को flask या bottle के रूप में एक सरल अजगर वेब रूपरेखा इस तरह का उपयोग करें और एक HTTP अनुरोध में समारोह की भविष्यवाणी फोन हैंडलर।

डीजेंगो एक फीचर पूर्ण ढांचा है इसलिए फ्लास्क या बोतल की तुलना में सीखना लंबा है, लेकिन इसमें एक महान दस्तावेज़ीकरण और एक बड़ा समुदाय है।

heroku क्लाउड में आपके एप्लिकेशन को होस्ट करने की सेवा है। host flask applications on heroku पर यह संभव है, ऐसा करने के लिए यहां एक simple template project + instructions है।

"उत्पादन" सेटअप के लिए मैं आपको सलाह देता हूं कि आप अचार का उपयोग न करें, लेकिन मशीन सीखने के मॉडल के लिए अपनी खुद की दृढ़ता परत लिखने के लिए ताकि आपके स्टोर के पैरामीटर पर पूर्ण नियंत्रण हो और पुस्तकालय उन्नयन के लिए अधिक मजबूत हो जो टूट सकता है पुराने मॉडल की unpickling।

+0

thx उत्तर के लिए मैं फ्लास्क + heroku एक शॉट – zenpoy

+0

फ्लास्क और उसकेोकू के साथ झुकाव के बाद मुझे sklearn के साथ काम करने में एक समस्या है, क्योंकि यह आवश्यक है कि मुझे ब्लाउस की आवश्यकता होती है जिसके बारे में मुझे कोई संकेत नहीं है कि कैसे इसे Heroku पर स्थापित करें ... कोई विचार? – zenpoy

+0

वास्तव में मैंने इसके बारे में नहीं सोचा था। जाहिर है कि अन्य लोग इसे इस तरह से काम करने में कामयाब रहे: http://stackoverflow.com/questions/9819968/running-scipy-on-heroku – ogrisel

2

हालांकि यह वर्गीकृत नहीं है, मैंने बोतल ढांचे और विज्ञान-सीखने का उपयोग करके एक सरल मशीन लर्निंग वेब सेवा लागू की है। .csv प्रारूप में एक डेटासेट को देखते हुए यह मुख्य घटक विश्लेषण और रैखिक भेदभाव विश्लेषण तकनीकों के संबंध में 2 डी विज़ुअलाइज़ेशन देता है।

अधिक जानकारी और उदाहरण डेटा फ़ाइलों में पाया जा सकता: http://mindwriting.org/blog/?p=153

यहाँ दिया गया है: 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 (होस्ट नाम और पोर्ट संख्या को संशोधित):

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

आप अपने को तैनात करने के लिए नीचे दिए गए ट्यूटोरियल का पालन कर सकते Azure एमएल में मॉडल scikit-जानने के लिए और वेब सेवा स्वचालित रूप से उत्पन्न मिलती है:

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

या yHat + Heroku का संयोजन भी चाल

+1

ध्यान दें कि [लिंक-केवल उत्तर] (http://meta.stackoverflow.com/tags/link-only-answers/info) निराश हैं, SO उत्तर समाधान के लिए खोज का अंत बिंदु होना चाहिए (बनाम। फिर भी संदर्भों का एक और स्टॉपओवर, जो समय के साथ पुराना हो जाता है)। लिंक को संदर्भ के रूप में रखते हुए, यहां स्टैंड-अलोन सारांश जोड़ना पर विचार करें – kleopatra

1

मैं एक डोकर छवि कि लपेटता predict और predictproba तरीकों और ई पर काम कर रहा हूँ कर सकते हैं उन्हें एक वेब एपीआई के रूप में Xpose: https://github.com/hexacta/docker-sklearn-predict-http-api

आप अपने मॉडल को बचाने की जरूरत:

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

एक Dockerfile बनाएँ:

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

और कंटेनर चलाएँ:

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

तो आप अनुरोध कर सकते हैं:

$ 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] 
संबंधित मुद्दे