Как специалисты по обработке данных, мы должны решить, какие функции использовать в той или иной задаче машинного обучения. Мы часто берем каждую функцию, которая у нас есть, и создаем другие из истории лагов или интуитивно понятных комбинаций необработанных переменных и помещаем их все в модель, чтобы после обучения увидеть, каков вклад каждой функции (с некоторой метрикой вклада переменной), и принять решение. Если бы эти функции были доступны в первую очередь, это было бы хорошей идеей.
В этой статье я покажу некоторые методы визуализации зависимости переменной ответа от других функций в нашем наборе данных, чтобы увидеть, имеют ли они ценность для нашего конкретного алгоритма машинного обучения, и, в некоторых случаях, наложу некоторые монотонные ограничения на наши смоделировать или получить предварительное представление о распределении данных.
Все графики, примеры и методы визуализации, показанные в этой статье, доступны вам для использования и просмотра в этом пакете, который можно установить с помощью pip:
Гистограммы признаков, разделенные переменной ответа
Для задачи двоичной классификации существует естественное двоичное разделение нашего набора данных, подмножество, где y = 1, и подмножество, где y = 0 . Имея это в виду, для каждой функции F, у нас есть ее распределение в подмножестве, где y = 1 и y = 0, что в математической записи можно сформулировать так:
Если мы построим эти две плотности распределения вместе на одном графике, мы сможем увидеть, изменится ли функция F соответствующим образом, когда мы изменим значение переменной ответа (изменим раздел)
Если функция F не актуальна, мы увидим такой график (второй показанный график - это кумулятивное распределение):
Если функция F актуальна, мы можем увидеть следующий график:
или вот так:
Этот последний случай нечасто встречается при анализе реальных данных, если только у нас нет какой-либо утечки данных. Отметим, что простой классификатор пошаговых функций почти идеален, если такая функция доступна в нашем наборе данных.
Можем ли мы измерить эту релевантность количественно?
Показанные выше функции отсортированы по некоторой релевантности функций нашей цели машинного обучения, и это не настолько безумно, чтобы пытаться количественно оценить эту релевантность, используя какую-то меру несоответствия обоих распределений. Например, мы можем использовать:
- Если M1 - это среднее значение D1 и M2 - среднее значение M2, которое мы можем вычислить
| M1-M2 | как показатель релевантности - Мы можем вычислить KL-расхождение между D1 и D2
- Мы можем вычислить расстояние Вассерштейна между D1 и D2
Как математик, я лично предпочитаю третий вариант из-за его свойств надежности. Расстояние Вассерштейна является правильной математической метрикой расстояния и имеет удобную, настраиваемую и простую реализацию на scipy.
Итак, если у нас есть список функций F_j, мы можем отсортировать их по релевантности R_j, а затем построить гистограммы. (как в приведенных выше примерах), чтобы лучше понять зависимость между функциями и переменными отклика.
Но есть небольшая загвоздка, поскольку функции F_j могут иметь разные масштабы, необходимые для выполнения нормализации min-max, поэтому R_j сопоставимы
Приведенные выше примеры имеют отношение 0,005 , 0.11, и 0,86 соответственно.
А что насчет категориальных переменных?
Для категориального признака F, мы следуем той же логике с той разницей, что показатель релевантности должен вычисляться другим способом.
В этом случае мы используем общее расстояние вариации, которое представляет собой не что иное, как расстояние L1 весов (по категориям), связанных с распределениями. Формула выглядит так:
Пример с реальными данными
Мы используем набор данных штрихов от Kaggle, чтобы продемонстрировать эти методы.
Этот набор данных используется для прогнозирования вероятности инсульта у пациента на основе входных параметров, таких как пол, возраст, различные заболевания и статус курения.
Числовые характеристики
Посмотрим, что мы получим, если возьмем 3 числовых параметра: возраст, avg_gluosis_level и bmi.
Используя эту строку кода:
Мы получаем графики (отсортированные по релевантности) и фрейм данных с этими релевантностями (расстояниями):
Во-первых, мы получили возраст. Совершенно очевидно, что чем больше возраст, тем выше вероятность инсульта:
из кумулятивного графика распределения мы можем быстро получить представление об этих двух популяциях, используя интерактивность библиотеки plotly
Затем мы получили avg_gluosis_level
И наконец, мы получили bmi
Категориальные особенности
Аналогично случаю числовой функции мы можем использовать этот фрагмент кода:
И получите фрейм данных релевантности:
Мы видим, что ever_married является наиболее актуальной функцией, вероятно, из-за высокой корреляции с функцией возраст. Мы действительно можем увидеть эту корреляцию, используя эту строку кода:
Для полноты картины мы показываем вторую по значимости и наименее релевантную гистограмму категориальных признаков (гипертония и пол соответственно).
Наконец, мы продемонстрируем два немного разных использования этого инструмента.
Во-первых, мы увидим различия в распределениях bmi для разных типов работы, используя эту строку кода:
Во-вторых, мы можем сравнивать распределения, используя разные запросы условий, закодированные в словаре запросов. Здесь мы сравним avg_gluosis_level для разных возрастов.
Теперь мы перейдем к немного другой технике визуализации данных.
Графики квантильной и средней зависимости
Когда цель числовая (регрессия)
Предположим, у нас есть задача регрессии с целевой переменной y, и мы хотим узнать, какова зависимость от y какая-то особенность F. Для этого мы преобразовываем в двоичную форму функцию F в ячейках B_i, а затем вычисляем статистику (например, среднее или медиана или какой-либо другой квантиль) y для каждого бина, а затем постройте результат, чтобы увидеть эту зависимость. Мы вызовем y [B_i] статистики, вычисленной для корзины B_i:
Построив функцию y [B_i], мы можем получить представление об этой зависимости:
Показанный выше пример был создан с использованием следующих строк кода:
В качестве реального примера данных мы исследуем взаимосвязь между возрастом и bmi в наборе данных об гребке, используя эту строку кода:
Математически / статистически то, что мы пытаемся оценить здесь, - это статистика при условной вероятности P (· | F = x) для различных значений x функции F. Например, в случае средней статистики мы пытаемся оценить функцию, показанную ниже:
Этот метод очень похож на графики частичной зависимости (PDP), используемые для интерпретируемости алгоритмов машинного обучения, но с той разницей, что в PDP мы берем статистику по выходным данным модели, а не непосредственно по наблюдаемому распределению данных. Подробнее см. Эту статью.
Для категориальной функции мы следуем той же логике, с той разницей, что нам не нужно преобразовывать в двоичную форму, и мы используем гистограммы вместо линий.
В следующей строке кода мы можем увидеть связь между work_type и bmi:
Когда цель категорична (классификация)
Для задачи классификации (с целевой переменной y) мы должны видеть в каждой ячейке долю точек данных, имеющих определенный целевой класс c. Итак, для средней статистики мы вычисляем следующее значение
В этом случае, чтобы получить представление о доверительном интервале вычисленной выше доли, нам нужно проделать немного больше работы, чем в случае задачи регрессии (где нам нужно было только вычислить некоторые нижние и верхние квантили). Чтобы получить этот доверительный интервал, мы моделируем статистику пропорции как биномиальную случайную величину (где n = | B_i | и p = y [B_i] в приведенной выше формуле), а затем оцените доверительный интервал для доли, используя метод this, который дает более широкие интервалы, если n меньше (меньше уверенности для оценки пропорции).
Давайте посмотрим на этот метод на практике с нашим набором данных штрихов.
Сначала мы исследуем взаимосвязь возраста и категориальной цели удара, используя эти строки кода (мы установили уровень достоверности 0,95).
Получаем такой сюжет:
Точно так же для категориального признака work_type мы можем использовать следующие строки:
Вывод
Визуализация данных - очень важный инструмент для специалистов по обработке данных и специалистов-практиков в целом, который может помочь нам понять поведение системы, с которой мы имеем дело, получить быстрое понимание и повествование на основе данных, отладить конвейеры и модели предварительной обработки данных и накладывают некоторые ограничения и предварительные знания на нашу модель машинного обучения.
В этой статье мы подробно рассмотрели некоторые простые в использовании методы для визуализации, взаимодействия и понимания некоторых распределений и зависимостей наших переменных и, в конечном итоге, чтобы решить, какие из переменных мы должны выбрать для нашей модели.