2016-07-10 9 views
0

Ich habe ein paar Standard-Klassifikatoren von sklearn gebaut und es gibt einige erwartete Szenarien, in denen ich weiß, dass der Klassifikator schlecht ausgeführt wird und nichts richtig vorhersagen. Das Paket sklearn.svm wird ohne Fehler ausgeführt, löst jedoch die folgende Warnung aus.Python - Ersetzen von Warnungen durch eine einfache Nachricht

~/anaconda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples. 
    'precision', 'predicted', average, warn_for) 

Ich möchte diese Warnung zu unterdrücken und stattdessen mit einer Nachricht an stdout, sagen zum Beispiel, "poor classifier performance" zu ersetzen.

Gibt es eine Möglichkeit, warnings im Allgemeinen zu unterdrücken?

Antwort

2

alle Warnungen unterdrücken ist einfach, mit -Wignore (siehe warning flag docs)

Das warnings Modul kann mit Filtern etwas feinere Abstimmung tun (einfach ignorieren Ihre Warnung Typ).

Capturing nur Ihre Warnung (vorausgesetzt, es in dem Modul nicht einige API ist es zu zwicken) und etwas zu tun, besonderes getan werden, um die warnings.catch_warnings context manager und Code aus "Testing Warnings" angepasst werden:

import warnings 

class MyWarning(Warning): 
    pass 

def something(): 
    warnings.warn("magic warning", MyWarning) 

with warnings.catch_warnings(record=True) as w: 
    # Trigger a warning. 
    something() 
    # Verify some things 
    if ((len(w) == 1) 
      and issubclass(w[0].category, MyWarning) 
      and "magic" in str(w[-1].message)): 
     print('something magical') 
+0

Das funktionierte. Ich beschloss, alle Warnungen zu erfassen, die das Snippet generieren und mit einer generischen Nachricht melden konnte. 'mit warnings.catch_warnings (record = True) als w: self.clfObj.fit (self.train_x, self.train_y) self.preds = list (self.clfObj.predict (self.test_x)) Selbst .predProbabs = self.clfObj.predict_proba (self.test_x) [: 1] self.evalClassifierPerf() wenn len (w)> = 1: drucken ("Poor Classifer detected") ' –