FeatureSelector: отбор признаков для машинного обучения на Python |
||||||||||||||||||||||||||||||||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-08-13 18:00 Поиск и отбор признаков в исходных данных является важнейшим этапом обучения. Рассмотрим 5 методов выборки и один удобный инструмент. Ненужные признаки снижают скорость обучения модели, интерпретируемость и, главное, способность к обобщению. FeatureSelector – это специальный класс для отбора информативных признаков, написанный на языке Python, реализующий самые распространенные методы выборки. Его исходный код доступен на GitHub. Инструмент позволяет оценивать параметры по следующим характеристикам:
В статье мы рассмотрим пример использования FeatureSelector для машинного обучения на реальном наборе данных и убедимся, что он позволяет организовать работу быстро и эффективно. На текущий момент инструмент находится в стадии разработки, так что вы можете внести собственный вклад в его развитие. Исходный набор данных Для примера мы будем использовать данные из Kaggle-соревнования по вычислению кредитных рисков. Загрузить полный датасет можно здесь. Его структура представлена на изображении: Это задача контролируемой классификации. Набор данных замечательно подходит для примера. В нем много пропущенных значений, сильно коррелированных (коллинеарных) и нерелевантных признаков, которые мешают эффективному обучению модели. Создание экземпляра При создании экземпляра класса FeatureSelector ему необходимо передать структурированный набор данных с объектами наблюдения в строках и атрибутами в столбцах. Некоторые методы могут работать только с признаками, но методам, основанным на важности, нужны обучающие метки. Так как у нас задача контролируемой классификации, мы будем использовать набор функций и набор меток. Убедитесь, что вы запускаете этот код в той же директории, что и Python
Методы FeatureSelector имеет 5 методов для отбора неподходящих для обучения признаков. Любой идентифицированный объект можно удалить из набора вручную или с помощью функции FeatureSelector также умеет строить графики, ведь визуальный контроль данных – это важный компонент машинного обучения. Пропущенные значения Первый метод осуществляет отбор признаков по очень простому алгоритму: подсчет количества пропущенных значений. Если оно превышает заданный порог, параметр рекомендуется удалить. Этот код идентифицирует признаки, имеющие более 60% пропусков: Python
В этом фрейме показаны доли незаполненных значений для каждого параметра: Python
Чтобы увидеть удаляемые признаки, нужно обратиться к атрибуту Python
Построим график распределения пропущенных значений по всем атрибутам: Python
Коллинеарные признаки Коллинеарными называются признаки, которые сильно коррелируют друг с другом. В машинном обучении это приводит к снижению производительности обобщения данных из-за высокой дисперсии и меньшей интерпретируемости модели. Метод Python
Для визуализации можно построить тепловую карту. Она показывает все параметры, у которых есть хотя бы одна корреляция выше порогового значения: Python
Как и раньше, можно получить доступ к полному списку удаляемых признаков или изучить сильно коррелированные пары параметров в датафрейме: Python
Можно также построить график всех корреляций в наборе, передав вызову Признаки с нулевой важностью Два перечисленных метода могут быть применены к любому структурированному набору данных. Они являются детерминированными, то есть результаты их работы не меняются в разных подходах. Метод, который мы разберем сейчас, недетерминированный и предназначен только для задач контролируемого машинного обучения с обучающими метками. Функция FeatureSelector устанавливает важность признаков с помощью алгоритма градиентного бустинга из библиотеки LightGBM. Показатель усредняется по 10 тренировочным прогонам GBM для уменьшения дисперсии. Кроме того, используется ранняя остановка с проверочным набором, чтобы предотвратить переобучение. Эту опцию можно отключить. Приведенный ниже код производит отбор признаков с нулевой важностью:
Передаваемые параметры:
Построим с помощью Python
Здесь мы видим нормализованные показатели важности На этом графике отражено изменение кумулятивной важности в зависимости от общего количества признаков. Вертикальная линия отмечает пороговое значение, в данном случае 99%. Две важные вещи, которые нужно помнить, производя отбор признаков по важности:
Признаки с низкой важностью Этот метод основан на предыдущем. Функция Python
Основываясь на графике кумулятивной важности, градиентный бустинг считает многие аргументы неактуальными. Опять же, результаты этого метода будут меняться при каждом обучении. Можно просмотреть все удаляемые объекты в датафрейме: Python
Функция Отбор признаков по их важности применим только в случае использования решающего дерева для создания прогнозов. Помимо того, что эти методы являются стохастическими, они представляют собой черный ящик, поскольку мы не знаем, почему модель считает признаки неактуальными. Запустите их несколько раз, чтобы увидеть, как изменяются результаты, и создайте при необходимости несколько наборов данных с разными параметрами для тестирования! Признаки с единственным значением Последний метод просто отбирает все столбцы, которые содержат только одно значение. Такие признаки не могут быть полезны для машинного обучения, так как имеют нулевую дисперсию. Например, деревья решений не могут их разделить. Этот метод не принимает никаких параметров для настройки: Python
Построим гистограмму количества уникальных значений для каждого признака: Python
Помните, что Pandas отбрасывает значения NaN перед вычислением. Удаление признаков После того как отбор признаков осуществлен, их можно удалить двумя способами. Все параметры хранятся в словаре В параметр
Метод возвращает фрейм данных с удаленными параметрами. Можно также удалить one-hot признаки, созданные во время обучения: Python
Исходный набор данных всегда хранится в виде резервной копии в атрибуте Отбор признаков всеми методами Вместо отдельного использования разных методов, можно запустить их одновременно с помощью
Обратите внимание, что общее количество признаков изменилось, так как мы повторно запустили модель. Затем можно вызвать функцию Выводы Класс FeatureSelector реализует несколько распространенных операций удаления признаков перед обучением модели. Их можно запускать по отдельности и одновременно. Кроме идентификации параметров, инструмент способен строить графики и гистограммы для визуализации. Отбор признаков по пропущенным значениям, коллинеарности и малой дисперсии детерминирован, а методы основанные на важности, напротив, при каждом запуске выдают другие результаты. Выбор функции для отбора, как и вся сфера машинного обучения, является эмпирическим и требует тестирования нескольких комбинация для поиска оптимального варианта. FeatureSelector позволяет делать это быстро и эффективно. Помните, что вы можете внести свой вклад в развитие проекта FeatureSelector. Перевод статьи William Koehrsen: A Feature Selection Tool for Machine Learning in Python Другие интересные статьи по Data Science Источник: proglib.io Комментарии: |
|||||||||||||||||||||||||||||||||||