2016-02-05 12 views
5

Bir ikili sınıflandırma modelinde çalışıyorum, sınıflandırıcı naif bayes. Ben CV k-kat 10. Test seti ile gridsearch kullanıyorum ve tahminler her iki sınıfları içerenScikit hata mesajını öğrenin Hata Mesajı 'Hassas ve F-skoru hatalı tanımlanmış ve etiketlerde 0,0 olarak ayarlanmış'

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) 

, bu yüzden yok: Ben aşağıdaki hata iletisini tahmin olsun zaman ancak neredeyse dengeli bir veri kümesi var mesajı anla. Aynı veri seti üzerinde çalışıyorum, 6 model için tren/test split, cv ve random seed çalışıyorum ve bunlar mükemmel çalışıyor. Veriler harici olarak bir veri çerçevesine yutulur, rastgeleleştirilir ve tohum sabitlenir. Daha sonra naif bayes sınıflandırma modeli, dosyayı bu kod snippet'inin başlangıcında sınıflar.

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)) 

Python tarafından serinin şeklini değiştirmek için 'zorlandı', belki de bu suçlu mu? Bu TP/(TP + FP) için tanımlandığı gibi bir veri noktası pozitif olarak sınıflandırılır zaman aadel olarak

+0

hangi sürümü @OAK – Farseer

+0

@Farseer sürümünü 0.17 kullanarak size scikit-öğrenirler. Bir önceki versiyonda bir hata olduğunu okudum, bunun da içinde olup olmadığından emin değilim. – OAK

+1

Bu uyarı, tp + fp değeri sıfır olan ve bu örnek için kesinlik hesaplanırken 0/0 olan bazı örnekler için kesinliğin ve sonuç olarak f1 puanının tanımsız olduğu anlamına gelir. F1 skoru hassas bir fonksiyon olduğu için, aynı zamanda tanımsızdır ve her ikisi de kütüphane tarafından 0.0'a ayarlanır. – aadel

cevap

1

yorum yaptığını, hassas sıfıra bölen (yani, gerçek pozitif/doğru ve yanlış pozitif). Kütüphane daha sonra 0'a hassas ayarlar, ancak aslında değer tanımsız olarak bir uyarı verir. F1 hassaslığa bağlıdır ve dolayısıyla da tanımlanmamıştır. Bunun farkında olduktan sonra

, sizinle uyarıyı devre dışı bırakmayı seçebilir:?

import warnings 
import sklearn.exceptions 
warnings.filterwarnings("ignore", category=sklearn.exceptions.UndefinedMetricWarning)