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

Вы можете создать одно и то же представление для каждой переменной и отслеживать поток переменных, которые, в конечном счете, влияют на вашу модель.
Санки использует 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 шага
- Источник, цель и значения между категориями и выбранный флаг, где были выбраны переменные
- Источник, цель и значения между категориями и метод выбора признаков, в котором были удалены переменные.
- Источник, цель и значения между методом выбора функций и выбранным флагом, где были удалены переменные
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
Когда у вас есть эти две функции, вы можете вызвать их обе, чтобы сгенерировать приведенную выше диаграмму.
Заключение
Диаграммы Санки обеспечивают интуитивно понятное визуальное представление потока информации между объектами и методами, используемыми для их выбора. Это делает диаграмму Санки не только отличным инструментом для выбора функций, но и инструментом для лучшего понимания взаимосвязей между функциями. Итак, в следующий раз рассмотрите возможность использования диаграмм Санки при построении следующей модели.