2016-12-28 17 views
0

我試圖創建一個符合https://www.tensorflow.org/tutorials/wide/教程的模型,但我似乎以某種方式破壞了我的數據,因爲我非常懷疑一個非常天真的模型的97.9%的準確性。如何調試非常準確的TensorFlow模型?

我用下面的代碼,這似乎是合理的,我分開訓練和評估數據:

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

然而,這是給我這似乎太高號:

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 

模型創建/評估發生在這裏:

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) 

我懷疑這裏有一個簡單的錯誤,但我沒有看到它。

+1

什麼是您的數據是什麼樣子?如果一個班級佔據了97.9%的數據,那麼只要始終預測大多數標籤,就可以達到97.9%的準確率。 – etarion

+0

啊,是的,這幾乎可以肯定發生了什麼事情。數據嚴重偏向一個方向,所以我需要對此進行調整。謝謝! –

回答

0

這取決於你的模型和你的數據。您可以通過過度擬合在訓練集上獲得100%的準確性,並且people已經在MNIST的測試集上獲得了1%的錯誤率。

0

您正在處理一個不平衡的數據集,其中一個類中的示例數量顯着高於另一個類別中的示例數量。對於這個不平衡的問題,通過預測所有測試數據的大多數類別的標籤,隨機預測器可以輕鬆實現高精度。

要正確驗證此模型的性能,您可以查看auc。這裏你實現的auc只有0.44,非常差。驗證不平衡數據集問題性能的更好指標是auc_precision_recall。如果打印出來,我懷疑這個問題的auc_precision_recall會相當小(例如0.02)。

您可以通過這篇文章讀給有更好的理解AUC的: https://classeval.wordpress.com/simulation-analysis/roc-and-precision-recall-with-imbalanced-datasets/