Вопрос или проблема
Я пытаюсь предсказать коды беременности с помощью базовой архитектуры трансформатора. Эти коды беременности выглядят следующим образом: 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 тысячи) имеют пустые целевые значения, что указывает на отсутствие кодов из-за завершения беременности в прошлом году. Если модель предсказывает, что код всегда остается нулевым независимо от входных данных, это может означать несколько вещей:
-
Несбалансированность данных: Поскольку половина значений отсутствует (пустые целевые значения), модель может учиться игнорировать входные данные, просто предсказывая нулевые значения.
-
Недостаточная сложность модели: Если модель не может уловить сложные паттерны в данных, это также может привести к неверным предсказаниям.
-
Проблемы в подготовке данных: Возможные ошибки в разметке данных или их предобработке могут мешать модели учиться.
Предложения по улучшению модели
-
Кодирование целевых переменных: Вам перед использованием CrossEntropyLoss необходимо убедиться, что целевые значения закодированы в требуемый формат. Можно применять one-hot или ordinal кодирование для кодов беременности.
-
Сбалансированность выборки: Попробуйте сбалансировать обучающую выборку, используя техники как объединение, например, сэмплирование без замещения, или существуют методы для работы с несбалансированными данными, такие как использование весов классов.
-
Аугментация данных: Рассмотрите возможность аугментации данных для увеличения количества доступных примеров. Это может быть полезно для создания дополнительных сведений из имеющихся данных.
-
Изучение моделей другим образом: Попробуйте изменить архитектуру вашей модели, включая больше слоев или изменяя гиперпараметры, такие как размер эмбеддинга (
d_model
), количество головков (nhead
) и размер слоев (dim_feedforward
). Экспериментируйте с различными конфигурациями. -
Оптимизация гиперпараметров: Настройка гиперпараметров, таких как
learning_rate
,weight_decay
, иdropout
, имеет решающее значение. Попробуйте использовать алгоритмы для автоматической настройки гиперпараметров, например,Optuna
илиRay Tune
. -
Разделение данных: Убедитесь, что ваше разделение на обучающую и валидационную выборки соответствует отношению данных, чтобы избежать переобучения модели и дать представление о ее способности обобщать.
-
Использование предобученных моделей: Попробуйте использовать предобученные трансформеры, такие как BERT или GPT, адаптировав их к своей задаче.
-
Интерпретация результатов: Внедрите спецификации, такие как LIME или SHAP, для интерпретации предсказаний модели. Это может помочь выявить, какие факторы в ваших данных влияют на предсказания.
Заключение
После внесения этих исправлений и улучшений ваш преобразователь, предназначенный для прогнозирования кодов беременности, должен показать лучшие результаты. При оказании внимания подготовке данных и правильному обучению модели вы сможете устранить проблемы, связанные с предсказанием нулевых значений, и создать более точную и полезную модель. Не забудьте тщательно отслеживать метрики производительности на каждом этапе и вносить соответствующие коррективы в зависимости от получаемых результатов.
Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться к профессиональному сообществу или форумам по интересующим вас вопросам.