Версия этой статьи на португальском языке доступна в Aprendizado não Supervisionado com K-means.

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

K-означает

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

Создавать кластеры с помощью K-средних в Python тоже очень просто. Посмотрим код:

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

Локоть

В этом методе вы должны запустить свой алгоритм кластеризации с некоторыми значениями, например, от 1 до 10 кластеров. Вычислить функцию затрат, сумму квадратов внутри кластера и построить график. Оптимальное количество кластеров достигается, когда добавление нового кластера не приводит к значительному увеличению функции стоимости. Обычно это происходит на «изгибе» лески.

Средний силуэт

Анализ силуэта измеряет, насколько хорошо точка вписывается в кластер. В этом методе строится график, показывающий, насколько близки точки в одном кластере к точкам других кластеров. Когда коэффициент Силуэт находится рядом с +1, это означает, что точки находятся далеко от других кластеров, а когда он рядом с 0, это означает, что точки очень близки или пересекают другие кластеры.

Чтобы вычислить коэффициент Silhouette, нам нужно определить среднее расстояние от точки до всех других точек в ее кластере (a (i)), а также определить среднее расстояние до всех других точек в ближайшем кластере (b (i)). Итак, коэффициент Силуэта равен:

s(i) = (b(i) - a(i)) / max(b(i), a(i))

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

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

Итак, попробуем использовать алгоритм k-means с 5 кластерами:

Итак, эта кластеризация немного странная, не так ли? Давайте оценим этот набор данных методом Elbow:

График показывает нам, что у этого набора данных нет явного изгиба. Возможно, правильное количество кластеров составляет от 4 до 6. Но, возможно, набор данных, который мы построили, не может быть разделен таким образом ... Давайте посмотрим на коэффициент Silhouette для некоторых значений количества кластеров.

Результат этого алгоритма ниже. Графики разделены по количеству кластеров. Графики слева показывают нам оценку Silhouette, а графики справа - визуализацию кластеров.

For n_clusters = 2 The average silhouette_score is : 0.24604273339845253
For n_clusters = 3 The average silhouette_score is : 0.20670607133321856
For n_clusters = 4 The average silhouette_score is : 0.188444914764597
For n_clusters = 5 The average silhouette_score is : 0.19090629903451375
For n_clusters = 6 The average silhouette_score is : 0.18047082769472864

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

Заключение

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

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

использованная литература

Весь код опыта этой статьи находится в этом репозитории Github.

Методы определения оптимального количества кластеров
Как определить оптимальное количество кластеров для K-средних
Анализ силуэта участка
Анализ силуэта
Используемый здесь набор данных