2013-06-04 4 views
6

मैं ग्राहक सहायता में काम करता हूं, और मैं टिकटों का एक प्रशिक्षण सेट (प्रशिक्षण में लगभग 40,000 टिकट) दिए गए, हमारे टिकटों के लिए टैग की भविष्यवाणी करने के लिए विज्ञान-सीख का उपयोग कर रहा हूं सेट)।पायथन: भविष्यवाणी करने के लिए विज्ञान-सीखने का उपयोग करके, खाली भविष्यवाणियां

मैं this one पर आधारित वर्गीकरण मॉडल का उपयोग कर रहा हूं। यह सिर्फ टिकटों के मेरे परीक्षण सेट के लिए टैग के रूप में "()" की भविष्यवाणी कर रहा है, भले ही प्रशिक्षण सेट में कोई भी टिकट टैग के बिना नहीं है।

टैग के लिए मेरे प्रशिक्षण डेटा की तरह सूचियों की एक सूची है:

tags_train = [['international_solved'], ['from_build_guidelines my_new_idea eligibility'], ['dropbox other submitted_faq submitted_help'], ['my_new_idea_solved'], ['decline macro_backer_paypal macro_prob_errored_pledge_check_credit_card_us loading_problems'], ['dropbox macro__turnaround_time other plq__turnaround_time submitted_help'], ['dropbox macro_creator__logo_style_guide outreach press submitted_help']] 

जबकि टिकट विवरण के लिए मेरी प्रशिक्षण डेटा, बस स्ट्रिंग की एक सूची है जैसे:

descs_train = ['description of ticket one', 'description of ticket two', etc] 

यहाँ प्रासंगिक है मॉडल बनाने के लिए मेरे कोड का हिस्सा:

import numpy as np 
import scipy 
from sklearn.pipeline import Pipeline 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.multiclass import OneVsRestClassifier 
from sklearn.svm import LinearSVC 

# We have lists called tags_train, descs_train, tags_test, descs_test with the test and train data 

X_train = np.array(descs_train) 
y_train = tags_train 
X_test = np.array(descs_test) 

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer()), 
    ('tfidf', TfidfTransformer()), 
    ('clf', OneVsRestClassifier(LinearSVC(class_weight='auto')))]) 

classifier.fit(X_train, y_train) 
predicted = classifier.predict(X_test) 

हालांकि, "भविष्यवाणी" एक सूची देता है जो इस तरह दिखता है:

predicted = [(), ('account_solved',),(), ('images_videos_solved',), ('my_new_idea_solved',),(),(),(),(),(), ('images_videos_solved', 'account_solved', 'macro_launched__edit_update other tips'), ('from_guidelines my_new_idea', 'from_guidelines my_new_idea macro__eligibility'),()] 

मुझे समझ में नहीं आता कि यह क्यों खाली है() जब प्रशिक्षण सेट में कोई नहीं है। क्या यह निकटतम टैग की भविष्यवाणी नहीं करनी चाहिए? क्या कोई भी मॉडल का उपयोग कर रहे किसी भी सुधार की सिफारिश कर सकता है?

आपकी मदद के लिए अग्रिम धन्यवाद!

+0

[CountVectorizer प्रलेखन] (http://scikit-learn.org/dev/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html) है [ TfidfTransformer दस्तावेज़ीकरण] (http://scikit-learn.github.io/scikit-learn.org/0.8/modules/generated/scikits.learn.feature_extraction.text.TfidfTransformer.html) [OneVsRestClassifier दस्तावेज़] (http://scikit-learn.org/dev/modules/generated/sklearn.multiclass.OneVsRestClassifier.html) – jegeragh

+0

क्या आप बहु-वर्ग या बहु-लेबल वर्गीकरण चाहते हैं? क्या टिकट को एक से अधिक टैग के साथ टैग करने की अनुमति है? – mbatchkarov

+0

हां, बहु लेबल! – jegeragh

उत्तर

5

समस्या आपके tags_train चर के साथ है। OneVsRestClassifier दस्तावेज़ीकरण के अनुसार, लक्ष्यों को "लेबल के अनुक्रमों का अनुक्रम" होना चाहिए, और आपके लक्ष्य एक तत्व की सूचियां हैं।

नीचे आपके कोड का एक संपादित, स्वयं निहित और कार्य संस्करण है। tags_train में परिवर्तन पर ध्यान दें, विशेष रूप से tags_train एक तत्व तत्व टुपल है।

import numpy as np 
import scipy 
from sklearn.pipeline import Pipeline 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.multiclass import OneVsRestClassifier 
from sklearn.svm import LinearSVC 


# We have lists called tags_train, descs_train, tags_test, descs_test with the test and train data 
tags_train = [('label',), ('international' ,'solved'), ('international','open')] 
descs_train = ['description of ticket one', 'some other ticket two', 'label'] 

X_train = np.array(descs_train) 
y_train = tags_train 
X_test = np.array(descs_train) 

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer()), 
    ('tfidf', TfidfTransformer()), 
    ('clf', OneVsRestClassifier(LinearSVC(class_weight='auto')))]) 

classifier = classifier.fit(X_train, y_train) 
predicted = classifier.predict(X_test) 

print predicted 

उत्पादन

[('international',), ('international',), ('international', 'open')] 
संबंधित मुद्दे

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