Важность выбора функции

В машинном обучении одним из основных компонентов предварительной обработки данных является выбор признаков. Каждый столбец в наборе данных, который передается в нашу модель машинного обучения, называется функцией, также известной как переменная или атрибут. Если мы используем слишком много функций для обучения модели, модель может учиться на неважных шаблонах. Процесс выбора наиболее важных функций для разработки прогностической модели называется выбором функций. Методы выбора признаков сокращают количество входных переменных или признаков, удаляя избыточные или нерелевантные признаки и сокращая набор признаков до тех, которые наиболее важны для нашего подхода к моделированию. Выбор функции дает следующие преимущества:

1) Упрощает моделирование за счет повышения объяснимости результатов

2) Сокращает время обучения (и время подсчета очков) и необходимый объем пространства

3) Увеличивает точность модели

Мы можем разделить методы выбора признаков для контролируемых подходов (помеченных наборов данных) на три основные группы:

1) Методы фильтрации. В этих методах для удаления нерелевантных атрибутов используется статистическая метрика. Получение информации, оценка Фишера и F-значение ANOVA — вот некоторые примеры методов фильтрации для выбора признаков.

2) Методы-оболочки: в этих методах подмножество переменных сравнивается с другими комбинациями признаков, что приводит к обнаружению возможного взаимодействия между признаками. Некоторыми из популярных методов-оболочек являются методы обратного исключения, прямого выбора и рекурсивного исключения признаков.

3) Встроенные методы. В этих методах алгоритмы машинного обучения используются для расчета важности каждой функции. Лассо-регрессия и древовидные модели, такие как Random Forest Importance, являются одними из самых популярных встроенных методов выбора признаков.

В этой статье мы сосредоточимся на встроенных методах и реализуем выбор функций на основе модели XGBoost.

Практический опыт работы с RapidMiner

Мы используем последнюю версию RapidMiner Studio (V10.0) для реализации примера.

ЭДА

Мы используем набор данных Цена дома, который содержит 81 независимую переменную, описывающую каждый аспект 1460 жилых домов в Эймсе, штат Айова. Этот набор данных в основном используется для прогнозирования окончательной цены каждого дома на основе описанных характеристик. SalePrice — это наша зависимая переменная (DV).

Выполнив быстрый объяснительный анализ данных (EDA) по набору данных, мы можем увидеть, что некоторые функции более важны для «SalePrice». Например, на следующем графике мы видим почти линейную зависимость между «OverallQual» и «SalePrice». Кроме того, мы раскрасили этот график на основе «YearBuilt», который показывает, что более новые дома имеют более высокое общее качество и более высокие цены продажи.

Как было сказано выше, этот набор данных имеет 81 признак, которые усложняют процесс EDA и интерпретацию итоговой модели. В качестве первого шага предварительной обработки мы используем инструмент Turbo Prep в RapidMiner, чтобы удалить функции с некачественными данными. Этот инструмент автоматически определяет объекты с высоким номинальным или целочисленным идентификатором, отсутствующими значениями, стабильностью и количеством категорий и удаляет их.

После выполнения Turbo Prep нам удалось сократить количество переменных с 81 до 58.

Затем мы удалили высококоррелированные функции с помощью оператора Удалить коррелированные атрибуты.

Поскольку многие функции являются категориальными, мы используем оператор Nominal to Numerical для изменения типов переменных. Учитывая, что у нас было много категориальных переменных в исходном наборе данных, количество признаков увеличивается до 229.

Выбор функций

Следующий шаг – выбор характеристик. Мы планируем разработать модель XGBoost на Python для расчета важности входных переменных.

Важность дает значение, которое показывает, насколько ценна каждая переменная в обученной модели. Чем больше переменная используется для принятия ключевых решений с деревьями решений, тем выше ее важность. Эта важность рассчитывается для каждой входной переменной, а затем переменные ранжируются и сравниваются друг с другом. Важность рассчитывается для одного дерева решений на величину, на которую каждая точка разделения улучшает показатель производительности, взвешенный по количеству наблюдений в узле. Затем важности признаков усредняются по всем деревьям решений в модели [3].

Для разработки этого мы используем Execute Python в RapidMiner Studio для завершения нашего рабочего процесса. Оператор Execute Python является частью расширения Python Scripting, которое доступно в Marketplace и доступно через меню "Расширения". Расширение Python Scripting позволяет выполнять сценарии Python в процессе RapidMiner.

На следующем рисунке показаны шаги, которые мы предпринимаем для создания этого процесса в RapidMiner.

Как использовать оператор Execute Python в RapidMiner

В операторе Execute Python мы определяем «SalePrice» как DV, а остальные переменные будут независимыми переменными (IV). Затем мы разрабатываем модель XGBoost (XGBRegressor) и вызываем feature_importances_ для извлечения важности каждой функции. Затем мы составляем список самых важных функций и передаем их на выход этого оператора.

Мы подключаем выходной порт к результирующему порту и запускаем процесс. Откроется таблица важных функций. В следующей таблице показаны 20 наиболее важных функций:

Определив наиболее важные функции, мы можем использовать их для разработки модели для прогнозирования «SalePrice», которая является ценой каждого дома.

Заключительные слова

Выбор признаков всегда является важным шагом для упрощения моделирования или EDA наборов данных с большим количеством столбцов. Хотя в RapidMiner доступно множество мощных методов выбора функций, мы всегда можем использовать оператор Execute Python для разработки любого другого метода выбора.

Использованная литература:

[1] https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/overview

[2] Справка RapidMiner Studio (внутри программного обеспечения)

[3] https://machinelearningmastery.com/feature-importance-and-feature-selection-with-xgboost-in-python/