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

Для тех, кто плохо знаком с понятием «синтетические данные»:

«Синтетические данные, как следует из названия, — это данные, созданные искусственно, а не генерируемые реальными событиями».

Помимо разработки мощных методов генерации синтетических данных с использованием передовых алгоритмов глубокого обучения, таких как GAN (генеративно-состязательная сеть), одной из важных тем в этом проекте является разработка метрик оценки сходства для оценки того, являются ли сгенерированные синтетические данные статистическими и структурными. аналогичны исходным данным.

Измерение сходства широко используется в реальном бизнесе, особенно для табличных данных. Например, как мы оцениваем сходство между прогнозируемыми продажами и фактическими продажами, чтобы улучшить нашу модель прогнозирования? Можем ли мы придумать показатель, который количественно определяет уровень сходства, чтобы руководство могло принимать более правильные решения? Что, если нам также нужно зафиксировать сходство отношений между несколькими переменными?

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

Чтобы измерить сходство между двумя табличными данными, а именно двумя таблицами, мы можем начать с независимого измерения каждой пары столбцов, а затем измерить отношения между столбцами. Метрика распределения предназначена для измерения сходства между парными переменными (столбцами), а Метрика сокращения данных и Метрика кластеризации предназначены для измерения отношений между несколькими переменными. (столбцы) в каждой таблице.

Метрика распределения (оценка по столбцам)

Мы измеряем статистическое сходство между парными переменными, оценивая их распределения вероятностей. Всегда легко сначала построить гистограмму или гистограмму, чтобы увидеть, похожи ли формы двух графиков. Ниже приведен пример визуализации гистограмм парных переменных в исходных данных и синтетических данных, сгенерированных ct-GAN.

Как мы можем количественно определить сходство между двумя дистрибутивами?

Метод 1: Расхождение Кульбака-Лейблера (KL-расхождение)

Расхождение Кульбака-Лейблера (KL-расхождение) – это широко используемый метод измерения того, насколько одно распределение отличается от другого. Это концепция из теории информации, которая количественно определяет, сколько информации теряется при сравнении двух распределений. Более конкретно, KL-дивергенция является лишь небольшой модификацией нашей формулы для энтропии и, по существу, в нашем случае является ожиданием логарифмической разницы между вероятностью данных в исходном столбцовом распределении (p) и синтетическим столбцовым распределением ( р). Формула ниже:

Для распределения вероятностей непрерывной переменной:

Для распределения вероятностей дискретной переменной:

Расхождение KL можно использовать для измерения непрерывных или дискретных распределений вероятностей. Требуется, чтобы входные данные имели сумму 1, иначе это не было бы правильным распределением вероятностей. Следовательно, перед вычислением дивергенции KL требуется этап преобразования, который преобразует переменные данные в массив частотных вероятностей. Однако для непрерывных данных вычисляется интеграл событий вместо суммы вероятностей дискретных событий. Чтобы включить распределение непрерывных данных в формулу KL-дивергенции в python, мы можем установить ячейки для расчета частотных вероятностей различных значений, отображаемых в каждом небольшом диапазоне.

Преобразование можно выполнить в python, как показано ниже:

Однако в ситуации, когда количество событий в синтетических данных отличается от исходных данных, вероятность события, которое не отображается в синтетических данных, но присутствует в исходных данных, должна быть записана как 0, чтобы достичь той же длины, что и исходный массив распределения для расчета. Дивергенция KL имеет небольшой недостаток, потому что она не может иметь дело с распределением вероятностей, которое содержит 0. Чтобы избежать дополнительной корректировки этой проблемы, мы можем использовать другую популярную метрику — косинусное сходство — для расчета сходства распределения.

Метод 2: Подобие косинусов

Сходство по косинусу – это мера сходства между двумя ненулевыми векторами пространства внутреннего произведения, измеряющая косинус угла между ними. Формула, на которую ссылается страница вики, показана ниже, где A и B в нашем случае — это массив частотных вероятностей каждого уникального значения в синтетическом столбце и исходном столбце соответственно:

KL-расхождение и косинусное сходство можно рассчитать в python, как показано ниже:

Метрика сокращения данных (табличная оценка)

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

Метод 1: Автокодировщик

Автоэнкодер считается алгоритмом сжатия данных и долгое время считался потенциальным средством решения проблемы неконтролируемого обучения, то есть изучения полезных представлений без использования меток. Согласно заявлению Keras team об автоэнкодере, автоэнкодеры не являются истинным методом обучения без учителя (что вместе подразумевает другой процесс обучения), это метод самоконтроля, конкретный пример обучения с учителем, где целями являются именно входные данные или сгенерированные из входных данных.

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

Чтобы получить представление (встраивание) таблицы из автоэнкодера:

Шаг 1. Обучение автоэнкодера

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

Шаг 2.Извлечение встраивания из сети автоэнкодера

В целях создания оценки сходства мы бы присвоили размерности встраивания 1, чтобы для расчета сходства можно было использовать такие показатели, как косинусное сходство и KL-расхождение. Однако для визуализации мы можем использовать Autoencoder, чтобы сжать обе таблицы соответственно до более низкого измерения (но более 2), а затем использовать PCA для дальнейшего сжатия данных до 2 измерений.

Простой полносвязный автоэнкодер, опубликованный в блоге Keras:

Для визуализации структуры таблицы PCA и t-SNE являются широко используемыми метриками уменьшения размерности и могут использоваться в нашем случае для создания данных более низкого измерения, а затем визуализации структур разных таблиц для сравнения.

Метод 2: Анализ главных компонентов (АПК)

Анализ главных компонентов (PCA) — это метод выделения линейных признаков. Он выполняет линейное отображение данных в низкоразмерное пространство таким образом, чтобы максимизировать дисперсию данных в низкоразмерном представлении. Это делается путем вычисления собственных векторов из ковариационной матрицы. Собственные векторы, которые соответствуют наибольшим собственным значениям (главным компонентам), используются для восстановления значительной части дисперсии исходных данных.

Метод 3: встраивание t-распределенных стохастических соседей (t-SNE)

t-Distributed Stochastic Neighbor Embedding (t-SNE) — это инструмент для визуализации многомерных данных. Он преобразует сходство между точками данных в совместные вероятности и пытается минимизировать расхождение Кульбака-Лейблера между совместными вероятностями низкоразмерного вложения и многомерными данными.

Почему PCA важнее t-SNE?

  • Согласно этому блогу, в котором опробованы методы PCA и t-SNE, t-SNE требует больших вычислительных ресурсов с вероятностным методом, который он использует. Поскольку t-SNE квадратично масштабируется по количеству объектов N, его применимость ограничена наборами данных, содержащими всего несколько тысяч входных объектов; кроме того, обучение становится слишком медленным, чтобы быть практичным (и требования к памяти становятся слишком большими).
  • t-SNE в обучении Scikit имеет функцию стоимости, которая не является выпуклой в соответствии с документацией обучения Scikit, что делает две визуализации двух таблиц, сгенерированных одной и той же функцией преобразования, несопоставимыми. Поскольку они используют разную инициализацию для каждого использования преобразования, мы получим разные результаты.

Следовательно, мы можем использовать PCA в качестве методов сравнения визуализаций. t-SNE по-прежнему является отличным методом, рекомендуемым для визуализации многомерных данных, потому что это вероятностный метод по сравнению с математическим методом PCA.

Почему Autoencoder + PCA вместо PCA?

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

Ниже приведен пример результата сравнения визуализации между синтетическими данными, сгенерированными ct-GAN, и исходными данными:

Как количественно определить сходство между двумя вложениями?

Мы можем извлечь одномерный вектор из автоэнкодера, чтобы снова использовать KL-дивергенцию или косинусное сходство для измерения сходства распределения! Процесс аналогичен тому, что мы показали выше.

Метрика кластеризации (табличная оценка)

Комбинация Autoencoder и методов уменьшения размерности, таких как PCA, является одним из способов измерения статистического сходства между двумя таблицами. Но как синтетические данные работают в неконтролируемом алгоритме по сравнению с исходными данными? Здесь мы воспользуемся классической, но широко используемой в реальном бизнесе техникой без учителя — кластеризацией — для оценки статистического сходства с другой точки зрения.

Основная идея кластеризации заключается в организации объектов данных (в нашем случае это пациенты) в однородные группы, называемые кластерами. Желаемыми свойствами результата кластеризации являются высокое внутреннее сходство (объекты данных внутри каждого кластера) и низкое внутреннее сходство (кластеры друг с другом).

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

Ниже приведен пример результата сравнения кривой локтя между синтетическими данными, сгенерированными двумя алгоритмами GAN, и исходными данными:

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

Рекомендуемая литература:

  1. Если вам нужны идеи для создания надежной модели прогнозирования на последовательных данных, не стесняйтесь получить некоторые идеи из этого GitHub:


2. Если вам интересно, почему и как PCA и t-SNE работают по-разному, не стесняйтесь читать эти два ресурса, на которые я ссылался:





3. Если вас интересуют другие применения Autoencoder для табличных данных, не стесняйтесь читать этот ресурс:



Если есть что-то, что нужно исправить, или у вас есть какие-либо мысли, чтобы поделиться со мной по этой теме, пожалуйста, не стесняйтесь комментировать или обращаться! Всегда приятно узнать больше.