Знаете ли вы, что вы можете комбинировать анализ основных компонентов (PCA) и кластеризацию K-средних для улучшения результатов сегментации? В этом руководстве мы увидим практический пример сочетания PCA и K-средних для кластеризации данных с использованием Python.

Зачем комбинировать СПС и К-средства?

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

В частности, в случае PCA и K-means между ними существует еще более тесная связь.

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

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

PCA и K-means: изучение набора данных

Мы начинаем, как и любую другую задачу программирования: с импорта соответствующих библиотек Python.

В нашем случае это:

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

Набор данных, который мы выбрали для этого руководства, включает 2000 наблюдений и 7 функций.

В частности, он содержит информацию о 2000 человек и их идентификаторы, а также геодемографические характеристики, такие как возраст, род занятий и т. Д.

Наконец, у нас есть время, чтобы визуализировать набор необработанных данных по двум числовым характеристикам; Возраст и доход.

График представляет все точки в нашем текущем наборе данных, которые наш алгоритм K-средних будет стремиться сегментировать.

Еще одно наблюдение из графика касается областей двух переменных - возраста и дохода. Мы понимаем, что домен для возраста составляет от 20 до 70, а для дохода - от примерно 40 000 до более 300 000. Что указывает на огромную разницу между диапазоном этих значений. Следовательно, мы должны включить важный шаг в наш анализ, и мы должны сначала стандартизировать наши данные.

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

PCA и K-means: предварительная обработка

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

Мы определим количество этих сходств и различий.

Что ж, вы можете представить, что два человека могут различаться по «возрасту». Одному может быть 20 лет, а другому - 70 лет. Разница в возрасте 50 лет. Однако он охватывает почти весь диапазон возможных возрастов в нашем наборе данных.

В то же время первое физическое лицо может иметь годовой доход в размере 100 000 долларов США; в то время как второй может иметь годовой доход в размере 150 000 долларов. Следовательно, разница между их доходами составит 50 тысяч долларов.

Если бы эти числа вошли в любую из наших моделей сегментации в том виде, в каком они есть, алгоритм посчитал бы, что они отличаются по одной переменной на 50; в то время как с точки зрения другого на 50 000. Затем, из-за математической природы моделирования, он полностью игнорирует "возраст" как характеристику. Причина в том, что числа от 20 до 70 незначительны по сравнению со значениями дохода около 100 тысяч.

Почему?

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

Следовательно, это придаст гораздо больший вес переменной дохода.

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

PCA и K-means: стандартизация

В этом руководстве мы будем использовать стандартный масштабатор для стандартизации наших данных, которые в настоящее время находятся во фрейме данных сегментации df:

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

Как выполнить уменьшение размерности с помощью PCA?

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

В любом случае, вот шаги, чтобы выполнить уменьшение размерности с помощью PCA.

Во-первых, мы должны подогнать наши стандартизированные данные с помощью PCA.

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

График показывает величину захваченной дисперсии (по оси Y) в зависимости от количества компонентов, которые мы включаем (ось X). Практическое правило - сохранить около 80% дисперсии. Итак, в этом случае мы решили оставить 3 компонента.

На третьем этапе мы выполняем PCA с выбранным количеством компонентов.

Для нашего набора данных это означает 3 основных компонента:

Нам нужны только рассчитанные итоговые оценки компонентов для элементов в нашем наборе данных:

Мы включим недавно полученные оценки PCA в алгоритм K-средних. Вот как мы можем выполнять сегментацию на основе оценок основных компонентов, а не исходных характеристик.

Как совместить СПС и К-средства?

Как и было обещано, пришло время объединить PCA и K-means для сегментации наших данных, где мы используем оценки, полученные PCA для соответствия.

Судя по тому, насколько вы знакомы с K-средними, вы, возможно, уже знаете, что K-means не определяет количество кластеров в вашем решении. Если вам нужно освежить в памяти все, что касается K-means, вы можете прочитать наш специальный пост в блоге.

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

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

Однако сначала мы должны решить, сколько решений кластеризации мы будем тестировать.

По этому поводу нет единого постановления. Это действительно зависит от данных. В нашем случае мы тестируем алгоритм до 20 кластеров.

Следующий шаг включает построение WCSS в зависимости от количества компонентов на графике.

И по этому графику мы определяем количество кластеров, которые мы хотели бы сохранить. Для этого мы используем метод «Локоть». Подход состоит в поиске изгиба или изгиба на графике WCSS. Обычно часть графика перед локтем будет круто снижаться, а часть после него - намного плавнее. В этом случае перегиб происходит на отметке 4 кластера. Итак, мы сохраним решение с четырьмя кластерами.

Осталось только реализовать его.

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

А теперь мы подошли к самому интересному: анализу результатов нашего алгоритма.

Как анализировать результаты PCA и K-средних?

Прежде всего, мы создадим новый фрейм данных. Это позволяет нам добавлять значения отдельных компонентов в наш набор данных сегментации. Баллы компонентов хранятся в переменной «scores P C A». Обозначим их как Компоненты 1, 2 и 3. Кроме того, мы также добавляем метки «K означает P C A» к новому фрейму данных.

Мы почти готовы увидеть результаты своего труда.

Остается один маленький шаг: мы должны добавить названия сегментов к меткам.

Мы создаем новый столбец с именем «Сегмент» и сопоставляем четыре кластера прямо внутри него.

PCA и K-means: как визуализировать кластеры по компонентам?

Давайте закончим визуализацией наших кластеров на двухмерной плоскости. Это двухмерная визуализация, поэтому нам нужно выбрать два компонента и использовать их в качестве осей. Задача PCA заключалась в том, чтобы определить наиболее важные компоненты. Таким образом, мы можем быть абсолютно уверены, что первые два компонента объясняют большую дисперсию, чем третий.

Итак, давайте визуализируем сегменты по отношению к первым двум компонентам.

Ось X - это наш «Компонент 2». Ось Y, с другой стороны, представляет собой первый «Компонент 1».

Теперь мы можем наблюдать отдельные кластеры.

Для сравнения, если мы запустим только алгоритм k-средних без шага PCA, результат будет следующим:

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

Однако, когда мы применяем PCA до использования K-средних, мы можем визуально разделить почти весь набор данных. Это была одна из самых больших целей PCA - уменьшить количество переменных, объединив их в более крупные и значимые функции.

Более того, они «ортогональны» друг другу. Это означает, что разница между компонентами максимально велика.

Красный и синий сегменты частично перекрываются. Но в целом все четыре сегмента четко разделены. Места, в которых они перекрываются, в конечном итоге определяются третьим компонентом, которого нет на этом графике.

Несколько заключительных слов о PCA и K-средствах…

Наконец, важно отметить, что наш набор данных с самого начала содержал лишь несколько функций. Итак, когда мы еще больше уменьшили размерность, используя «P C A», мы обнаружили, что нам нужны только три компонента для разделения данных.

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

Это может быть не всегда. У вас может быть больше функций и больше компонентов соответственно. Тогда вам может понадобиться другой способ представления результатов PCA.

Мы надеемся, что вы найдете это руководство полезным и опробуете подходы K-средних и PCA, используя свои собственные данные.

Если вы хотите получить более практическое представление о Python, ознакомьтесь с нашими пошаговыми руководствами по Python.

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

Готовы сделать следующий шаг к карьере в области науки о данных?

Ознакомьтесь с полной программой Data Science сегодня. Начните с основ с наших курсов по статистике, математике и Excel. Получите пошаговый опыт работы с SQL, Python, R и Tableau; и улучшите свои навыки с помощью машинного обучения, глубокого обучения, моделирования кредитного риска, анализа временных рядов и аналитики клиентов на Python. Если вы все еще не уверены, что хотите превратить свой интерес к науке о данных в прочную карьеру, мы также предлагаем бесплатную предварительную версию программы Data Science Programme. Вы получите 12 часов бесплатного контента для начинающих и продвинутых. Это отличный способ узнать, подходит ли вам программа.

Первоначально опубликовано на https://365datascience.com 10 марта 2020 г.