Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.06.2020
Сообщений: 2
1

Не растет точность нейросети на валидации (keras)

26.06.2020, 13:21. Показов 5820. Ответов 3

Author24 — интернет-сервис помощи студентам
Всем привет, я новичок на этом форуме
Надеюсь на вашу помощь
У меня есть датасет, около 450 фичей и очень много пропущенных значений (более 50%)
Надо решить задачу бинарной классификации

На первом этапе использовал классический ML
Все Nan я поменял на -999, сделал LabelEncoder для категориальных переменных и затем OneHotEncoder
(Количество фичей выросло до 1000)
Лучший результат дал Xgboost (после найстройки гипер параметров) - accuracy порядка 0.8

Но я знаю что можно получить результат и выше, и решил попробовать нейросеть
Мной был оставлен тот же самый препроцессинг (забыл упомянуть что пробовал для заполнения пропущенных значений библиотеку fancyimpute, но результаты были хуже), но использовал MinMaxScaller для нормализации
За последние пару дней перепробовал различные архитектуры , в настоящий момент обучаю

Python
1
2
3
4
5
6
7
8
9
10
11
model = models.Sequential()
model.add(layers.Dense(2048, activation = "relu", input_shape=(n_cols, )))
model.add(layers.Dense(1024, activation = "relu"))
model.add(layers.Dropout(0.3, noise_shape=None, seed=None))
model.add(layers.Dense(512, activation = "relu"))
model.add(layers.Dense(1, activation = "sigmoid"))
 
model.compile(optimizer = "adam",loss = "binary_crossentropy",metrics = ["accuracy"])
results = model.fit(X_train, y_train,epochs= 1000,validation_data=(X_test,y_test),batch_size = 64,
                    class_weight={0.0: 1, 1.0: 1.1}
                   )
Я вижу что модель переобучается, точность на валидации не растет и остается порядка 0.65

Я считаю что препроцессинг сделан в достаточной форме и не стоит заострять на нем внимание,
но подскажите , почему моя сеть показывает результаты хуже чем xgboost/catboost/randomforest даже без настройки гипер параметров?

Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2020, 13:21
Ответы с готовыми решениями:

Ошибка на валидации растет
Добрый день, я пытаюсь пройти курс по Pytorch и на последнем задании ну никак не получается...

Нейросети. Keras. Автоенкодер для передачи данных
Есть у меня поделка где я с помощью математики пытаюсь хранить данные в сжатии с потерями. Хочу...

keras speech recognition обучение нейросети для распознавания голоса
Хочу обучить свою нейросеть, записал аудиозаписи в формате .AU 2-3 секундные, но появляется ошибка...

Нейросети нейросети что это за?
Объясните популярно кто специалист зачем придумали нейросети что это такое вообще? Я узнал о...

3
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
26.06.2020, 15:19 2
Цитата Сообщение от O888CA Посмотреть сообщение
Все Nan я поменял на -999
ИМХО, бред. Как кодирование дырок НаНами - так и кодирование дырок какой-то константой.
Правильный софт должен успешно работать с явными (ничем не заполненными) пропусками.

Цитата Сообщение от O888CA Посмотреть сообщение
сделал LabelEncoder для категориальных переменных и затем OneHotEncoder
Не всегда для категор.переменных OneHotEncoder будет правильным - где-то лучше юзать "схему с накоплением".
Например, для случая, когда следующая ступень фактора обязательно включает в себя все предыдущие (например, в признаке, описывающем полученное образование - там ступени незаконченного среднего, среднего, незаконченного высшего, высшего, аспирантуры или второго высшего) - лучше не one hot, а единицы на всех задействованных бинарных ступенях перекодированного признака.

Цитата Сообщение от O888CA Посмотреть сообщение
За последние пару дней перепробовал различные архитектуры
Не надо пробовать методом тыка - надо строить кривые обучения.
На них видно будет - как в зависимости от размера сетки меняются ошибки обучения и обобщения, и при каких размерах достигаются экстремумы и выходы на асимптоты.
Причём надо знать о буржуинской работе двухлетней давности (хотя я, например, неявно высказывал ту идею лет 16 назад) и пробовать увеличивать размер сетки даже после того, как достигнуто 100%ое запоминание обучающей выборки (ибо зависимость точности обобщения от размера сетки может не являться одноэкстремальной кривой).

Цитата Сообщение от O888CA Посмотреть сообщение
почему моя сеть показывает результаты хуже
Например, ADAM может всё портить. Уже пару десятков лет как известно, что быстрые алгоритмы оптимизации=обучения есть смерть обобщающим способностям сетки.
0
0 / 0 / 0
Регистрация: 26.06.2020
Сообщений: 2
26.06.2020, 16:30  [ТС] 3
Спасибо VTsaregorodtsev

Что касается Nan , так они уже заданы по умолчанию , насколько я знаю RandomForest из SKLEARN не будет с ними работать, а Xgboost будет

По поводу работы с Nan, в университете прошел курс Clinical DataScience и там советовали использовать fancyimpute плюс неоднократно встречал этот метод в статьях из этой области ,но все равно,перепробовав различные варианты кодирования, лучший результат был достигнут как указал выше при замене на -999

с one hot encoder так же соглашусь с вами, но этот датасет был получен в качестве соревнования между однокурсниками, датасет представляет из себя сборник анонимных данных (я не знаю описание признаков, даже наименования) , поэтому я не знаю насколько важно учитывать порядок между значениями категорий. Но конечно же я реализовал модель и без one hot encoder , разница между моделями не статистически важна)

Про кривые обучения так же соглашусь , но модель на старте показывает точность на валидации 0.65 , к концу 100 эпохи точность остается на том же уровне (к концу 1000 эпохи ситуация такая же) . Какую архитектуру бы я не использовал , в каждом варианте я наблюдаю одну и туже точность

p.s. ADAM поменял на СГД , но картина точно такая же)
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
26.06.2020, 21:45 4
Цитата Сообщение от O888CA Посмотреть сообщение
ADAM поменял на СГД , но картина точно такая же)
Ну, Вам дропаут может помогать (если Вы его не выбрасывали при экспериментах с СГД).

Цитата Сообщение от O888CA Посмотреть сообщение
Какую архитектуру бы я не использовал , в каждом варианте я наблюдаю одну и туже точность
Есть категор.признак(и) без дырок?
Если есть - попробуйте раскидать выборку на подвыборки (каждая подвыборка - для уникальной комбинации значений таких селектирующих признаков), и обучить по отдельной сетке на каждой подвыборке.
Т.е. чтобы не единая сетка выстраивала внутри себя аналоги условных операторов - а чтобы некоторые условия проверялись явно, и затем сетки имели локальные области ответственности.
Заодно и полностью ликвидируется возможность неправильной перекодировки таких категор.признаков (ибо на вход нейросеткам их не надо будет совать - ибо каждая комбинация значений этих признаков имеет внутри соотв.подвыборки константное значение).
0
26.06.2020, 21:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2020, 21:45
Помогаю со студенческими работами здесь

Вычислить сумму с точность до e. Точность достигается, когда очередное слагаемое получается <= e
Вычислить сумму с точность до e. Точность достигается, когда очередное слагаемое получается &lt;= e.

Вычислить сумму с точность до e. Точность достигается, когда очередное слагаемое получается <= e
Вычислить сумму с точность до e. Точность достигается, когда очередное слагаемое получается &lt;= e. ...

Оператор Until. Вычислить сумму с точность до e. Точность достигается, когда очередное слагаемое получается <= e
Оператор Until. Вычислить сумму с точность до e. Точность достигается, когда очередное слагаемое...

Keras оптимизация
Здравствуйте! У меня есть C#-код в котором я вызываю интерпретатор Python и загружаю в него...

Keras в ONNX
Добрый вечер. Хочу написать программу для анализа тональности на C# используя ML.NET ml.net...

Keras vs TensorBoard
Доброе время суток. Имеется код нейронной сети на Keras с использованием TensorFlow. Всё хорошо,...

Keras Normalization
Добрый день. Подскажите пожалуйста простыми словами каково назначение функции Normalization в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru