2013-06-04 77 views
6

Tôi làm việc trong bộ phận hỗ trợ khách hàng và tôi đang sử dụng tính năng tìm hiểu để dự đoán thẻ cho vé của chúng tôi, với tập huấn vé (khoảng 40.000 vé trong khóa đào tạo) bộ).Python: sử dụng scikit-learning để dự đoán, đưa ra các dự đoán trống

Tôi đang sử dụng mô hình phân loại dựa trên this one. Nó dự đoán chỉ "()" là các thẻ cho nhiều bộ thử nghiệm của tôi về vé, mặc dù không có vé nào trong bộ huấn luyện không có thẻ.

dữ liệu huấn luyện của tôi cho thẻ là một danh sách liệt kê, như:

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']] 

Trong khi dữ liệu huấn luyện của tôi cho giới thiệu vé chỉ là một danh sách các chuỗi, ví dụ:

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

Đây là liên quan một phần của mã của tôi để tạo mô hình:

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) 

Tuy nhiên, "được dự đoán" sẽ hiển thị danh sách như sau:

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'),()] 

Tôi không hiểu tại sao nó dự đoán trống() khi không có tệp nào trong bộ đào tạo. Không nên dự đoán thẻ gần nhất? Bất cứ ai có thể đề nghị bất kỳ cải tiến cho mô hình tôi đang sử dụng?

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn trước!

+0

[CountVectorizer tài liệu] (http://scikit-learn.org/dev/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html) [ Tài liệu TfidfTransformer] (http://scikit-learn.github.io/scikit-learn.org/0.8/modules/generated/scikits.learn.feature_extraction.text.TfidfTransformer.html) [Tài liệu về OneVsRestClassifier] (http://scikit-learn.org/dev/modules/generated/sklearn.multiclass.OneVsRestClassifier.html) – jegeragh

+0

Bạn có muốn phân loại nhiều lớp hoặc nhiều nhãn? Vé có được phép gắn thẻ nhiều hơn một thẻ không? – mbatchkarov

+0

Có, đa nhãn! – jegeragh

Trả lời

5

Sự cố xảy ra với biến số tags_train của bạn. Theo tài liệu OneVsRestClassifier, các mục tiêu cần phải là "một chuỗi các chuỗi nhãn" và mục tiêu của bạn là danh sách các thành phần một.

Dưới đây là phiên bản đã chỉnh sửa, độc lập và đang hoạt động của mã của bạn. Lưu ý sự thay đổi trong tags_train, đặc biệt là sự kiện tags_train là một bộ phận một phần tử.

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 

Đầu ra là

[('international',), ('international',), ('international', 'open')] 
Các vấn đề liên quan