Я использую пакет r случайного леса для прогнозирования расстояний между парами белков на основе их аминокислотной последовательности, основной интерес представляют белки, которые находятся близко (имеют меньшее расстояние). мой тренировочный набор данных состоит из 10 тысяч пар белков и фактического расстояния между ними. однако очень немногие пары белков (менее 0,2%) имеют малые расстояния между собой, и проблема в том, что обученный случайный лес стал очень точным в предсказании расстояния между белками с большими расстояниями и очень плохим для белков с малыми расстояниями между ними. их. Я попытался уменьшить выборку белков с большими расстояниями в моих тренировочных данных, но результаты все еще не очень хорошие. Меня больше интересуют близкие белки (те пары, расстояние между которыми небольшое). есть очень четкий сигнал переобучения, так как моя точность обучения составляет 78, а моя точность тестирования составляет 51%, любые предложения высоко ценятся.
регрессия со случайным лесом на несбалансированных данных
Ответы (2)
Пара предложений:
1) Посмотрите на GBM из пакета gbm
.
2) Создайте больше функций, чтобы помочь RF понять, что влияет на расстояние.
3) Нанесите ошибки на график по сравнению с отдельными переменными, чтобы найти то, что движет взаимосвязями. (ggplot2 отлично подходит для этого, особенно с использованием параметров colour
и size
.)
4) Вы также можете присвоить 1 или 0 переменным y в зависимости от расстояния (т. е. если расстояние ‹ x, установить на 1 / если расстояние >= x, установить на 0). Когда у вас есть два класса, вы можете использовать аргумент strata в RF для создания равномерно сбалансированных выборок и посмотреть, какие переменные определяют разницу в расстоянии, используя функции RF (value()) и varImpPlot().
5) Попробуйте использовать журнал переменных, связанных с расстоянием. RF обычно довольно хорошо компенсирует нелинейность, но попытка не помешает.
Я предполагаю, что № 2 — это то, где вы хотите провести свое время, хотя это также самое сложное и требует больше всего размышлений.
Я думаю, что вам может помочь, учитывая вашу проблему, - это метод избыточной выборки синтетического меньшинства для регрессии (SMOTER). Есть некоторые исследования на эту тему. Однако он остается менее изученным, чем его классификационный аналог (SMOTE), как вы, вероятно, сталкивались.
Я мог бы предложить статью, цитируемую ниже, в зависимости от того, насколько вы заинтересованы в ее понимании с исследовательской точки зрения. Мне очень понравилось введение гауссовского шума при создании синтетических наблюдений.
Если вас больше интересует практическое решение, у первого автора есть реализация R, доступная на ее странице Github. https://github.com/paobranco/SMOGN-LIDTA17
Если вам больше нравится Python, я недавно распространил полностью Pythonic реализацию алгоритма SMOGN, которая теперь доступна и в настоящее время проходит модульное тестирование. https://github.com/nickkunz/smogn
Бранко П., Торго Л., Рибейро Р. (2017). «SMOGN: подход к предварительной обработке для несбалансированной регрессии». Proceedings of Machine Learning Research, 74:36-50. press/v74/branco17a/branco17a.pdf.