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

Как уже упоминалось, мы начинаем выбирать значение K. Центроиды K (подробнее о центроидах через секунду) затем добавляются в случайные места на нашем графике. На двухмерном графике ниже очевидно, что есть три кластера, поэтому я обозначу K как 3. Важно отметить, что график ниже содержит только 2 функции (следовательно, двумерный график, значения которого подразумеваются вертикальным и Горизонтальная ось). При работе с более чем 3 функциями (что для больших данных почти наверняка) вы не можете просто построить график данных, чтобы иметь визуальное представление о том, сколько кластеров будет подходящим, потому что сейчас мы находимся на уровне размерности, который становится визуально непонятным. Тем не менее, давайте продолжим концепцию. Как уже упоминалось, мы решили сгруппировать данные в 3 кластера. Эти 3 кластера инициируются случайным образом и были вставлены в визуализацию ниже. Они представлены в виде больших синих, зеленых и красных кругов. Техническое название этих больших кругов - «центроиды». Они не являются частью вашего набора данных, это просто случайные координаты, которые представляют центр кластера. Однако маленькие белые кружки - это фактические точки данных из вашего набора данных.

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

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

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

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

Несмотря на то, что ряд представленных визуализаций быстро сформировался, этот процесс обычно требует множества итераций.

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

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

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

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

На графике выше мы видим отчетливый «изгиб» в 3 кластерах. Это момент, когда ошибка начинает сглаживаться, и, таким образом, добавление большего количества кластеров дает значительно уменьшающуюся ценность. Вы можете спросить, почему бы не включить больше кластеров, если ошибка все еще не работает? Ответ прост. Добавление большего количества кластеров может снизить ценность модели для вас. Подумайте об этом так. Мы можем уменьшить нашу ошибку до нуля, поместив каждую точку данных в отдельный кластер. По сути, центроид должен располагаться поверх точки данных и формировать кластер из одного. Но какую ценность это дает нам? Никто. Мы там, где начали. Ничего не сгруппировано. Таким образом, ключом к правильной реализации кластеризации K-средних является поиск подходящего количества кластеров.

Вот и все, что нужно сделать. Очень просто для понимания, очень ограниченная настройка параметров, а также исключительно проста в реализации с использованием высокоуровневых библиотек, таких как scikit-learn aka sklearn.

Чтобы увидеть больше видео о науке о данных, посетите мой канал на YouTube по адресу https://www.youtube.com/channel/UCo8qbws1-to6LDgMNECu2dw/ и, пожалуйста, подпишитесь!