Выбор функций — важный шаг в машинном обучении. При выборе функций мы выбираем соответствующие функции для нашей модели. Функции, которые предоставляют полезную информацию о данных и повышают точность модели, — это все, что нужно Data Scientist. Выявление соответствующих функций — сложная задача в сквозных проектах. Существует множество методов выбора признаков. В этой статье я собираюсь обсудить алгоритм Boruta для выбора признаков. Здесь, в частности, я рассказываю о реализации Boruta на Python.

Бумага Боруты: https://www.jstatsoft.org/article/view/v036i11

Ссылка Boruta Github: https://github.com/scikit-learn-contrib/boruta_py (реализация Python)

Установка: используйте команду «pip install Boruta» для Python и «library («Boruta»)» для R.

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

Давайте сначала разберемся с алгоритмом боруты. Борута — это метод выбора всех соответствующих функций. Он находит все функции, несущие информацию, полезную для прогнозирования, а не возможное компактное подмножество функций, которое дает минимальную ошибку для некоторых классификаторов. Он разработан как оболочка вокруг алгоритма Random Forest. Он итеративно удаляет признаки, которые оказались менее релевантными в результате статистического теста, а не с использованием случайных вероятностей. Он использует случайный лес в качестве базового алгоритма.

Алгоритм боруты состоит из следующих шагов:

  1. Расширьте информационную систему, добавив копии всех переменных (информационная система всегда расширяется как минимум на 5 теневых атрибутов, даже если количество атрибутов в исходном наборе меньше 5).
  2. Перемешайте добавленные атрибуты, чтобы удалить их корреляции с ответом.
  3. Запустите классификатор случайного леса в расширенной информационной системе и соберите вычисленные Z-баллы.
  4. Найдите максимальную оценку Z среди теневых атрибутов (MZSA), а затем назначьте попадание каждому атрибуту, который получил лучшую оценку, чем MZSA.
  5. Для каждого атрибута с неопределенной важностью выполняют двусторонний тест на равенство с MZSA.
  6. Признать атрибуты, значимость которых значительно ниже МЗСА, неважными и окончательно удалить их из информационной системы.
  7. Считать важными атрибуты, значимость которых значительно выше, чем у MZSA.
  8. Удалите все атрибуты тени.
  9. Повторяйте процедуру до тех пор, пока важность не будет назначена для всех атрибутов, или пока алгоритм не достигнет установленного ранее лимита запусков случайного леса.

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

Теперь давайте посмотрим, как мы можем использовать borutaPy для реализации boruta в python.

BorutaPy — это класс в пакете boruta python, используемый для реализации выбора функций.

БорутаПи():

Параметры:

  1. оценщик: объект

Оценщик контролируемого обучения с методом подбора, который возвращает атрибут feature_importances_.

2. n_estimator: целое число или строка, по умолчанию = 1000.

Если int устанавливает количество оценок в выбранном методе ансамбля. Если «авто», это определяется автоматически на основе размера набора данных.

3.perc : целое, по умолчанию = 100

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

4.альфа:плавающая, по умолчанию = 0,05

Уровень, при котором скорректированные значения p будут отклонены на обоих этапах коррекции.

5.two_step : логическое значение, по умолчанию = True

Если вы хотите использовать оригинальную реализацию Боруты с исправлением Бонферрони, установите для этого параметра значение False.

6.max_iter : целое, по умолчанию = 100

Максимальное количество итераций для выполнения.

7. Подробный :целое число, по умолчанию=0

Контролирует детализацию вывода.

Атрибуты:

  1. n_features_ : целое число

Количество выбранных функций.

2.support_ :массив формы [n_features]

Маска выбранных признаков — только подтвержденные имеют значение True.

3.support_weak_ : массив формы [n_features]

Маска выбранных предварительных функций, которые не получили достаточной поддержки в течение max_iter количества итераций.

4. ranking_ : массив формы [n_features]

Ранжирование признаков, такое, что rating_[i] соответствует позиции ранжирования i-го признака. Выбранным объектам присваивается ранг 1, а предварительным объектам назначается ранг 2.

Давайте реализуем код для выбора функций из набора данных wine, представленного в библиотеке scikit-learn.

Шаг 1. Импорт библиотек

from boruta import BorutaPy
import pandas as pd
import numpy as np
from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier

Шаг 2. Загрузка данных

data = load_wine(as_frame = True)
df = data.frame

Шаг 3. Внедрение Boruta

clf = RandomForestClassifier(n_estimators=50, max_depth=5)
transformer = BorutaPy(clf, random_state=42, verbose=2)
select = transformer.fit_transform(data.data.values, data.target.values)
Output:
Iteration: 	1 / 100
Confirmed: 	0
Tentative: 	13
Rejected: 	0
Iteration: 	2 / 100
Confirmed: 	0
Tentative: 	13
Rejected: 	0
Iteration: 	3 / 100
Confirmed: 	0
Tentative: 	13
Rejected: 	0
Iteration: 	4 / 100
Confirmed: 	0
Tentative: 	13
Rejected: 	0
Iteration: 	5 / 100
Confirmed: 	0
Tentative: 	13
Rejected: 	0
Iteration: 	6 / 100
Confirmed: 	0
Tentative: 	13
Rejected: 	0
Iteration: 	7 / 100
Confirmed: 	0
Tentative: 	13
Rejected: 	0
Iteration: 	8 / 100
Confirmed: 	13
Tentative: 	0
Rejected: 	0


BorutaPy finished running.

Iteration: 	9 / 100
Confirmed: 	13
Tentative: 	0
Rejected: 	0

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

transformer.support_
Output : 
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True])

По словам Боруты, все характеристики этого набора данных актуальны.

Заключение :

Борута полезен для получения всех соответствующих функций данных. Это может сделать работу Data Scientist намного проще. BorutaPy похож на интерфейс scikit-learn, такой как fit, fit_transform, поэтому его легко использовать, поскольку мы все знакомы с scikit-learn.

Ссылки:

https://www.jstatsoft.org/article/view/v036i11

https://github.com/scikit-learn-contrib/boruta_py