Вступление

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

Есть много разных алгоритмов кластеризации. Одним из очень простых и все же мощных алгоритмов кластеризации является алгоритм K-средних. Алгоритм K-средних требует, чтобы пользователь сначала определил количество кластеров и, возможно, также стратегию инициализации кластеров. Но как найти эти параметры? Для кластеризации сетевой активности можно использовать два кластера. Один для мошеннических действий и один для не-мошенничества. Но сколько кластеров использовать для кластеризации клиентов? При обучении с учителем можно попробовать разные гиперпараметры и количество кластеров, а также напрямую вычислить некоторые показатели ошибок, например точность. Затем для окончательной модели можно использовать набор гиперпараметров и количество кластеров, обеспечивающих наивысшую точность. Но это невозможно для обучения без учителя из-за отсутствия основных истинных значений. Итак, что можно сделать для обучения без учителя, чтобы оценить и сравнить различные гиперпараметры и количество кластеров?

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

В этой короткой статье вводится значение инерции. Затем алгоритм кластеризации K-средних обучается на небольшом наборе данных с помощью Scikit-Learn. Оптимальное количество кластеров находится с использованием вычисленных значений инерции и метода изгиба, примененного к кривой инерции. И наконец, что не менее важно, в этой статье показано, как найти оптимальные гиперпараметры с помощью значения инерции. Код написан с использованием Python и Jupyter Notebook. Код можно найти на моей странице Github.

Инерция

Значение «Инерция» или «сумма квадратов внутри кластера» указывает на то, насколько когерентны различные кластеры. Уравнение 1 показывает формулу для вычисления значения инерции.

N - количество выборок в наборе данных, C - центр кластера. Таким образом, Inertia просто вычисляет квадрат расстояния от каждого образца в кластере до его центра и суммирует их. Этот процесс выполняется для каждого кластера и всех выборок в этом наборе данных. Чем меньше значение инерции, тем более когерентными будут различные кластеры. Когда добавляется столько кластеров, сколько выборок в наборе данных, значение инерции будет равно нулю. Итак, как найти оптимальное количество кластеров, используя значение инерции?

Для этого можно использовать так называемый метод локтя. Но давайте рассмотрим этот метод на примере.

Метод локтя для оптимального количества кластеров

Всегда лучше чему-то научиться, непосредственно применяя это на примере. Для этой цели набор данных с двумерными функциями создается с помощью функции Scikit-Learns make_blobs. На рисунке 1 показан код для создания этого набора данных, а на рисунке 2 показан график этого набора данных.

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

Давайте теперь обучим модель K-средних для разного количества кластеров и сохраним значение инерции для каждой обученной модели. После этого можно построить кривую инерции, чтобы использовать метод локтя для поиска оптимального количества кластеров. Код для этих шагов можно найти на рисунке 3. Рисунок 4 показывает получившуюся кривую инерции.

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

Итак, для этого примера оптимальное количество кластеров - три. На рисунке 5 показана визуализация трех различных кластеров.

Использование значения инерции для поиска оптимальных гиперпараметров

Значение инерции также можно использовать для поиска лучших гиперпараметров для неконтролируемого алгоритма K-средних. Одним из потенциальных гиперпараметров является метод инициализации. В Scikit-Learn есть две разные возможности. Один называется k-means ++, а другой - random. Но какую инициализацию использовать? Чтобы ответить на этот вопрос, можно обучить одну модель K-средних для каждой стратегии инициализации и сравнить ее значения инерции. Стратегия, ведущая к меньшему значению инерции, может затем использоваться как оптимальная стратегия. На рисунке 6 показан код для этой оценки, а на рисунке 7 показан фрейм данных с результатами.

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

Заключение

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