Почему результаты классификации Tensorflow tf.learn сильно различаются?

Я использую высокоуровневый API TensorFlow tf.learn обучать и оценивать классификатор DNN для серии классификаций двоичного текста (на самом деле мне нужна классификация по нескольким меткам, но в настоящий момент я проверяю каждую метку отдельно). Мой код очень похож на учебник tf.learn

classifier = tf.contrib.learn.DNNClassifier(
    hidden_units=[10],
    n_classes=2,
    dropout=0.1,
    feature_columns=tf.contrib.learn.infer_real_valued_columns_from_input(training_set.data))
classifier.fit(x=training_set.data, y=training_set.target, steps=100)
val_accuracy_score = classifier.evaluate(x=validation_set.data, y=validation_set.target)["accuracy"]

Оценка точности варьируется примерно от 54% до 90%, при этом 21 комплект документов для проверки (тестирования) всегда одинаков.

Что означает очень значительное отклонение? Я понимаю, что есть некоторые случайные факторы (например, отсев), но, насколько я понимаю, модель должна сходиться к оптимальной.

Я использую слова (леммы), би- и триграммы, оценки настроений и оценки LIWC в качестве функций, поэтому у меня действительно очень пространственное пространство признаков, с только 28 обучающими и 21 проверочными документами. Может ли это вызвать проблемы? Как я могу последовательно улучшать результаты помимо сбора большего количества обучающих данных?

Обновление: чтобы уточнить, я создаю словарь встречающихся слов и n-грамм и отбрасываю те, которые встречаются только 1 раз, поэтому я использую только те слова (n-грамм), которые существуют в корпусе.

1 ответ

Решение

Это не имеет ничего общего с TensorFlow. Этот набор данных смехотворно мал, поэтому вы можете получить любые результаты. У вас есть 28 + 21 баллов в пространстве, которое имеет "бесконечное" количество измерений (около 1000000 английских слов, таким образом, 10^18 триграмм, однако некоторые из них не существуют, и наверняка их нет в ваших 49 документы, но все же у вас есть по крайней мере 1 000 000 измерений). Для такой проблемы, вы должны ожидать огромную дисперсию результатов.

Как я могу последовательно улучшать результаты помимо сбора большего количества обучающих данных?

Вы в значительной степени не можете. Это просто способ небольшой выборки для проведения любого статистического анализа.

Следовательно, лучшее, что вы можете сделать, - это изменить схему оценки вместо разделения данных на 28/21 и выполнить 10-кратную перекрестную проверку, с ~50 баллами, что означает, что вам придется провести 10 экспериментов, каждый с 45 учебными документами и 4 тестовыми, и усредните результат. Это единственное, что вы можете сделать, чтобы уменьшить дисперсию, однако помните, что даже при использовании CV такой маленький набор данных не дает никаких гарантий того, насколько эффективно ваша модель будет вести себя "в дикой природе" (однажды примененная к ранее невидимым данным).

Другие вопросы по тегам