Алгоритмы кластеризации - алгоритм среднего сдвига

Введение в алгоритм среднего сдвига

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

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

Разница между алгоритмом K-Means и Mean-Shift состоит в том, что позже не нужно указывать количество кластеров заранее, потому что количество кластеров будет определяться алгоритмом по данным.

Работа алгоритма среднего сдвига

Мы можем понять работу алгоритма кластеризации среднего сдвига с помощью следующих шагов:

  • Step 1 - Во-первых, начните с точек данных, назначенных собственному кластеру.

  • Step 2 - Затем этот алгоритм вычислит центроиды.

  • Step 3 - На этом шаге будет обновлено расположение новых центроидов.

  • Step 4 - Теперь процесс будет повторен и перемещен в область более высокой плотности.

  • Step 5 - Наконец, он будет остановлен, как только центроиды достигнут положения, из которого он не может двигаться дальше.

Реализация на Python

Это простой пример, чтобы понять, как работает алгоритм Mean-Shift. В этом примере мы сначала сгенерируем 2D-набор данных, содержащий 4 разных капли, а затем применим алгоритм Mean-Shift, чтобы увидеть результат.

%matplotlib inline
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[3,3,3],[4,5,5],[3,10,10]]
X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
plt.scatter(X[:,0],X[:,1])
plt.show()
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
    plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
    marker=".",color='k', s=20, linewidths = 5, zorder=10)
plt.show()

Вывод

[[ 2.98462798 9.9733794 10.02629344]
[ 3.94758484 4.99122771 4.99349433]
[ 3.00788996 3.03851268 2.99183033]]
Estimated clusters: 3

Преимущества и недостатки

Преимущества

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

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

  • Он также может моделировать сложные кластеры невыпуклой формы.

  • Ему нужен только один параметр с именем bandwidth, который автоматически определяет количество кластеров.

  • Нет такой проблемы с локальными минимумами, как в K-средних.

  • Никаких проблем не возникает из-за выбросов.

Недостатки

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

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

  • У нас нет прямого контроля над количеством кластеров, но в некоторых приложениях нам нужно определенное количество кластеров.

  • Он не может различать значимые и бессмысленные режимы.