Код Python для автоматической идентификации соответствующих атрибутов функций.

Здравствуйте и добро пожаловать в еще один учебник по машинному обучению в моей серии случайных наборов данных. В этой статье я расскажу об использовании рекурсивного исключения функций, чтобы выбрать только важные функции (или столбцы) для обучения нашей модели.

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

Благодарности:

Давиде Ангита, Алессандро Гио, Лука Онето, Ксавьер Парра и Хорхе Л. Рейес-Ортис. Набор данных общественного достояния для распознавания человеческой деятельности с помощью смартфонов. 21-й Европейский симпозиум по искусственным нейронным сетям, вычислительному интеллекту и машинному обучению, ESANN 2013. Брюгге, Бельгия, 24–26 апреля 2013 г.

О наборе данных:

Набор данных распознавания человеческой деятельности состоит из сенсорной информации о человеческой деятельности, такой как ходьба, сидение, стояние и т. Д., Выполняемой группой добровольцев. Используя акселерометр и гироскоп, встроенные в Samsung Galaxy SII, исследователи зафиксировали 561 функцию, содержащую информацию, такую ​​как 3-осевая скорость, ускорение, а также их минимальное, максимальное, среднее, стандартное отклонение и т. Д.

Как вы понимаете, наличие 561 функции для описания одного действия - это большой объем информации, который требует больших вычислительных ресурсов. Не говоря уже о количестве шума, присутствующего в наборе данных.

По этой причине для нас важно иметь возможность сузить круг и выбрать только те функции, которые наиболее точно способствуют распознаванию активности.

Здесь нам пригодится рекурсивное исключение функций, которое поможет нам сэкономить время и усилия и автоматически реализовать процесс выбора.

Рекурсивное исключение функции -

Scikit-learn предоставляет реализацию класса исключения рекурсивных функций для выбора тех столбцов, которые имеют наибольшее влияние на прогнозирование целевой переменной.

В нашем случае нашими целевыми переменными являются шесть действий, выполняемых добровольцами, и с помощью RFE мы можем выбрать, какой из столбцов, например tBodyAcc-mean () - X или tGravityAccMag-max (),, является важный.

Рекурсивное исключение функций работает путем подгонки выбранной модели машинного обучения ко всем столбцам или функциям изначально. Затем он рекурсивно удаляет элементы, обучает модель с помощью этого сокращенного набора функций, вычисляет производительность модели и отмечает, какие функции важны.

Этот процесс повторяется до тех пор, пока не будет выбрано необходимое количество функций.

Давайте сразу перейдем к руководству.

1) Создание DataFrame -

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

Наборы данных для обучения и тестирования доступны в формате .txt. Нам нужно будет вручную преобразовать его в файл CSV в Excel, прежде чем загружать его в Pandas DataFrame. После сохранения файла CSV мы извлечем 561 метку столбца из файла features.txt и 6 меток действий из файла activity_labels.txt, находящегося в папке загрузки, используя Python.

2) Рекурсивное исключение функции -

Используя Scikit-learn, мы можем создать объект класса Recursive Feature Elimination, указав, сколько функций нужно сохранить. После этого мы поместим объект в наборы данных для обучения и тестирования и создадим новые версии наборов данных для обучения и тестирования, содержащие только указанное количество столбцов.

X и X_t, преобразованное обучение, тестирование (аллитерационное предупреждение! Да, я намеренно использовал запятую вместо «и» именно для этой цели.) подмножества теперь содержат только 100 столбцов, как указано в параметре n_features_to_select.

Переменная удерживаемые_колонки представляет собой список выбранных столбцов, а ниже - снимок экрана, на котором показан первый 21 из 100 сохраненных столбцов.

3) Модель классификации и показатели -

Следующим шагом является согласование модели классификации с выбранными функциями. Я использовал классификатор опорных векторов для этой проблемы, и он дает очень хорошую точность около 95%.

Теперь вам может быть интересно, как бы выглядела точность, если бы все столбцы использовались вместо 100 столбцов, выбранных с помощью RFE.

Модель, обученная и протестированная на всем наборе из 561 функции, показала точность около 96%.

Модель обучена и протестирована на 100 наиболее важных функциях и показала точность 95%.

Это показывает, что существует очень небольшая разница в точности между двумя наборами обучающих данных, демонстрируя, насколько эффективно RFE устраняет нерелевантные особенности при сохранении производительности модели.

Благодаря рекурсивному исключению функций мы уменьшаем вероятность переобучения и шума, предоставляя модели меньше (и только необходимой) информации. Скорость вычислений увеличивается, что сокращает время обучения модели.

Теперь давайте взглянем на некоторые другие оценочные показатели, чтобы изучить эффективность нашей модели.

Точность, отзывчивость, оценка F1 - это еще несколько различных показателей, которые помогают глубоко проанализировать, насколько хорошо модель работает.

Как видно, классификатор опорных векторов хорошо подходит для этой конкретной задачи и дает точное предсказание типа деятельности, которую выполняет волонтер.

Итак, это все! Надеюсь, вам понравился этот учебник, в котором представлена ​​концепция выбора функций (путем исключения), и вы сочли полезным увидеть, как RFE может быть полезен в случаях использования с большим количеством функций, чтобы сузить круг вопросов.

Вы можете ознакомиться с другими такими интересными концепциями в моей серии здесь и не стесняйтесь взглянуть на мой GitHub Repo.

Большое спасибо за чтение, до скорой встречи!