2016-12-28 7 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 получили < 1% коэффициент ошибок на тестовом наборе MNIST.

0

Вы работаете с несбалансированным набором данных, в котором количество примеров в одном классе значительно выше, чем у другого. Для этой неуравновешенной проблемы случайный предиктор может легко достичь высокой точности, предсказывая метку мажоритарного класса для всех тестовых данных.

Для правильной проверки производительности этой модели вы можете посмотреть auc. Здесь auc вы достигли всего 0,44, что очень плохо. Лучшей метрикой для проверки производительности проблемы с несбалансированным набором данных является auc_precision_recall. Я подозреваю, что auc_precision_recall для этой проблемы будет довольно небольшим (например, 0,02), если вы распечатаете его.

Вы можете прочитать этот пост, чтобы иметь лучшее понимание: ПФК https://classeval.wordpress.com/simulation-analysis/roc-and-precision-recall-with-imbalanced-datasets/

Смежные вопросы