Предсказание кодов беременности с помощью трансформера

Вопрос или проблема

Я пытаюсь предсказать коды беременности с помощью базовой архитектуры трансформатора. Эти коды беременности выглядят следующим образом: prg001, prg002 до prg030. Prg001 будет означать пренатальный скрининг, а prg030 будет означать исход родов для матери.

Исходные данные – это коды за один год (например, 2022), а целевые данные – это коды за следующий год (например, 2023).

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

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

#Гиперпараметры
max_seq_length = 20
max_gen_length = 20
learning_rate = 0.001
weight_decay = 0.01
dropout = 0.1
d_model = 128
nhead = 4
num_layers = 3
dim_feedforward = 512
batch_size = 256
train_num_samples = 800000
valid_num_samples = 200000
num_epochs = 10

Я использую crossentropyloss. Есть ли какие-либо предложения о том, как я могу улучшить это?

Ответ или решение

Прогнозирование кодов беременности с использованием трансформеров

Введение

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

Исходные данные и проблема

Вы упомянули, что ваш набор данных содержит около 42 тысяч строк, из которых примерно половина (22 тысячи) имеют пустые целевые значения, что указывает на отсутствие кодов из-за завершения беременности в прошлом году. Если модель предсказывает, что код всегда остается нулевым независимо от входных данных, это может означать несколько вещей:

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

  2. Недостаточная сложность модели: Если модель не может уловить сложные паттерны в данных, это также может привести к неверным предсказаниям.

  3. Проблемы в подготовке данных: Возможные ошибки в разметке данных или их предобработке могут мешать модели учиться.

Предложения по улучшению модели

  1. Кодирование целевых переменных: Вам перед использованием CrossEntropyLoss необходимо убедиться, что целевые значения закодированы в требуемый формат. Можно применять one-hot или ordinal кодирование для кодов беременности.

  2. Сбалансированность выборки: Попробуйте сбалансировать обучающую выборку, используя техники как объединение, например, сэмплирование без замещения, или существуют методы для работы с несбалансированными данными, такие как использование весов классов.

  3. Аугментация данных: Рассмотрите возможность аугментации данных для увеличения количества доступных примеров. Это может быть полезно для создания дополнительных сведений из имеющихся данных.

  4. Изучение моделей другим образом: Попробуйте изменить архитектуру вашей модели, включая больше слоев или изменяя гиперпараметры, такие как размер эмбеддинга (d_model), количество головков (nhead) и размер слоев (dim_feedforward). Экспериментируйте с различными конфигурациями.

  5. Оптимизация гиперпараметров: Настройка гиперпараметров, таких как learning_rate, weight_decay, и dropout, имеет решающее значение. Попробуйте использовать алгоритмы для автоматической настройки гиперпараметров, например, Optuna или Ray Tune.

  6. Разделение данных: Убедитесь, что ваше разделение на обучающую и валидационную выборки соответствует отношению данных, чтобы избежать переобучения модели и дать представление о ее способности обобщать.

  7. Использование предобученных моделей: Попробуйте использовать предобученные трансформеры, такие как BERT или GPT, адаптировав их к своей задаче.

  8. Интерпретация результатов: Внедрите спецификации, такие как LIME или SHAP, для интерпретации предсказаний модели. Это может помочь выявить, какие факторы в ваших данных влияют на предсказания.

Заключение

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

Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться к профессиональному сообществу или форумам по интересующим вас вопросам.

Оцените материал
Добавить комментарий

Капча загружается...