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


Ну, считается, что выбор типа модели все таки делает эксперт, скорее всего пробуя несколько разных. Тривиальное комбинирование фич бесполезно, а нетривиальное — тоже вручную.
хотел уже на боковую
папаху снял и сапоги
но в комментариях проснулись
враги
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 . Предыдущая версия .
Выбор моделей и фич на практике
От: 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: Выбор моделей и фич на практике
От: alex_public  
Дата: 02.05.19 16:55
Оценка:
Здравствуйте, rosencrantz, Вы писали:

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


Если бы это всё можно было делать автоматически, то профессии data scientist (с зарплатами побольше многих программистов) просто не существовало бы. )))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.