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