silhouette

Описание

пример

silhouette(X,clust) строит графики силуэтов кластера для матрицы n -by p входных данных X, учитывая назначение кластера clust каждой точки (наблюдения) в X.

пример

silhouette(X,clust,Distance) строит графики силуэтов с помощью метрики расстояния между точками, указанной в Distance.

пример

silhouette(X,clust,Distance,DistParameter) принимает одно или несколько дополнительных значений параметров метрики расстояния при задании Distance как пользовательский указатель на функцию расстояния @ distfun который принимает дополнительные значения параметров.

пример

s = silhouette(___) возвращает значения силуэта в s для любой комбинации входных аргументов в предыдущих синтаксисах без построения графиков силуэтов кластера.

пример

[s,h] = silhouette(___) строит графики силуэтов и возвращает указатель на рисунок h в дополнение к значениям силуэта в s.

Примеры

свернуть все

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

Сгенерируйте случайные выборочные данные.

rng('default')  % For reproducibility
X = [randn(10,2)+3;randn(10,2)-3];

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

scatter(X(:,1),X(:,2));
title('Randomly Generated Data');

Figure contains an axes. The axes with title Randomly Generated Data contains an object of type scatter.

График поля точек показывает, что данные, по-видимому, разделяются на два кластера равного размера.

Разделите данные на два кластера с помощью kmeans с квадратной метрикой Евклидова расстояния по умолчанию.

clust = kmeans(X,2);

clust содержит индексы кластеров данных.

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

silhouette(X,clust)

Figure contains an axes. The axes contains an object of type bar.

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

Создать график силуэта из кластеризованных данных с помощью метрики Евклидова расстояния.

silhouette(X,clust,'Euclidean')

Figure contains an axes. The axes contains an object of type bar.

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

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

Сгенерируйте случайные выборочные данные.

rng('default')  % For reproducibility
X = [randn(10,2)+1;randn(10,2)-1];

Группируйте данные в X на основе суммы абсолютных различий в расстоянии при помощи kmeans.

clust = kmeans(X,2,'distance','cityblock');

clust содержит индексы кластеров данных.

Вычислите значения силуэта из кластеризованных данных. Задайте метрику расстояния следующим 'cityblock' чтобы указать, что kmeans кластеризация основана на сумме абсолютных различий.

s = silhouette(X,clust,'cityblock')
s = 20×1

    0.0816
    0.5848
    0.1906
    0.2781
    0.3954
    0.4050
    0.0897
    0.5416
    0.6203
    0.6664
      ⋮

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

Сгенерируйте случайные выборочные данные.

rng('default'); % For reproducibility
X = [randn(10,2)+3;randn(10,2)-3];

Группируйте данные в X использование kmeans с квадратной метрикой Евклидова расстояния по умолчанию.

clust = kmeans(X,2);

Найдите значения силуэта и создайте график силуэта из кластеризованных данных с помощью метрики Евклидова расстояния.

[s,h] = silhouette(X,clust,'Euclidean')

Figure contains an axes. The axes contains an object of type bar.

s = 20×1

    0.6472
    0.7241
    0.5682
    0.7658
    0.7864
    0.6397
    0.7253
    0.7783
    0.7054
    0.7442
      ⋮

h = 
  Figure (1) with properties:

      Number: 1
        Name: ''
       Color: [1 1 1]
    Position: [360 502 560 420]
       Units: 'pixels'

  Show all properties

Расстояние хи-квадрат между J-мерные точки x и z есть

χ(x,z)=j=1Jwj(xj-zj)2,

где wj - вес, сопоставленный с размерностью j.

Установите веса для каждой размерности и задайте функцию хи-квадрат расстояния. Функция расстояния должна:

  • Примите в качестве входных параметров матрицу входных данных n на p X, одна строка X (например, x) и параметр масштабирования (или веса) w.

  • Вычислите расстояние от x в каждую строку X.

  • Верните вектор длины n. Каждый элемент вектора является расстоянием между наблюдением, соответствующим x и наблюдения, соответствующие каждой строке X.

w = [0.4; 0.6]; % Set arbitrary weights for illustration
chiSqrDist = @(x,Z,w)sqrt((bsxfun(@minus,x,Z).^2)*w);

Найдите значения силуэта из кластеризованных данных с помощью пользовательской метрики расстояния chiSqrDist.

s1 = silhouette(X,clust,chiSqrDist,w)
s1 = 20×1

    0.6288
    0.7239
    0.6244
    0.7696
    0.7957
    0.6688
    0.7386
    0.7865
    0.7223
    0.7572
      ⋮

Установите вес для обеих размерностей равным 1, чтобы использовать chiSqrDist как метрика Евклидова расстояния. Найдите значения силуэта и проверьте, что они совпадают со значениями в s.

w2 = [1; 1];
s2 = silhouette(X,clust,chiSqrDist,w2);
AreValuesEqual = isequal(s2,s)
AreValuesEqual = logical
   1

Значения силуэта одинаковы в s и s2.

Входные параметры

свернуть все

Входные данные, заданные как числовая матрица размера n -by- p. Строки соответствуют точкам, а столбцы - координатам.

Типы данных: single | double

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

silhouette лечит NaNs и пустые значения в clust как отсутствующие значения и игнорирует соответствующие строки X.

Типы данных: single | double | char | string | cell | categorical

Метрика расстояния, заданная как вектор символов, строковый скаляр или указатель на функцию, как описано в этой таблице.

МетрикаОписание
'Euclidean'

Евклидово расстояние

'sqEuclidean'

Квадратное Евклидово расстояние (по умолчанию)

'cityblock'

Сумма абсолютных различий

'cosine'

Один минус косинус включенного угла между точками (рассматривается как векторы)

'correlation'

Один минус корреляция выборки между точками (рассматривается как последовательности значений)

'Hamming'

Процент различных координат

'Jaccard'

Процент ненулевых координат, которые различаются

ВекторЧисленный вектор-строка с парными расстояниями в форме, созданной pdist функция. X не используется в этом случае и может быть безопасно установлено на [].
distfun

Пользовательский указатель на функцию расстояния. Функция расстояния имеет вид

function D = distfun(X0,X,DistParameter)
% calculation of distance
...
где

  • X0 является 1-by - вектор p содержащий одну точку (наблюдение) матрицы входных данных X.

  • X является n -by - p матрицей точек.

  • DistParameter представляет одно или несколько дополнительных значений параметров, характерных для @ distfun.

  • D является n -by- 1 вектор расстояний, и D(k) - расстояние между наблюдениями X0 и X(k,:).

Для получения дополнительной информации см. «Метрики расстояния».

Пример: 'cosine'

Типы данных: char | string | function_handle | single | double

Метрическое значение параметров расстояния, заданное как положительная скалярная величина, числовой вектор или числовая матрица. Этот аргумент действителен только, когда вы задаете пользовательский указатель на функцию расстояния @ distfun который принимает одно или несколько значений параметров в дополнение к входным параметрам X0 и X.

Пример: silhouette(X,clust,distfun,p1,p2) где p1 и p2 являются значениями параметров дополнительной метрики расстояния для @ distfun

Типы данных: single | double

Выходные аргументы

свернуть все

Значения силуэта, возвращенные как n -by- 1 вектор значений в диапазоне от –1 на 1. Значение силуэта измеряет, насколько точка похожа на точки в собственном кластере, если сравнивать с точками в других кластерах. Значения варьируются от –1 на 1. Высокое значение силуэта указывает, что точка хорошо соответствует своему собственному кластеру и плохо соответствует другим кластерам.

Типы данных: single | double

Фигура, возвращенный в виде скаляра. Можно использовать указатель на рисунок для запроса и изменения свойств рисунка. Для получения дополнительной информации см. раздел Свойств фигуры».

Подробнее о

свернуть все

Значение силуэта

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

Значение силуэта Si для i1я точка определяется как

Si = (bi-ai)/ max(ai,bi)

где ai - среднее расстояние от i1й пункт других точек в том же кластере, что и i, и bi - минимальное среднее расстояние от i1я точка к точкам в другом кластере, минимизированная по кластерам.

Значение силуэта находится в диапазоне от –1 на 1. Высокое значение силуэта указывает, что i хорошо соответствует своему собственному кластеру и плохо соответствует другим кластерам. Если большинство точек имеют высокое значение силуэта, то подходит решение кластеризации. Если многие точки имеют низкое или отрицательное значение силуэта, то решение кластеризации может иметь слишком много или слишком мало кластеров. Можно использовать значения силуэта в качестве критерия оценки кластеризации с любой метрикой расстояния.

Ссылки

[1] Кауфман Л., и П. Дж. Руссью. Поиск групп в данных: введение в кластерный анализ. Hoboken, NJ: John Wiley & Sons, Inc., 1990.

Представлено до R2006a