Сегодня я работал над классификатором, чтобы определить, является ли гриб ядовитым, учитывая его особенности. Данные были в файле .csv (считанном в DataFrame pandas), и ссылка на данные находится в конце.

Я использовал функцию train_test_split из sci-kit learn, чтобы разделить данные на наборы для обучения и тестирования.

Затем я удалил столбец, в котором указывалось, является ли гриб ядовитым или нет, для меток обучения и тестирования, и присвоил его значениям yTrain и yTest.

Затем я применил одноразовое кодирование (с использованием pd.get_dummies ()) к данным, поскольку параметры были категориальными.

После этого я нормализовал входные данные для обучения и тестирования.

По сути, входные данные для обучения и тестирования представляли собой отдельный список параметров с горячим кодированием одним, а выходные данные представляли собой список единиц и нулей, представляющих выходные данные (один означал ядовитые, ноль означал съедобные).

Для этого проекта я использовал Keras и простую сеть прямого распространения. Эта сеть состоит из трех уровней; Простой плотный слой (линейный слой для пользователей PyTorch) с 300 нейронами, плотный слой с 100 нейронами и плотный слой с двумя нейронами, каждый из которых представляет вероятность того, что данные параметры гриба означают, что он ядовит, или съедобный. Адам был оптимизатором, который я использовал, а разреженная-категориальная-кроссентропия была моей функцией потерь.

Я тренировал свою сеть 60 эпох. Примерно через 5 эпох потери были практически нулевыми, а моя точность была равна 1. После тренировки я беспокоился, что моя сеть переоснащена, поэтому я попробовал ее на своих отдельных тестовых данных. Результаты были такими же, как данные обучения и проверки; точность была на 100%, и мои потери были незначительны.

Моя потеря валидации в конце 50 эпох составляет 2.258996e-07, а моя потеря в обучении - 1.998715e-07. Моя потеря при тестировании составила 4,732502e-09. Я действительно сбит с толку, неужели потери должны быть такими низкими? Я не думаю, что я переобучаюсь, и моя потеря валидации лишь немного выше, чем моя потеря в тренировке, поэтому я не думаю, что я тоже недостаточно приспособлен.

Кто-нибудь из вас знает ответ на этот вопрос? Прошу прощения, если я совершил какую-то глупую ошибку.

Ссылка на набор данных: https://www.kaggle.com/uciml/mushroom-classification

1
Abhiraam Eranti 17 Июл 2020 в 23:18

1 ответ

Лучший ответ

Кажется, что набор данных Kaggle разрешим в том смысле, что вы можете создать модель, которая дает правильный ответ в 100% случаев (, если верить этим результатам ). Если вы посмотрите на эти результаты, вы увидите, что автору действительно удалось найти модели, которые дают 100% точность, используя несколько методов, включая деревья решений.

1
Max Niebergall 17 Июл 2020 в 20:38