Где вырезать дендрограмму?


61

Иерархическая кластеризация может быть представлена ​​дендрограммой. Вырезание дендрограммы на определенном уровне дает набор кластеров. Резка на другом уровне дает другой набор кластеров. Как бы вы выбрали, где вырезать дендрограмму? Есть ли что-то, что мы могли бы считать оптимальной точкой? Если я посмотрю на дендрограмму во времени, когда она меняется, я должен разрезать в той же точке?


Я тоже задумался над этой проблемой, но (к сожалению) пока не нашел убедительных ответов. Я думаю, что нет решения. Существуют пакеты R / BioC, такие как hopack(и другие), которые могут оценить количество кластеров, но это не отвечает на ваш вопрос.
Suncoolsu

В pvclustпакете для Rесть функции, которые выдают загрузочные p-значения для кластеров дендрограмм, что позволяет вам идентифицировать группы: is.titech.ac.jp/~shimo/prog/pvclust
Бен,

Полезный сайт с некоторыми примерами того, как это сделать на практике: intodatascience.com/…
Микко,

Ответы:


46

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

Несколько подсказок было дано в связанном вопросе: Какие критерии остановки для агломерационной иерархической кластеризации используются на практике? Я обычно использую визуальные критерии, например, графики силуэтов и некоторые числовые критерии, такие как индекс достоверности Данна, гамма Хьюберта, коэффициент G2 / G3 или скорректированный индекс Рэнда. По сути, мы хотим знать, насколько хорошо аппроксимируется исходная матрица расстояний в пространстве кластеров, поэтому также полезна мера копенетической корреляции . Я также использую k-средства с несколькими начальными значениями и статистикой разрыва ( зеркалом ), чтобы определить количество кластеров, минимизирующих SS. Согласие с иерархической кластеризацией Уорда дает представление о стабильности кластерного решения (вы можете использоватьmatchClasses()в пакете e1071 для этого).

Вы найдете полезные ресурсы в CRAN Task View Cluster , включая pvclust , fpc , clv и другие. Также стоит попробовать пакет clValid ( описанный в журнале статистического программного обеспечения ).

Теперь, если ваши кластеры меняются со временем, это немного сложнее; почему выбирают первое кластерное решение, а не другое? Ожидаете ли вы, что некоторые люди переходят из одного кластера в другой в результате основного процесса, развивающегося со временем?

Есть некоторые меры, которые пытаются сопоставить кластеры, которые имеют максимальное абсолютное или относительное перекрытие, как было предложено вам в предыдущем вопросе. Посмотрите на Сравнение кластеров - обзор от Вагнера и Вагнера.


12

На самом деле нет ответа. Это где-то между 1 и N.

Тем не менее, вы можете думать об этом с точки зрения прибыли.

Например, в маркетинге используется сегментация, которая очень похожа на кластеризацию.

Сообщение (скажем, реклама или письмо), предназначенное для каждого человека, будет иметь самый высокий уровень ответа. Общее сообщение, адаптированное к среднему значению, будет иметь самый низкий уровень ответа. Скажем, три сообщения, предназначенные для трех сегментов, будут где-то посередине. Это сторона дохода.

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

Скажем, оплата автора за написание собственного сообщения стоит 1000, два - 2000 и так далее.

Скажем, используя одно сообщение, ваш доход составит 5000. Если вы разделили своих клиентов на 2 сегмента и написали индивидуальные сообщения для каждого сегмента, ваш ответ будет выше. Скажем, выручка составляет 7500. С тремя сегментами, немного более высоким уровнем отклика, а ваши доходы - 9000. Еще один сегмент, и вы на 9500.

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

Segments  Revenue  Cost  Profit
1         5000     1000  4000
2         7500     2000  5500
3         9000     3000  6000
4         9500     4000  5500

Это интересная перспектива!
AndyF

5

Возможно, одним из самых простых методов было бы графическое представление, в котором ось X - это количество групп, а ось Y - любая метрика оценки как расстояние или сходство. На этом графике вы обычно можете наблюдать две дифференцированные области, являющиеся значением оси X в «колене» линии «оптимальным» числом кластеров.

Есть также некоторые статистические данные, которые могут помочь в выполнении этой задачи: критерии Губерта гамма, псевдо-t2, псевдо-F или кубическая кластеризация (CCC) и другие.


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


3

В иерархической кластеризации количество выходных разделов - это не только горизонтальные срезы, но и не горизонтальные срезы, которые определяют окончательную кластеризацию. Таким образом, это может рассматриваться как третий критерий, кроме 1. метрики расстояния и 2. критерия сцепления . http://en.wikipedia.org/wiki/Hierarchical_clustering

Упомянутый вами критерий - это третий тип, который является своего рода ограничением оптимизации для набора разделов в иерархии. Это формально представлено в этой статье и приведены примеры сегментации!

http://www.esiee.fr/~kiranr/ClimbingECCV2012_Preprint.pdf


1

Как говорилось в других ответах, это определенно субъективно и зависит от того, какую гранулярность вы пытаетесь изучить. Для общего подхода я сократил этот, чтобы дать мне 2 кластера и 1 выброс. Затем я бы сосредоточился на двух кластерах, чтобы увидеть, было ли между ними что-то существенное.

# Init
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

# Load data
from sklearn.datasets import load_diabetes

# Clustering
from scipy.cluster.hierarchy import dendrogram, fcluster, leaves_list
from scipy.spatial import distance
from fastcluster import linkage # You can use SciPy one too

%matplotlib inline

# Dataset
A_data = load_diabetes().data
DF_diabetes = pd.DataFrame(A_data, columns = ["attr_%d" % j for j in range(A_data.shape[1])])

# Absolute value of correlation matrix, then subtract from 1 for disimilarity
DF_dism = 1 - np.abs(DF_diabetes.corr())

# Compute average linkage
A_dist = distance.squareform(DF_dism.as_matrix())
Z = linkage(A_dist,method="average")

# Dendrogram
D = dendrogram(Z=Z, labels=DF_dism.index, color_threshold=0.7, leaf_font_size=12, leaf_rotation=45)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.