Как выбрать важные функции для вашей модели машинного обучения

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

Существует множество методов выбора признаков, включая статистический анализ, например метод хи-квадрат, или более продвинутый, например, анализ важности признаков модели. Хорошее знание предметной области также является лучшим способом выбора функций.

В Scikit-Learn мы можем использовать различные функции для выбора функций. Что это за функции? Давайте займемся этим.

1. Порог отклонения

Самый простой метод выбора признаков, как правило, использует определенную базовую линию. В Scikit-Learn есть функция VarianceTreshold для выбора функций на основе порога дисперсии.

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

Статистически дисперсия измеряет, как наши данные распространяются в зависимости от их среднего значения. Показатель дисперсии показывает, насколько сильно разбросаны данные между средним значением и друг другом. Чем выше балл, тем шире распространяются данные.

Давайте попробуем функцию VarianceTreshold на примере набора данных. Во-первых, давайте создадим простой набор данных, который мы будем использовать.

import pandas as pd
import numpy as np

X = pd.DataFrame(
    [[0, 2, 0, 3], 
     [0, 1, 4, 3], 
     [0, 1, 1, 3]], 
columns = 'a b c d'.split())
X

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

for i in X.columns:
    print(f'column {i} Variance: {np.var(X[i])}')

Мы видим, что столбцы a и d имеют дисперсию 0, поскольку все значения в их столбцах одинаковы. Напротив, столбцы c имеют наибольшую дисперсию, поскольку данные там более разбросаны. Теперь давайте воспользуемся функцией VarianceTreshold для выбора функций.