2012-11-09 10 views
15

विज्ञान-सीखने के लिए त्वरित एसवीएम प्रश्न। आप एक SVM को प्रशिक्षित करते हैं, तो ऐसा लगता है जैसेगैर-इंटीजर क्लास लेबल्स साइकिट-जानें

from sklearn import svm 
s = svm.SVC() 
s.fit(training_data, labels) 

कुछ वहाँ labels के लिए किसी भी तरह से एक गैर-अंकीय प्रकार की एक सूची होने के लिए है है? उदाहरण के लिए, यदि मैं वैक्टर को 'बिल्ली' या 'कुत्ते' के रूप में वर्गीकृत करना चाहता हूं, तो बिना किसी बाहरी लुकअप टेबल को 'बिल्ली' और 'कुत्ते' को 1 और 2 में एन्कोड किया जाता है। जब मैं सिर्फ स्ट्रिंग की एक सूची पारित करने के लिए प्रयास करते हैं, मैं मिलता है ...

ValueError: invalid literal for float(): cat

इसलिए, यह labels में सिर्फ धकेल तार काम करेंगे की तरह नहीं दिखता। कोई विचार?

उत्तर

9

sklearn के हाल के संस्करण से बाहर काम करना चाहिए लेबल के रूप में स्ट्रिंग का उपयोग करने में सक्षम है। उदाहरण के लिए:

from sklearn.svm import SVC 
clf = SVC() 
x = [[1,2,3], [4,5,6]] 
y = ['dog', 'cat'] 
clf.fit(x,y) 

yhat = clf.predict([[1,2,5]]) 
print yhat[0] 
18

सीधे कक्षाओं के रूप में तारों को पास करना मेरे todo पर है, लेकिन यह अभी तक SVMs में समर्थित नहीं है। इस पल के लिए, हमारे पास LabelEncoder है जो आपके लिए रखरखाव कर सकता है।

[संपादित करें] यह अब बॉक्स [/ संपादित करें]