2016-02-05 5 views
5

मैं बाइनरी वर्गीकरण मॉडल पर काम कर रहा हूं, क्लासिफायर बेवकूफ बेयस है। मैं लगभग एक संतुलित डाटासेट तथापि है मैं निम्न त्रुटि संदेश मिलता है जब मैं भविष्यवाणी:विज्ञान सीखना त्रुटि संदेश 'प्रेसिजन और एफ-स्कोर बीमार हैं और लेबलों में 0.0 पर सेट किए जा रहे हैं'

UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. 
    'precision', 'predicted', average, warn_for) 

मैं सीवी कश्मीर गुना से 10 परीक्षण सेट के साथ gridsearch उपयोग कर रहा हूँ और भविष्यवाणियों दोनों वर्गों के होते हैं, इसलिए मुझे नहीं पता संदेश समझो। मैं 6 अन्य मॉडलों के लिए उसी डेटासेट, ट्रेन/टेस्ट स्प्लिट, सीवी और यादृच्छिक बीज पर काम कर रहा हूं और वे सही काम करते हैं। डेटा को डेटाफ्रेम में बाहरी रूप से निगमित किया जाता है, यादृच्छिकरण और बीज तय किया जाता है। फिर बेवकूफ बेय वर्गीकरण मॉडल इस कोड स्निपेट से पहले की शुरुआत में फ़ाइल को वर्गीकृत करता है।

X_train, X_test, y_train, y_test, len_train, len_test = \ 
    train_test_split(data['X'], data['y'], data['len'], test_size=0.4) 
pipeline = Pipeline([ 
    ('classifier', MultinomialNB()) 
]) 

cv=StratifiedKFold(len_train, n_folds=10) 

len_train = len_train.reshape(-1,1) 
len_test = len_test.reshape(-1,1) 

params = [ 
    {'classifier__alpha': [0, 0.0001, 0.001, 0.01]} 

] 

grid = GridSearchCV(
    pipeline, 
    param_grid=params, 
    refit=True, 
    n_jobs=-1, 
    scoring='accuracy', 
    cv=cv, 
) 

nb_fit = grid.fit(len_train, y_train) 

preds = nb_fit.predict(len_test) 

print(confusion_matrix(y_test, preds, labels=['1','0'])) 
print(classification_report(y_test, preds)) 

मुझे श्रृंखला के आकार को बदलने के लिए पायथन द्वारा 'मजबूर' किया गया था, शायद यह अपराधी है?

+0

का कौन-सा संस्करण @OAK – Farseer

+0

@Farseer संस्करण 0.17 का उपयोग कर scikit-सीखते हैं। मैंने पढ़ा है कि पिछले संस्करण में एक बग था, यह सुनिश्चित नहीं है कि इसमें कोई भी है या नहीं। – OAK

+1

इस चेतावनी का अर्थ है कि परिशुद्धता, और इसके परिणामस्वरूप एफ 1 स्कोर, कुछ नमूनों के लिए अपरिभाषित हैं जिनके टीपी + एफपी शून्य है जिसके परिणामस्वरूप 0/0 उस नमूने के लिए परिशुद्धता की गणना करते हैं। चूंकि एफ 1 स्कोर परिशुद्धता का एक कार्य है, यह भी अनिर्धारित है और दोनों लाइब्रेरी द्वारा 0.0 पर सेट हैं। – aadel

उत्तर

1

aadel के रूप में टिप्पणी की है, जब कोई डेटा बिंदुओं सकारात्मक रूप में वर्गीकृत किया जाता है, सटीक शून्य से विभाजित करके के रूप में यह रूप में टी.पी./(टी.पी. + एफपी) में परिभाषित किया गया है (यानी, सच सकारात्मक/सच्चे और झूठे सकारात्मक)। लाइब्रेरी फिर 0 पर सटीकता सेट करती है, लेकिन चेतावनी जारी करती है क्योंकि वास्तव में मान अनिर्धारित है। एफ 1 परिशुद्धता पर निर्भर करता है और इसलिए या तो परिभाषित नहीं किया जाता है।

बार जब आप इस के बारे में पता कर रहे हैं, आप के साथ चेतावनी निष्क्रिय करने के लिए चुन सकते हैं:?

import warnings 
import sklearn.exceptions 
warnings.filterwarnings("ignore", category=sklearn.exceptions.UndefinedMetricWarning) 
संबंधित मुद्दे