Это хорошая практика разработки функций?

10

У меня есть практический вопрос о проектировании функций ... скажем, я хочу прогнозировать цены на жилье с помощью логистической регрессии и использовал множество функций, включая почтовый индекс. Затем, проверив важность функции, я понял, что zip - довольно хорошая функция, поэтому я решил добавить еще несколько функций на основе zip - например, я иду в бюро переписей и получаю средний доход, население, количество школ и число больниц каждого почтового индекса. Благодаря этим четырем новым функциям я считаю, что производительность модели теперь лучше. Поэтому я добавляю еще больше функций, связанных с почтовыми индексами ... И этот цикл продолжается и продолжается. В конце концов, в модели будут доминировать эти функции, связанные с почтовым индексом, верно?

Мои вопросы:

  1. Имеет ли смысл делать это в первую очередь?
  2. Если да, как я узнаю, когда подходящее время, чтобы остановить этот цикл?
  3. Если нет, то почему нет?
user3768495
источник

Ответы:

6

Если вы можете продолжать добавлять новые данные (на основе основной концепции, такой как область, то есть почтовый индекс), и производительность вашей модели улучшается, то это, конечно, допустимо ... при условии, что вы заботитесь только о конечном результате.

Существуют метрики, которые помогут вам в этом, например, критерий информации Акаике (AIC) или сопоставимый байесовский критерий информации (BIC). Это, по сути, помогает выбрать модель на основе ее производительности, будучи наказанным за все дополнительные параметры, которые вводятся и которые должны быть оценены. AIC выглядит так:

AяСзнак равно2К-2пер(L^)

КL^К

Эти критерии могут помочь вам определить, когда следует остановиться, поскольку вы можете попробовать модели с большим и большим количеством параметров и просто выбрать модель с наилучшим значением AIC или BIC.

Если у вас все еще есть другие функции в модели, которые не связаны с ZIP, они могут быть перегружены - это зависит от используемой модели. Тем не менее, они также могут объяснить вещи о наборе данных, которые просто не могут содержаться в информации ZIP, такой как площадь дома (при условии, что это относительно независимо от почтового индекса).

В этом случае вы можете сравнить их с чем-то вроде анализа основных компонентов, где набор функций объясняет одно измерение отклонения в наборе данных, в то время как другие функции объясняют другое измерение. Поэтому независимо от того, сколько у вас функций, связанных с ZIP, вы никогда не сможете объяснить важность площади пола.

n1k31t4
источник
7

1) Да, это имеет смысл. Попытка создания функций вручную поможет учащимся (то есть моделям) получить больше информации из необработанных данных, потому что необработанные данные не всегда имеют форму, удобную для обучения, но вы всегда можете создать из них характерные особенности. Функция, которую вы добавляете, основана на одной функции. Это распространено. Тем не менее, ваш ученик, логистическая регрессия, чувствителен к мультиколлинеарности. Вы должны быть осторожны с тем, какую функцию и сколько функций добавить. В противном случае ваша модель может переодеться.

2) Поскольку вы используете логистическую регрессию, вы всегда можете использовать AIC или выполнить тест статистической значимости, такой как критерий хи-квадрат (проверка достоверности соответствия), перед добавлением новой структуры, чтобы решить, действительно ли распределение ответа отличается с и без этой структуры. Это особенно полезно, когда ваших данных недостаточно. Другой способ - добавить штрафной термин к вашей модели. Например, логистическая регрессия Лассо.

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

Fansly
источник
@ User3768495 оценивает производительность модели вне выборки, используя, например, перекрестную проверку? Если это так, мультиколлинеарность не должна быть проблемой, и он не должен беспокоиться о переоснащении, поскольку он получит указание о переобучении из-за снижения производительности валидации.
Ринспи
У @rinspy есть много лиц. Использование набора проверки может помочь избежать переобучения, но не может решить проблему. Например, несоответствующее распределение между данными обучения (которое разбито на набор обучения и набор проверки) и реальным населением. Даже модель показывает хорошие результаты в обучающих данных, она не может быть обобщена в реальной ситуации. Ссылка из моего ответа также говорила о переоснащении.
Fansly
Да, но избегание мультиколлинеарности не поможет с «переоснащением», возникающим в результате ковариатных сдвигов. Я просто говорю, что мультиколлинеарность, вероятно, не проблема, если он заинтересован в построении прогнозирующей (а не описательной) модели.
Ринспи
Моя концепция о переоснащении заключается в том, что модель не может быть обобщена до нового набора данных, а не с данными обучения. Пожалуйста, посмотрите это
Fansly
4

Обычно, чем богаче черты, тем лучше.

Однако следует помнить одну вещь: регрессии, как правило, плохо работают с сильно коррелированными данными (мультиколлинеарность). Когда вы расширяете свои возможности таким образом, вы должны иметь это в виду.

На эту тему есть много информации (и потенциальных путей смягчения), только регрессия Google и мультиколлинеарность.

Короче говоря,

  1. Да. Вероятнее всего.
  2. У @ n1k31t4 есть несколько хороших предложений. Не стесняйтесь генерировать, какие функции, по вашему мнению, улучшат вашу модель, затем вы можете использовать такие методы, как PCA и другие методы выбора функций, чтобы ограничить себя тем, что важно.
  3. Другая вещь, которую нужно учитывать, - насколько она практична в отношении усилий и результатов.
Лирик
источник
0

Особенности информации вашей модели. Чем больше информации, тем лучше она сможет выполнять и прогнозировать. Чем меньше его, тем сложнее прогнозировать ценности. Так что короткий насер да. Всегда стоит иметь как можно больше возможностей. Это всегда есть предел, так как информационная перегрузка может также сжечь ваш процессор, поэтому будьте осторожны с тем, сколько функций разрабатывается. Кроме того, ненужные функции только увеличивают выгорание, поэтому всегда рекомендуется очищать определенные функции. На этом вся фаза предварительной обработки данных.

Первый ответ имеет несколько хороших деталей об этом. Что касается остановки цикла, то есть несколько мер и факторов, о которых вам необходимо знать, чтобы проверить, где ваша модель перестала работать лучше, и это такие меры, как RMSE. Простым примером будет использование xgboostрегрессии на ваших данных и указание количества циклов. Запустите модель, и вы получите СКО для каждого цикла. Он уменьшится до предела, после которого вы сможете сделать вывод, что модель вышла на плато после определенного цикла. Так работает настройка и оптимизация модели.

Shiv_90
источник