exponenta event banner

силуэт

Силуэтный участок

Описание

пример

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-by-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 для iтретья точка определяется как

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

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

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

Ссылки

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

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