Поиск…


Вступление

Пакет stats предоставляет функцию hclust для выполнения иерархической кластеризации.

замечания

Помимо hclust, доступны другие методы, см. Представление пакета CRAN для кластеризации .

Пример 1 - Основное использование hclust, отображение дендрограммы, кластеры сюжетов

Библиотека кластера содержит данные ruspini - стандартный набор данных для иллюстрации кластерного анализа.

    library(cluster)                ## to get the ruspini data
    plot(ruspini, asp=1, pch=20)    ## take a look at the data

Данные Ruspini

hclust ожидает матрицу расстояния, а не исходные данные. Мы вычисляем дерево, используя параметры по умолчанию и отображаем его. Параметр зависания выравнивает все листья дерева вдоль базовой линии.

    ruspini_hc_defaults <- hclust(dist(ruspini))
    dend <- as.dendrogram(ruspini_hc_defaults)
    if(!require(dendextend)) install.packages("dendextend"); library(dendextend)
    dend <- color_branches(dend, k = 4) 
    plot(dend)

введите описание изображения здесь

Вырежьте дерево, чтобы дать четыре кластера и поменять данные, окрашивающие точки кластером. k - желаемое количество кластеров.

    rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
    plot(ruspini, pch=20, asp=1, col=rhc_def_4)

Данные Ruspini - первая кластеризация

Эта кластеризация немного странная. Мы можем получить лучшую кластеризацию, сначала масштабируя данные.

    scaled_ruspini_hc_defaults = hclust(dist(scale(ruspini)))
    srhc_def_4 = cutree(scaled_ruspini_hc_defaults,4)
    plot(ruspini, pch=20, asp=1, col=srhc_def_4)

Масштабируемые данные Руспини - сгруппированные

Показатель разницы по умолчанию для сравнения кластеров «завершен». Вы можете указать другую меру с помощью параметра метода.

    ruspini_hc_single = hclust(dist(ruspini), method="single")

Пример 2 - hclust и outliers

С иерархической кластеризацией выбросы часто отображаются как одноточечные кластеры.

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

    set.seed(656)
    x = c(rnorm(150, 0, 1), rnorm(150,9,1), rnorm(150,4.5,1))
    y = c(rnorm(150, 0, 1), rnorm(150,0,1), rnorm(150,5,1))
    XYdf = data.frame(x,y)
    plot(XYdf, pch=20)

Данные испытаний

Создайте структуру кластера, разделите его на три кластера.

    XY_sing = hclust(dist(XYdf), method="single")
    XYs3 = cutree(XY_sing,k=3)
    table(XYs3)
    XYs3
      1   2   3 
    448   1   1 

hclust обнаружил два выброса и поместил все остальное в один большой кластер. Чтобы получить «реальные» кластеры, вам может потребоваться установить k выше.

    XYs6 = cutree(XY_sing,k=6)
    table(XYs6)
    XYs6
      1   2   3   4   5   6 
    148 150   1 149   1   1 
    plot(XYdf, pch=20, col=XYs6)

Тестовые данные сгруппированы - 3 Отклонения и 3 больших кластера

В этой статье StackOverflow есть некоторые рекомендации о том, как выбрать количество кластеров, но помните об этом поведении в иерархической кластеризации.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow