Выбор моделей и фич на практике
От: rosencrantz США  
Дата: 26.04.19 04:13
Оценка:
Каким образом на практике подходят к выбору моделей и фич?

Например, стоит задача предсказывать цену квартиры на основании её свойств. Свойств пусть у нас будет штук 20 — количество комнат, площадь, этаж, возраст дома, этажность дома, и т.д.

С умным видом я могу выдвинуть гипотезу, что цена линейно зависит от всех этих параметров. Беру модель "линейная регрессия", запускаю кросс-валидацию, и вижу, что 60% угадывает правильно. Как это довести до 90%? Я могу выдвинуть много гипотез, но совершенно точно не хочу каждую проверять руками:

1. Может быть зависимость там не линейная.
2. Может быть какие-то фичи нужно учитывать не линейно, а квадратично, или брать от них логарифм или ещё что-то.
3. Может быть какие-то фичи нужно отбрасывать, но синтезировать на их основе новые — например отбросить "этаж" и "этажность дома", но добавить бинарное "последний этаж" и "первый этаж".
4. Может быть какие-то фичи нужно вообще отбрасывать.
5. Может быть модели для 1-3-комнатных квартир и для 4+-комнатных будут очень разными.
...

После некоторого знакомства с https://scikit-learn.org обнаружились:

1. Инструменты для выбора фич. Конкретно RFE хочет, чтобы ему сказали сколько фич нужно выбрать. Ну откуда я знаю сколько их нужно выбрать? Нужно выбрать достаточное их количество.
2. Инструменты для подбора параметров модели. GridSearchCV хочет, чтобы ему сказали какие значения для каких параметров рассматривать. Ну и для линейной регрессии это вообще бесполезно, т.к. у неё нечего тюнить.

Ничего похожего на "перебрать все виды регрессий какие бывают" и "сгенерировать из исходных фич разные синтетические" не нашлось. Я действительно настолько не в ту сторону думаю и это всё как-то по-другому делается?
Re: Выбор моделей и фич на практике
От: De-Bill  
Дата: 26.04.19 05:31
Оценка: +1
R>Каким образом на практике подходят к выбору моделей и фич?

По каждому пункту много писать.
Про выбор фич, для начала можешь просто посмотреть, как это делают другие (https://www.kaggle.com/c/sberbank-russian-housing-market/kernels).
Простой пример, как можно использовать xgboost: https://www.kaggle.com/sudalairajkumar/simple-exploration-notebook-sberbank.
Отредактировано 26.04.2019 5:33 De-Bill . Предыдущая версия .
Re: Выбор моделей и фич на практике
От: alex_public  
Дата: 02.05.19 16:55
Оценка:
Здравствуйте, rosencrantz, Вы писали:

R>Ничего похожего на "перебрать все виды регрессий какие бывают" и "сгенерировать из исходных фич разные синтетические" не нашлось. Я действительно настолько не в ту сторону думаю и это всё как-то по-другому делается?


Если бы это всё можно было делать автоматически, то профессии data scientist (с зарплатами побольше многих программистов) просто не существовало бы. )))
Re: Выбор моделей и фич на практике
От: Brice Tribbiani Россия http://vzaguskin.github.io
Дата: 13.05.19 12:31
Оценка: 3 (1)
Здравствуйте, rosencrantz, Вы писали:

R>Каким образом на практике подходят к выбору моделей и фич?


Можно почитать, как разные люди мучают на kaggle многострадальный датасет titanic. На хабре дохрена статей по русски, на самом кагле и в интернетах еще больше по английски. Там и подходы к визуализации данных и работу с признаками типичную можно подсмотреть.

Модели для подобных задач — практически безальтернативно бустинг над решающими деревьями(gradient boosting в sklearn либо xgboost/catboost/lightgbm итп). Параметры моделей — GridSearchCV или что-то типа того. Скорее всего, на одних и тех же признаках все эти модели с правильно подобранными параметрами дадут плюс-минус одинаковые результаты. Так что для начала берешь любую, тюнишь 2-3 основных параметра и занимаешься дальше фичами.

R>Например, стоит задача предсказывать цену квартиры на основании её свойств. Свойств пусть у нас будет штук 20 — количество комнат, площадь, этаж, возраст дома, этажность дома, и т.д.


R>С умным видом я могу выдвинуть гипотезу, что цена линейно зависит от всех этих параметров. Беру модель "линейная регрессия", запускаю кросс-валидацию, и вижу, что 60% угадывает правильно. Как это довести до 90%? Я могу выдвинуть много гипотез, но совершенно точно не хочу каждую проверять руками:


R>1. Может быть зависимость там не линейная.

Запусти любой нелинейный классификатор, и увидишь прирост производительности.

R>2. Может быть какие-то фичи нужно учитывать не линейно, а квадратично, или брать от них логарифм или ещё что-то.

Этим пусть модель занимается, деревья решений или нейросети такое вполне аппроксимируют.

R>3. Может быть какие-то фичи нужно отбрасывать, но синтезировать на их основе новые — например отбросить "этаж" и "этажность дома", но добавить бинарное "последний этаж" и "первый этаж".

Это как раз творческая часть, тут только выдвигать гипотезы и проверять каждую.

R>4. Может быть какие-то фичи нужно вообще отбрасывать.

Некоторые модели выдают значимость каждого признака — на это полезно смотреть. Ну и можно рандомно перемешивать каждый признак в проверочной выборке, и смотреть, насколько ухудшились результаты.


R>5. Может быть модели для 1-3-комнатных квартир и для 4+-комнатных будут очень разными.

R>...

Количество комнат делаешь категориальным признаком.

R>После некоторого знакомства с https://scikit-learn.org обнаружились:


R>1. Инструменты для выбора фич. Конкретно RFE хочет, чтобы ему сказали сколько фич нужно выбрать. Ну откуда я знаю сколько их нужно выбрать? Нужно выбрать достаточное их количество.

R>2. Инструменты для подбора параметров модели. GridSearchCV хочет, чтобы ему сказали какие значения для каких параметров рассматривать. Ну и для линейной регрессии это вообще бесполезно, т.к. у неё нечего тюнить.

R>Ничего похожего на "перебрать все виды регрессий какие бывают" и "сгенерировать из исходных фич разные синтетические" не нашлось. Я действительно настолько не в ту сторону думаю и это всё как-то по-другому делается?


Ну, считается, что выбор типа модели все таки делает эксперт, скорее всего пробуя несколько разных. Тривиальное комбинирование фич бесполезно, а нетривиальное — тоже вручную.
хотел уже на боковую
папаху снял и сапоги
но в комментариях проснулись
враги
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.