Я хотел бы реализовать алгоритм автоматического выбора модели. Я имею в виду пошаговую регрессию, но все будет хорошо (хотя она должна основываться на линейных регрессиях).
Моя проблема в том, что я не могу найти методологию или реализацию с открытым исходным кодом (я просыпаюсь в Java). Методология, которую я имею в виду, будет выглядеть примерно так:
- рассчитать матрицу корреляции всех факторов
- выбрать факторы, которые имеют низкую корреляцию друг с другом
- удалить факторы, которые имеют низкий т-стат
- добавить другие факторы (все еще основанные на низком коэффициенте корреляции, найденном в 2.).
- Повторите несколько раз, пока какой-либо критерий (например, AIC) не превысит определенный порог, или не сможет, или мы не сможем найти большее значение.
Я понимаю, что для этого есть реализация R (stepAIC), но я нахожу код довольно сложным для понимания. Также мне не удалось найти статьи, описывающие ступенчатую регрессию.
Ответы:
Я думаю, что этот подход ошибочен, но, возможно, будет более полезным, если я объясню почему. Желание узнать лучшую модель с учетом некоторой информации о большом количестве переменных вполне понятно. Более того, это ситуация, в которой люди, кажется, регулярно оказываются. Кроме того, многие учебники (и курсы) по регрессии охватывают методы поэтапного отбора, что подразумевает, что они должны быть законными. К сожалению, однако, это не так, и сопряжение этой ситуации и цели довольно трудно успешно преодолеть. Ниже приведен список проблем с автоматическими пошаговыми процедурами выбора модели (приписан Фрэнку Харреллу и скопирован здесь ):
Вопрос в том, что же такого плохого в этих процедурах / почему возникают эти проблемы? Большинство людей, прошедших базовый курс регрессии, знакомы с концепцией регрессии к среднему значению , поэтому я использую это для объяснения этих проблем. (Хотя поначалу это может показаться не по теме, потерпите меня, обещаю, что это актуально.)
Представьте тренера средней школы в первый день тренировок. Тридцать детей появляются. Эти дети имеют некоторый базовый уровень внутренних способностей, к которым ни тренер, ни кто-либо еще не имеют прямого доступа. В результате тренер делает единственное, что он может сделать, это заставить их всех пробежать 100 метров. Время, по-видимому, является мерой их внутренней способности и принимается как таковое. Тем не менее, они являются вероятностными; некоторая доля того, как хорошо кто-то делает, основана на его реальных способностях, а некоторая доля случайна. Представьте, что истинная ситуация такова:
Результаты первой гонки показаны на следующем рисунке вместе с комментариями тренера для детей.
Обратите внимание, что разделение детей по их расовому времени накладывает отпечаток на их внутренние способности - этот факт имеет решающее значение. Хвалив одних и крича на других (как обычно делают тренеры), он заставляет их снова бежать. Вот результаты второй гонки с реакцией тренера (смоделированной из той же модели выше):
Обратите внимание, что их внутренние способности идентичны, но время отскочило относительно первой расы. С точки зрения тренера, те, на кого он кричал, имели тенденцию к улучшению, а те, кого он хвалил, имели тенденцию к худшему (я адаптировал этот конкретный пример из цитаты Канемана, приведенной на вики-странице), хотя на самом деле регрессия к среднему значению является простой математической следствие того, что тренер отбирает спортсменов для команды на основе частично случайного измерения.
Теперь, какое это имеет отношение к методам автоматического (например, пошагового) выбора модели? Разработка и подтверждение модели, основанной на том же наборе данных, иногда называется дноуглублением данных, Хотя между переменными существует некоторая базовая связь, и ожидается, что более сильные отношения приведут к более сильным оценкам (например, более высокая t-статистика), это случайные переменные, и полученные значения содержат ошибку. Таким образом, когда вы выбираете переменные на основе более высоких (или более низких) реализованных значений, они могут быть такими из-за их истинного значения, ошибки или обоих. Если вы продолжите в том же духе, вы будете удивлены так же, как и тренер после второй гонки. Это верно, независимо от того, выбираете ли вы переменные на основе высокой t-статистики или низкой корреляции. Да, использование AIC лучше, чем использование p-значений, потому что это наказывает модель за сложность, но AIC сама по себе является случайной величиной (если вы проводите исследование несколько раз и подходите к одной и той же модели, AIC будет колебаться, как все остальное). К несчастью,
Я надеюсь, что это полезно.
источник
Ознакомьтесь с пакетом каретки в R. Это поможет вам перекрестно проверить пошаговые регрессионные модели (используйте
method='lmStepAIC'
илиmethod='glmStepAIC'
) и может помочь вам понять, как эти типы моделей имеют плохую прогностическую эффективность. Кроме того, вы можете использоватьfindCorrelation
функцию в карете для определения и исключения коллинеарных переменных, аrfe
функцию в карете для исключения переменных с низкой t-статистикой (использоватьrfeControl=rfeControl(functions=lmFuncs)
).Однако, как уже упоминалось в предыдущих ответах, эти методы выбора переменных могут создать вам проблемы, особенно если вы делаете их итеративно. Удостоверьтесь, что вы оцениваете свои результаты на ПОЛНОСТЬЮ выдержанном тестовом наборе. Даже не смотрите на тестовый набор, пока вы не будете довольны своим алгоритмом!
Наконец, может быть лучше (и проще) использовать прогностическую модель со «встроенным» выбором признаков, таких как регрессия гребня, лассо или эластичная сеть. В частности, попробуйте
method=glmnet
аргумент для каретки и сравните перекрестно проверенную точность этой модели сmethod=lmStepAIC
аргументом. Я предполагаю, что первый даст вам гораздо более высокую точность вне выборки, и вам не нужно беспокоиться о реализации и проверке собственного алгоритма выбора переменных.источник
r
илиpython
? Я хотел бы попробовать это.Я полностью согласен с проблемами, описанными @gung. Тем не менее, на самом деле, выбор модели - это реальная проблема, требующая реального решения. Вот что я бы использовал на практике.
Для примера использования этого метода в реальном мире, я считаю, что он был использован в конкурсе Netflix Prize.
источник
Чтобы ответить на вопрос, есть несколько вариантов: 1) все подмножество AIC / BIC 2) пошаговое значение p 3) пошаговое значение AIC / BIC 4) регуляризация, такая как LASSO (может быть основана на AIC / BIC или CV 5) генетический алгоритм (ГА) 6) другие? 7) использование неавтоматического, теоретического («предметного знания») ориентированного отбора
Следующий вопрос будет, какой метод лучше. В этом документе (doi: 10.1016 / j.amc.2013.05.016) указано, что «все возможные регрессии» дали те же результаты для предложенного ими нового метода, и пошагово хуже. Простая GA между ними. В этой статье (DOI: 10.1080 / 10618600.1998.10474784) сравнивается штрафная регрессия (мост, лассо и т. Д.) С «скачками и ограничениями» (кажется, что это исчерпывающий алгоритм поиска, но быстрее), а также обнаруживается, что «модель моста согласуется с лучшей моделью из выбор подмножества методом скачков ». Эта статья (doi: 10.1186 / 1471-2105-15-88) показывает, что GA лучше, чем LASSO. В этой статье (DOI: 10.1198 / jcgs.2009.06164) предложен метод - по существу подход, основанный на использовании всех подмножеств (основанный на BIC), но разумно сокращающий время вычислений. Они демонстрируют этот метод лучше, чем LASSO. Интересно, что этот документ (DOI: 10.1111 / j.1461-0248.2009.01361.
Таким образом, в целом результаты неоднозначны, но у меня сложилось впечатление, что GA кажется очень хорошим, хотя ступенчатое не может быть слишком плохим и быстрым.
Что касается 7), использование неавтоматического, теоретического («предметного знания») ориентированного отбора. Это отнимает много времени, и это не обязательно лучше, чем автоматический метод. Фактически в литературе о временных рядах хорошо известно, что автоматизированный метод (особенно коммерческое программное обеспечение) превосходит людей-экспертов "с существенным преимуществом" (doi: 10.1016 / S0169-2070 (01) 00119-4, стр. 561, например, выбор различных экспоненциальных сглаживаний и модели ARIMA).
источник
Вот ответ из левого поля - вместо линейной регрессии используйте дерево регрессии (пакет rpart). Это подходит для автоматического выбора модели, потому что, немного поработав, вы можете автоматизировать выбор cp, параметра, который используется для избежания чрезмерной подгонки.
источник
Линейная модель может быть оптимизирована путем реализации генетического алгоритма путем выбора наиболее ценных независимых переменных. Переменные представлены в алгоритме как гены, и лучшая хромосома (набор генов) затем выбирается после операторов кроссовера, мутации и т. Д. Он основан на естественном отборе - тогда лучшее «поколение» может выжить, иными словами, алгоритм оптимизирует функцию оценки, которая зависит от конкретной модели.
источник
У нас есть функция в пакете R base stats, называемая step (), которая делает выбор моделей вперед, назад или пошагово на основе самого низкого AIC. Это также работает для факторных переменных. Разве это не сервер цели здесь?
источник
Я вижу, что мой вопрос вызвал большой интерес и интересные дебаты о правильности подхода автоматического выбора модели. Хотя я согласен с тем, что воспринимать результат автоматического выбора как должное рискованно, его можно использовать в качестве отправной точки. Итак, вот как я реализовал это для моей конкретной проблемы, которая состоит в том, чтобы найти лучшие n факторов, чтобы объяснить данную переменную
Опять же, это очень грубо, могут быть способы улучшить методологию, но это моя отправная точка. Я отправляю этот ответ, надеясь, что он может быть полезен для кого-то еще. Комментарии приветствуются!
источник