Каким образом на практике подходят к выбору моделей и фич?
Например, стоит задача предсказывать цену квартиры на основании её свойств. Свойств пусть у нас будет штук 20 — количество комнат, площадь, этаж, возраст дома, этажность дома, и т.д.
С умным видом я могу выдвинуть гипотезу, что цена линейно зависит от всех этих параметров. Беру модель "линейная регрессия", запускаю кросс-валидацию, и вижу, что 60% угадывает правильно. Как это довести до 90%? Я могу выдвинуть много гипотез, но совершенно точно не хочу каждую проверять руками:
1. Может быть зависимость там не линейная.
2. Может быть какие-то фичи нужно учитывать не линейно, а квадратично, или брать от них логарифм или ещё что-то.
3. Может быть какие-то фичи нужно отбрасывать, но синтезировать на их основе новые — например отбросить "этаж" и "этажность дома", но добавить бинарное "последний этаж" и "первый этаж".
4. Может быть какие-то фичи нужно вообще отбрасывать.
5. Может быть модели для 1-3-комнатных квартир и для 4+-комнатных будут очень разными.
...
После некоторого знакомства с
https://scikit-learn.org обнаружились:
1.
Инструменты для выбора фич. Конкретно RFE хочет, чтобы ему сказали сколько фич нужно выбрать. Ну откуда я знаю сколько их нужно выбрать? Нужно выбрать достаточное их количество.
2.
Инструменты для подбора параметров модели. GridSearchCV хочет, чтобы ему сказали какие значения для каких параметров рассматривать. Ну и для линейной регрессии это вообще бесполезно, т.к. у неё нечего тюнить.
Ничего похожего на "перебрать все виды регрессий какие бывают" и "сгенерировать из исходных фич разные синтетические" не нашлось. Я действительно настолько не в ту сторону думаю и это всё как-то по-другому делается?
R>Каким образом на практике подходят к выбору моделей и фич?
По каждому пункту много писать.
Про выбор фич, для начала можешь просто посмотреть, как это делают другие (
https://www.kaggle.com/c/sberbank-russian-housing-market/kernels).
Простой пример, как можно использовать xgboost:
https://www.kaggle.com/sudalairajkumar/simple-exploration-notebook-sberbank.
Здравствуйте, 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>Ничего похожего на "перебрать все виды регрессий какие бывают" и "сгенерировать из исходных фич разные синтетические" не нашлось. Я действительно настолько не в ту сторону думаю и это всё как-то по-другому делается?
Ну, считается, что выбор типа модели все таки делает эксперт, скорее всего пробуя несколько разных. Тривиальное комбинирование фич бесполезно, а нетривиальное — тоже вручную.