2016-12-28 2 views
0

Ich versuche, ein Modell in Übereinstimmung mit dem Tutorial bei https://www.tensorflow.org/tutorials/wide/ zu erstellen, aber ich scheine meine Daten in gewisser Weise zu korrumpieren, da ich sehr skeptisch gegenüber der 97,9% Genauigkeit auf einem sehr naiven Modell bin.Wie Debuggen unheimlich genaue TensorFlow-Modell?

ich Trennung Ausbildung und Auswertung von Daten mit dem folgenden Code, der mir sinnvoll erscheint:

total_results = len(results) 
    # Withhold some results from training for evaluation. 
    withhold_index = total_results * 9/10 
    training_df = get_data_frame_from_results(results[:withhold_index]) 
    eval_df = get_data_frame_from_results(results[withhold_index:]) 

Doch diese mir Nummern geben, die viel zu hoch erscheinen:

accuracy: 0.979 
accuracy/baseline_label_mean: 0.021 
accuracy/threshold_0.500000_mean: 0.979 
auc: 0.443042 
global_step: 200 
labels/actual_label_mean: 0.021 
labels/prediction_mean: 0.0288264 
loss: 0.288538 
precision/positive_threshold_0.500000_mean: 0.0 
recall/positive_threshold_0.500000_mean: 0.0 

die Modellerstellung/Auswertung geschieht hier:

def train_input_fn(): 
    return input_fn(training_df) 

    def eval_input_fn(): 
    return input_fn(eval_df) 

    m = tf.contrib.learn.LinearClassifier(
     feature_columns=[...], 
     model_dir=model_dir) 
    m.fit(input_fn=train_input_fn, steps=200) 
    eval_results = m.evaluate(input_fn=eval_input_fn, steps=1) 

ich vermute, es ist ein einfacher Fehler hier aber ich sehe es nicht.

+1

Wie sieht Ihre Daten aussehen? Wenn eine Klasse 97,9% der Daten einnimmt, erhalten Sie eine Genauigkeit von 97,9%, indem Sie immer nur die Mehrheitsmarkierung vorhersagen. – etarion

+0

Ah, ja, das ist fast sicher, was passiert. Die Daten sind stark in eine Richtung verzerrt, also muss ich mich darauf einstellen. Vielen Dank! –

Antwort

0

Dies hängt von Ihrem Modell und Ihren Daten ab. Sie können eine 100% ige Genauigkeit des Trainingssatzes durch Überarbeiten erhalten, und people haben < 1% Fehlerrate auf dem Testsatz von MNIST bekommen.

0

Sie arbeiten mit einem unsymmetrischen Dataset, in dem die Anzahl der Beispiele in einer Klasse deutlich höher ist als die der anderen. Für dieses unausgewogene Problem kann ein zufälliger Prädiktor leicht eine hohe Genauigkeit erreichen, indem er das Label der Majoritätsklasse für alle Testdaten vorhersagt.

Um die Leistung dieses Modells korrekt zu überprüfen, können Sie den AUC betrachten. Hier erreichen Sie nur 0,44, was sehr schlecht ist. Eine bessere Metrik zur Validierung der Leistung eines Problems mit unsymmetrischem Dataset ist auc_precision_recall. Ich vermute, dass auc_precision_recall für dieses Problem ziemlich klein ist (z.B. 0,02), wenn Sie es ausdrucken.

Sie können durch diesen Beitrag lesen, ein besseres Verständnis von auc haben: https://classeval.wordpress.com/simulation-analysis/roc-and-precision-recall-with-imbalanced-datasets/