Введение

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

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

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

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

Кластеризация имеет широкий спектр приложений и является невероятно полезным инструментом в вашем наборе инструментов для обработки и анализа данных.

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

Начало работы с Kmeans

K в K означает

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

Изучение центроидов

Как только мы определили k, алгоритм случайным образом распределит k точек; и эти точки будут работать как ваши «центроиды». Что такое центроид, спросите вы? Центроид относится к тому, что будет центральной точкой каждого кластера.

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

После расчета расстояния каждая точка присваивается ближайшему центроиду.

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

Давайте построим нашу первую модель

Немного разведки для начала

Для этого анализа мы будем использовать классический набор данных Iris, как я упоминал ранее. Этот набор данных снова и снова использовался для обучения концепции кластеризации. Эдгар Андерсон собрал данные о длине и ширине чашелистиков и лепестков трех видов ирисов. Если вас интересует дополнительная информация об этом, ознакомьтесь с объяснением в Википедии (https://en.wikipedia.org/wiki/Iris_flower_data_set)

Быстрая ЭДА

head(iris)

glimpse(iris)

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

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = factor(Species))) +
  geom_point()

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

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = factor(Species))) +
  geom_point()

ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = factor(Species))) +
  geom_point()

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

Создание нашей первой модели кластеризации

set.seed(3)
k_iris <- kmeans(iris[, 3:4], centers = 3)

Когда мы устанавливаем начальное число на заданное число, мы гарантируем, что сможем воспроизвести наши результаты.

Мы вызываем функцию kmeans и передаем соответствующие данные и столбцы. В этом случае мы используем длину и ширину лепестка для построения нашей модели. Мы объявляем 3 центра, поскольку знаем, что существует три разных вида.

Если вы затем вызовете свою модель кластера. Вы получите вывод, похожий на следующий:

Несколько вещей, которые стоит выделить:

Вы увидите несколько полезных фрагментов информации:

  • количество кластеров, как ранее определялось параметром center
  • означает для каждого значения в естественно определенном кластере.
  • «Сумма квадратов внутри кластера» — это абсолютное расстояние между каждой точкой и центроидом по кластеру.
  • Доступные компоненты — здесь модель предоставляет несколько других сведений. Вскоре мы воспользуемся компонентом «кластер»!

Оценка эффективности

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

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

table(k_iris$cluster, iris$Species)

Здесь мы видим, что все виды setosa были отнесены к одной и той же группе, и никакие другие виды не были добавлены к той же группе. Для разноцветного мы можем видеть, что kmeans точно зафиксировали 48/50 разноцветного в кластере 3 и 46/50 виргинского в кластере 1.

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

iris <- mutate(iris, cluster = k_iris$cluster)

Теперь давайте воссоздадим наш первый точечный график, заменив виды кластерами.

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = factor(cluster))) +
  geom_point()

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

Конечно, мы могли бы протестировать различные комбинации переменных, чтобы получить еще лучшее приближение к каждому виду ириса, но теперь у вас есть основные инструменты, необходимые для этого!

Вывод

За несколько коротких минут мы узнали, как работает кластеризация Kmeans и как ее реализовать.

  • Кластеризация — это метод обучения без учителя.
  • Kmeans — один из самых популярных методов кластеризации.
  • K - заданное количество кластеров
  • Как на самом деле работает алгоритм
  • Как создать собственную модель кластера

Я надеюсь, что этот краткий пост о практическом применении Kmeans окажется полезным для вас в любом приложении техники.

Успехов в науке о данных!