В этой статье мы собираемся обсудить пример К-средних. Алгоритм K-Means — это простой алгоритм, способный кластеризовать данные всего за несколько итераций. Если у вас недостаточно знаний об основах K-средних, взгляните на статью Кори Маклина.

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

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

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

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

После этого мы используем цикл While для выполнения операции кластеризации. Мы используем евклидово расстояние для элементов кластера на основе выбранных центроидов. В цикле for делаем все расчеты. Если точка ближе к центру 1, чем к центру 2, мы назначаем точку Кластер 1, в противном случае мы назначаем точку Кластер 2.

В конце цикла for мы вычисляем новые центроиды. Затем новые центроиды и старые центроиды сравниваются в условии «если».

Если центроиды становятся стабильными, мы заканчиваем цикл while с помощью break, в противном случае алгоритм продолжается.

В продолжении алгоритма определяются новые центры и создаются новые пустые кластеры. Новые пустые кластеры заменяются старыми.

Если мы выберем начальные центроиды из точки [0] и точки [1], расчет будет завершен в два этапа, и оба кластера будут состоять из пяти членов.

Начальные центроиды: [-12 12] [11 3]

Центроиды изменились: [-10. 3,6] [ 6,8 -3,4]

Кластер_1:
[[-12 12]
[ 1 14]
[-7 5]
[-10 -5]
[-22 -8]]

Кластер_2:
[[ 11 3]
[ 16 9]
[ 9 0]
[-2 -6]
[ 0 -23]]

Кластеризация успешно завершена
Центроиды: [-10. 3,6] [ 6,8 -3,4]

Кластер_1:
[[-12 12]
[ 1 14]
[-7 5]
[-10 -5]
[-22 -8]]

Кластер_2:
[[ 11 3]
[ 16 9]
[ 9 0]
[-2 -6]
[ 0 -23]]

Если мы выберем начальные центроиды из точки [0] и точки [8], расчет завершается в четыре этапа. Кластер 1 состоит из шести членов, а кластер 2 состоит из четырех членов.

Начальные центроиды: [-12 12] [-10 -5]

Центроиды изменились: [-0,5 10. ] [-2,33333333 -6,5 ]

Кластер_1:
[[-12 12]
[ 16 9]
[ 1 14]
[ -7 5]]

Кластер_2:
[[ 11 3]
[ 9 0]
[-2 -6]
[ 0 -23]
[-10 -5]
[-22 -8]]

Центроиды изменились: [1.8 8.6] [-5. -8,4]

Кластер_1:
[[-12 12]
[ 11 3]
[ 16 9]
[ 1 14]
[ -7 5]]

Кластер_2:
[[ 9 0]
[-2 -6]
[ 0 -23]
[-10 -5]
[-22 -8] ]

Центроиды изменились: [3. 7,16666667] [-8,5-10,5]

Кластер_1:
[[-12 12]
[ 11 3]
[ 16 9]
[ 1 14]
[ 9 0]
[ - 7 5]]

Кластер_2:
[[ -2 -6]
[ 0 -23]
[-10 -5]
[-22 -8]]

Кластеризация успешно завершена
Centroids: [3. 7,16666667] [-8,5-10,5]

Кластер_1:
[[-12 12]
[ 11 3]
[ 16 9]
[ 1 14]
[ 9 0]
[ - 7 5]]

Кластер_2:
[[ -2 -6]
[ 0 -23]
[-10 -5]
[-22 -8]]

Окончательно:

В этом примере мы используем жесткую кластеризацию вместо мягкой кластеризации и применяем простой алгоритм K-средних с выбранными начальными центроидами. Можно улучшить кластеризацию, используя различные алгоритмы, такие как «K-Means++», который был предложен в 2006 году.

Я надеюсь, что эта статья была полезной. Как говорит г-н Чебечи, всем удачи.