Выбирайте лучшие функции с диаграммами Санки

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

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

При работе с тысячами функций лучше использовать метод визуализации, чтобы визуализировать процесс выбора функций. Введите диаграммы Санки. Диаграмма Санки — это тип блок-схемы, который используется для представления потока информации, энергии или материала от одного набора узлов к другому. Диаграмма состоит из ряда узлов и потоков, где ширина потоков представляет величину потока.

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

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

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

Санки использует Plotly

Мы будем использовать Plotly, чтобы помочь нам создать эту интерактивную диаграмму. Для этого нам понадобятся четыре входа.

  • Метки — это узлы, обозначающие начало или конец потока.
  • Source — Индекс метки, где поток возникает
  • Target — Индекс метки, где заканчивается поток
  • Значение — количество потоков между данным источником и целью

Все эти входные данные передаются в виде списка в диаграмме Санки в Plotly. Подробнее на Сайт Plotly

def get_sankey(labels, sources, targets, values):
    import plotly.graph_objects as go

    fig = go.Figure(data=[go.Sankey(
        node = dict(
        pad = 15,
        thickness = 20,
        line = dict(color = "black", width = 0.5),
        label = labels,
        color = "blue"
        ),
        link = dict(
        source = sources,
        target = targets,
        value = values
    ))])

    fig.update_layout(title_text="Feature Selection Summary", font_size=12)
    fig.show()

Пустой набор данных и остальная часть кода

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

# importing libraries
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import itertools

# creating a dummy data set
categories = ['Risk','Balance','Default','Spend','Engagement', 'Digital']
feature_selection_method = ['top K feature selection',
    'Chi-square Test', 'Variance Threshold', 'Correlation']
selected_flag = ['selected', 'dropped']
combinations = [p for p in itertools.product(*[categories, 
                                               feature_selection_method,
                                               selected_flag])]
df = pd.DataFrame(combinations)
df.columns = ['categories', 'feature_selection_method', 'selected_flag']
df['value'] = [np.random.randint(0,20) for x in range(len(combinations))]
df.head()

# create list of labels
labels = categories + feature_selection_method + selected_flag

Далее мы определяем источники и цели. Это делается в 3 шага

  1. Источник, цель и значения между категориями и выбранный флаг, где были выбраны переменные
  2. Источник, цель и значения между категориями и метод выбора признаков, в котором были удалены переменные.
  3. Источник, цель и значения между методом выбора функций и выбранным флагом, где были удалены переменные
def get_values_source_target():

    # source target for selected variables
    categories_selected = df[df.selected_flag == 'selected'].copy()
    categories_selected['source'] = [labels.index(x) for x in categories_selected['categories']]
    categories_selected['target'] = [labels.index(x) for x in categories_selected['selected_flag']]
    s1 = categories_selected[['source', 'target', 'value']]

    # source target for dropped variables: source -> feature selection method
    cat_method_dropped = df[df.selected_flag == 'dropped'].copy()
    cat_method_dropped['source'] = [labels.index(x) for x in cat_method_dropped['categories']]
    cat_method_dropped['target'] = [labels.index(x) for x in cat_method_dropped['feature_selection_method']]
    s2 = cat_method_dropped[['source', 'target', 'value']]

    # source target for dropped variables: feature selection method -> dropped
    method_dropped = df[df.selected_flag == 'dropped'].copy()
    method_dropped['source'] = [labels.index(x) for x in method_dropped['feature_selection_method']]
    method_dropped['target'] = [labels.index(x) for x in method_dropped['selected_flag']]
    s3 = method_dropped[['source', 'target', 'value']]

    final = s1.append(s2).append(s3)

    return final.source, final.target, final.value

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

Заключение

Диаграммы Санки обеспечивают интуитивно понятное визуальное представление потока информации между объектами и методами, используемыми для их выбора. Это делает диаграмму Санки не только отличным инструментом для выбора функций, но и инструментом для лучшего понимания взаимосвязей между функциями. Итак, в следующий раз рассмотрите возможность использования диаграмм Санки при построении следующей модели.