регрессия со случайным лесом на несбалансированных данных

Я использую пакет r случайного леса для прогнозирования расстояний между парами белков на основе их аминокислотной последовательности, основной интерес представляют белки, которые находятся близко (имеют меньшее расстояние). мой тренировочный набор данных состоит из 10 тысяч пар белков и фактического расстояния между ними. однако очень немногие пары белков (менее 0,2%) имеют малые расстояния между собой, и проблема в том, что обученный случайный лес стал очень точным в предсказании расстояния между белками с большими расстояниями и очень плохим для белков с малыми расстояниями между ними. их. Я попытался уменьшить выборку белков с большими расстояниями в моих тренировочных данных, но результаты все еще не очень хорошие. Меня больше интересуют близкие белки (те пары, расстояние между которыми небольшое). есть очень четкий сигнал переобучения, так как моя точность обучения составляет 78, а моя точность тестирования составляет 51%, любые предложения высоко ценятся.


person DOSMarter    schedule 21.03.2013    source источник
comment
У вас есть случай несбалансированных данных. 0,2% незначительны, поэтому модель (случайный лес) их игнорирует. Если ваш тестовый набор содержит больше данных с небольшими расстояниями, вы должны переместить их в обучающий набор и использовать перекрестную проверку для проверки точности. Вероятно, этого будет недостаточно, поэтому следующим шагом будет повторная выборка выборок с небольшого расстояния (поиск «несбалансированная повторная выборка данных»)   -  person topchef    schedule 21.03.2013


Ответы (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 — это то, где вы хотите провести свое время, хотя это также самое сложное и требует больше всего размышлений.

person screechOwl    schedule 21.03.2013

Я думаю, что вам может помочь, учитывая вашу проблему, - это метод избыточной выборки синтетического меньшинства для регрессии (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.

person Nick Kunz    schedule 19.11.2019