k- кластеризация средств

Эта тема обеспечивает, введение в k - означает кластеризироваться и пример, который использует функцию Statistics and Machine Learning Toolbox™ kmeans найти лучшее решение по кластеризации для набора данных.

Введение в k - означает кластеризироваться

k- кластеризация является методом разделения. Функциональный kmeans данные о разделах в k, взаимоисключающие кластеры и возвращают индекс кластера, которому это присваивает каждое наблюдение. kmeans обработки каждое наблюдение в ваших данных как объект, который имеет расположение на пробеле. Функция находит раздел, в котором объекты в каждом кластере максимально друг близко к другу, и максимально далеки от объектов в других кластерах. Можно выбрать метрику расстояния, чтобы использовать с kmeans на основе атрибутов ваших данных. Как много методов кластеризации, k - означает кластеризироваться, требует, чтобы вы задали количество кластеров k перед кластеризацией.

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

Каждый кластер в k - средний раздел состоит из членских объектов и центроида (или центр). В каждом кластере, kmeans минимизирует сумму расстояний между центроидом и всеми членскими объектами кластера. kmeans вычисляет центроидные кластеры по-другому для поддерживаемых метрик расстояния. Для получения дополнительной информации смотрите 'Distance'.

Можно управлять деталями аргументов пары "имя-значение" использования минимизации, доступных для kmeans; например, можно задать начальные значения кластерных центроидов и максимальное количество итераций для алгоритма. По умолчанию, kmeans использует k - средние значения ++ алгоритм, чтобы инициализировать кластерные центроиды и Евклидову метрику расстояния в квадрате, чтобы определить расстояния.

Когда выполнение k - означает кластеризироваться, примените эти лучшые методы:

  • Сравните k - означает решения по кластеризации для различных значений k определять оптимальное количество кластеров для ваших данных.

  • Оцените решения по кластеризации путем исследования графиков контура и значений контура. Можно также использовать evalclusters функция, чтобы оценить решения по кластеризации на основе критериев, таких как значения разрыва, значения контура, значения индекса Дэвиса-Булдина и Calinski-Harabasz индексирует значения.

  • Реплицируйте кластеризацию от различных случайным образом выбранных центроидов и возвратите решение с самой низкой полной суммой расстояний среди всего реплицирования.

Сравните Решения по кластеризации k-средних значений

Этот пример исследует k-средних значений, кластеризирующихся на четырехмерном наборе данных. Пример показывает, как определить правильное количество кластеров для набора данных при помощи графиков контура и значений, чтобы анализировать результаты различных решений по кластеризации k-средних значений. Пример также показывает, как использовать 'Replicates' аргумент пары "имя-значение", чтобы протестировать конкретное количество возможных решений и возвратить то с самой низкой полной суммой расстояний.

Загрузите набор данных

Загрузите kmeansdata набор данных.

rng('default')  % For reproducibility
load('kmeansdata.mat')
size(X)
ans = 1×2

   560     4

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

Создайте кластеры и исследуйте разделение

Разделите набор данных в три кластера с помощью кластеризации k-средних значений. Задайте метрику расстояния городского квартала и используйте k-средних значений по умолчанию ++ алгоритм для кластерной центральной инициализации. Используйте 'Display' аргумент пары "имя-значение", чтобы распечатать итоговую сумму расстояний для решения.

[idx3,C,sumdist3] = kmeans(X,3,'Distance','cityblock','Display','final');
Replicate 1, 7 iterations, total sum of distances = 2459.98.
Best total sum of distances = 2459.98

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

График контура отображает меру того, как близко каждая точка в одном кластере к точкам в соседних кластерах. Эта мера лежит в диапазоне от 1 (указание на точки, которые очень удалены от соседних кластеров) до 0 (точки, которые не находятся отчетливо в одном кластере, или другой) к –1 (точки, которые, вероятно, присвоены неправильному кластеру). silhouette возвращает эти значения в его первом выходе.

Создайте график контура из idx3. Задайте 'cityblock' для метрики расстояния, чтобы указать, что кластеризация k-средних значений основана на сумме абсолютных разностей.

[silh3,h] = silhouette(X,idx3,'cityblock');
xlabel('Silhouette Value')
ylabel('Cluster')

График контура показывает, что большинство точек во втором кластере имеет большое значение контура (больше, чем 0,6), указывая, что кластер несколько разделяется от соседних кластеров. Однако третий кластер содержит много точек с низкими значениями контура, и первые и третьи кластеры содержат несколько точек с отрицательными величинами, указывая, что эти два кластера не хорошо разделяются.

Видеть если kmeans может найти лучшую группировку данных, увеличить число кластеров к четыре. Распечатайте информацию о каждой итерации при помощи 'Display' аргумент пары "имя-значение".

idx4 = kmeans(X,4,'Distance','cityblock','Display','iter');
  iter	 phase	     num	         sum
     1	     1	     560	     1792.72
     2	     1	       6	      1771.1
Best total sum of distances = 1771.1

Создайте график контура для этих четырех кластеров.

[silh4,h] = silhouette(X,idx4,'cityblock');
xlabel('Silhouette Value')
ylabel('Cluster')

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

Вычислите средние значения контура.

cluster3 = mean(silh3)
cluster3 = 0.5352
cluster4 = mean(silh4)
cluster4 = 0.6400

Среднее значение контура этих четырех кластеров выше, чем среднее значение этих трех кластеров. Эти значения поддерживают заключение, представленное в графиках контура.

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

idx5 = kmeans(X,5,'Distance','cityblock','Display','final');
Replicate 1, 7 iterations, total sum of distances = 1647.26.
Best total sum of distances = 1647.26
[silh5,h] = silhouette(X,idx5,'cityblock');
xlabel('Silhouette Value')
ylabel('Cluster')

mean(silh5)
ans = 0.5721

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

Обратите внимание на то, что сумма расстояний уменьшается как количество увеличений кластеров. Например, сумма расстояний уменьшается с 2459.98 к 1771.1 к 1647.26 когда количество кластеров увеличивается от 3 до 4 до 5. Поэтому сумма расстояний не полезна для определения оптимального количества кластеров.

Избегайте локальных минимумов

По умолчанию, kmeans начинает процесс кластеризации с помощью случайным образом выбранного набора начальных центроидных местоположений. kmeans алгоритм может сходиться к решению, которое является локальным (неглобальным) минимумом; то есть, kmeans может разделить данные, таким образом, что перемещение любой одной точки к различному кластеру увеличивает полную сумму расстояний. Однако как со многими другими типами числовых минимизаций, решение, что kmeans достигает иногда зависит от начальных точек. Поэтому другие решения (локальные минимумы), которые имеют более низкие полные суммы расстояний, могут существовать для данных. Можно использовать 'Replicates' аргумент пары "имя-значение", чтобы протестировать различные решения. Когда вы указываете, что больше чем один реплицирует, kmeans повторяет, что процесс кластеризации, начинающий с различных случайным образом выбранных центроидов для каждого, реплицирует, и возвращает решение с самой низкой полной суммой расстояний среди всего реплицирования.

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

[idx4,cent4,sumdist] = kmeans(X,4,'Distance','cityblock', ...
                       'Display','final','Replicates',5);               
Replicate 1, 2 iterations, total sum of distances = 1771.1.
Replicate 2, 3 iterations, total sum of distances = 1771.1.
Replicate 3, 3 iterations, total sum of distances = 1771.1.
Replicate 4, 6 iterations, total sum of distances = 2300.23.
Replicate 5, 2 iterations, total sum of distances = 1771.1.
Best total sum of distances = 1771.1

В реплицируют 4, kmeans находит локальный минимум. Поскольку каждый реплицирует, начинается с различного случайным образом выбранного набора начальных центроидов, kmeans иногда находит больше чем один локальный минимум. Однако конечное решение, что kmeans возвраты являются тем с самой низкой полной суммой расстояний по всем, реплицирует.

Найдите общее количество сумм в кластере расстояний точки к центроиду для конечного решения возвращенным kmeans.

sum(sumdist)
ans = 1.7711e+03

Смотрите также

|

Похожие темы