2009-11-23 10 views
10

मुझे पता है कि कुछ पुस्तकालय हैं जो पाइथन कोड से समर्थन वेक्टर मशीनों का उपयोग करने की अनुमति देते हैं, लेकिन मैं विशेष रूप से पुस्तकालयों के लिए देख रहा हूं जो इसे ऑनलाइन पढ़ाने की अनुमति देता है (यह है, इसे सभी डेटा एक बार में देने के बिना)।कोई भी अजगर समर्थन वेक्टर मशीन लाइब्रेरी जो ऑनलाइन सीखने की अनुमति देता है?

क्या कोई है?

उत्तर

8

LibSVM में एक पायथन रैपर शामिल है जो SWIG के माध्यम से काम करता है। उनके वितरण से

उदाहरण svm-test.py:

#!/usr/bin/env python 

from svm import * 

# a three-class problem 
labels = [0, 1, 1, 2] 
samples = [[0, 0], [0, 1], [1, 0], [1, 1]] 
problem = svm_problem(labels, samples); 
size = len(samples) 

kernels = [LINEAR, POLY, RBF] 
kname = ['linear','polynomial','rbf'] 

param = svm_parameter(C = 10,nr_weight = 2,weight_label = [1,0],weight = [10,1]) 
for k in kernels: 
    param.kernel_type = k; 
    model = svm_model(problem,param) 
    errors = 0 
    for i in range(size): 
     prediction = model.predict(samples[i]) 
     probability = model.predict_probability 
     if (labels[i] != prediction): 
      errors = errors + 1 
    print "##########################################" 
    print " kernel %s: error rate = %d/%d" % (kname[param.kernel_type], errors, size) 
    print "##########################################" 

param = svm_parameter(kernel_type = RBF, C=10) 
model = svm_model(problem, param) 
print "##########################################" 
print " Decision values of predicting %s" % (samples[0]) 
print "##########################################" 

print "Numer of Classes:", model.get_nr_class() 
d = model.predict_values(samples[0]) 
for i in model.get_labels(): 
    for j in model.get_labels(): 
     if j>i: 
      print "{%d, %d} = %9.5f" % (i, j, d[i,j]) 

param = svm_parameter(kernel_type = RBF, C=10, probability = 1) 
model = svm_model(problem, param) 
pred_label, pred_probability = model.predict_probability(samples[1]) 
print "##########################################" 
print " Probability estimate of predicting %s" % (samples[1]) 
print "##########################################" 
print "predicted class: %d" % (pred_label) 
for i in model.get_labels(): 
    print "prob(label=%d) = %f" % (i, pred_probability[i]) 

print "##########################################" 
print " Precomputed kernels" 
print "##########################################" 
samples = [[1, 0, 0, 0, 0], [2, 0, 1, 0, 1], [3, 0, 0, 1, 1], [4, 0, 1, 1, 2]] 
problem = svm_problem(labels, samples); 
param = svm_parameter(kernel_type=PRECOMPUTED,C = 10,nr_weight = 2,weight_label = [1,0],weight = [10,1]) 
model = svm_model(problem, param) 
pred_label = model.predict(samples[0]) 
+0

चूंकि लिबएसवीएम वेबसाइट या दस्तावेज़ स्पष्ट रूप से इसका उल्लेख नहीं करते हैं, इसलिए मैंने चिह-जेन लिन को ईमेल किया, जो बढ़ते/ऑनलाइन सीखने के समर्थन के बारे में पूछ रहा था। उनकी प्रतिक्रिया थी, "दुर्भाग्य से नहीं। कारण यह है कि हमें अभी तक वृद्धिशील/घटती शिक्षा के लिए मानक सेटिंग नहीं दिखाई दे रही है।" – Cerin

+0

उदाहरण कोड शो क्या है ऑनलाइन सीखना नहीं है। – mrgloom

4

एक की नहीं सुना है। लेकिन क्या आपको वास्तव में ऑनलाइन सीखने की ज़रूरत है? मैं कुछ समय के लिए एसवीएम का उपयोग कर रहा हूं और कभी भी ऐसी समस्या का सामना नहीं किया जहां मुझे ऑनलाइन शिक्षा का उपयोग करना पड़ा। आम तौर पर मैंने प्रशिक्षण उदाहरणों (शायद 100 या 1000) के परिवर्तनों की संख्या पर एक सीमा तय की है और फिर बस बैच-सभी को रोकें।

यदि आपकी समस्या एक पैमाने पर है, जहां आपको बिल्कुल ऑनलाइन सीखना है, तो आप vowpal wabbit पर एक नज़र डालना चाहेंगे।

नीचे reedited, टिप्पणी के बाद:

Olivier GriselLaSVM के चारों ओर एक ctypes आवरण का उपयोग करने का सुझाव दिया। चूंकि मुझे पहले LaSVM के बारे में पता नहीं था और यह बहुत अच्छा लग रहा है, इसलिए मैं अपनी समस्याओं पर कोशिश करने के लिए उत्सुक हूं :)।

यदि आप केवल पायथन-वीएम (एम्बेडेड डिवाइस, रोबोट) का उपयोग करने के लिए सीमित हैं, तो मैं एक एसवीएम के करीब प्रदर्शन करने वाले मतदान/औसत प्रतिधारण का उपयोग करने का सुझाव दूंगा, लेकिन इसे लागू करना आसान है और "ऑनलाइन" डिफ़ॉल्ट रूप से।

बस देखा कि Elefant में कुछ ऑनलाइन-एसवीएम कोड है।

+0

मुझे मजबूती सीखने के लिए इसकी आवश्यकता है। –

+0

क्या कोई भी लिनक्स पर वीडब्ल्यू बनाने में सक्षम है? मैंने इंस्टॉल को बढ़ावा दिया है, लेकिन वीडब्ल्यू एक बहुत पुराना संस्करण मानता है। – Cerin

+0

लासवीएम यहां विजेता प्रतीत होता है। इसमें एक छोटा कोडबेस है। स्पष्ट रूप से ऑनलाइन सीखने का समर्थन करता है। आसानी से संकलित (उबंटू 9.10 पर परीक्षण)। इसमें प्रत्यक्ष पायथन एपीआई नहीं है, लेकिन यह दो सरल कमांडलाइन उपयोगिताओं को बनाता है जिन्हें आसानी से मॉडल (la_svm) बनाने के लिए पायथन से बुलाया जा सकता है और मॉडल (la_test) का उपयोग कर सकते हैं। – Cerin

0

आप इसे ऑनलाइन प्रशिक्षित क्यों करना चाहते हैं? प्रशिक्षण उदाहरणों को जोड़ने के लिए आमतौर पर एसवीएम से जुड़े वर्गिक प्रोग्रामिंग समस्या को फिर से हल करने की आवश्यकता होती है।

इसे संभालने का एक तरीका बैच मोड में एक एसवीएम को प्रशिक्षित करना है, और जब नया डेटा उपलब्ध है, तो जांचें कि क्या ये डेटा बिंदु हाइपरप्लेन के [-1, +1] मार्जिन में हैं या नहीं। यदि ऐसा है, तो सभी पुराने समर्थन वैक्टरों का उपयोग करके एसवीएम को रोकें, और मार्जिन में आने वाले नए प्रशिक्षण डेटा।

बेशक, परिणाम आपके सभी डेटा पर बैच प्रशिक्षण की तुलना में थोड़ा अलग हो सकते हैं, क्योंकि कुछ बिंदुओं को त्याग दिया जा सकता है जो बाद में समर्थन वैक्टर होंगे। तो फिर, आप एसवीएम के ऑनलाइन प्रशिक्षण क्यों करना चाहते हैं?

+1

मैंने पहले ही आपके पहले प्रश्न का उत्तर दिया है। मैं इसे एक सुदृढीकरण सीखने की परियोजना के लिए उपयोग कर रहा हूं, इस प्रकार इसे ऑनलाइन सीखना होगा। –

+0

सावधान रहें कि बैच मोड बेतरतीब ढंग से लागू होने पर यादृच्छिक से सबसे खराब हो सकता है। – Davide

+0

यह पद्धति स्केल नहीं करेगी। प्रत्येक नए रिकॉर्ड के लिए पूरे डेटा सेट पर पुनः प्रशिक्षित होने पर एक्सपोनेंशियल प्रदर्शन सबसे अच्छा होगा। कार्यान्वयन के आधार पर ऑनलाइन शिक्षण निरंतर या रैखिक प्रदर्शन होगा। – Cerin

1

हालांकि वहां कोई पाइथन बाइंडिंग नहीं है, http://leon.bottou.org/projects/sgd पर वर्णित एल्गोरिदम को ऑनलाइन फैशन में प्रशिक्षित किया गया है और इसे आसानी से उपयोग किया जाता है। numpy।

+1

स्टोकास्टिक ग्रेडिएंट वंश (एसजीडी) भी विज्ञान-शिक्षा (http://scikit-learn.sourceforge.net/) में लागू किया गया है। हालांकि एसजीडी-आधारित क्लासिफायरों की ऑन-लाइन फिटिंग अभी तक खुला नहीं है, यह अगले 6 महीनों में होगी। –

1

Pegasos एक ऑनलाइन एसवीएम एल्गोरिदम है जो काफी अच्छी तरह से प्रदर्शन करता है। यह एक विशिष्ट पायथन बाध्यकारी के बिना भी लागू करने के लिए काफी आसान है। लेखक की वेबसाइट पर C implementation है जो अनुकूलनीय या एम्बेड करने योग्य भी है।

संबंधित मुद्दे

 संबंधित मुद्दे