Как определить, достаточно ли данных «кластеризовано», чтобы алгоритмы кластеризации давали значимые результаты?


78

Как бы вы узнали, что ваши (высокоразмерные) данные демонстрируют достаточную кластеризацию, так что результаты kmeans или другого алгоритма кластеризации действительно значимы?

В частности, для алгоритма k-средних, насколько должно быть снижение дисперсии внутри кластера, чтобы фактические результаты кластеризации были значимыми (а не ложными)?

Должна ли кластеризация быть очевидной при построении размерно-уменьшенной формы данных, и являются ли результаты kmeans (или других методов) бессмысленными, если кластеризацию нельзя визуализировать?


1
Рукописные цифры делают хороший тест для кластеризации: можно было бы ожидать 10 хорошо разделенных кластеров, но это не показывает никакого колена при k = 10, по крайней мере в евклидовой метрике в 64d.
Денис


2
Этот вопрос в некоторой степени связан с вопросом о том, как проверить достоверность результатов кластеризации и как выбрать «лучший» метод. См. Например, stats.stackexchange.com/q/195456/3277 .
ttnphns

Ответы:


77

О k-означает, в частности, вы можете использовать статистику Gap. По сути, идея состоит в том, чтобы вычислить достоверность показателя кластеризации на основе средней дисперсии по сравнению с эталонным распределением для растущего числа кластеров. Более подробную информацию можно найти в оригинальной статье:

Tibshirani, R., Walther, G. и Hastie, T. (2001). Оценка количества кластеров в наборе данных с помощью статистики разрыва . JR Statist. Soc. B 63 (2): 411-423.

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

Если у вас нет представления о том, что вы ожидаете найти, если бы был только шум, хорошим подходом является использование повторной выборки и исследования устойчивости кластеров. Другими словами, повторите выборку ваших данных (с помощью начальной загрузки или добавив в них небольшой шум) и вычислите «близость» результирующих разделов, измеренную по сходству Жакара . Короче говоря, это позволяет оценить частоту, с которой подобные кластеры были восстановлены в данных. Этот метод легко доступен в пакете fpc R как clusterboot(). Он принимает в качестве входных данных либо необработанные данные, либо матрицу расстояний и позволяет применять широкий спектр методов кластеризации (иерархические, k-средние, нечеткие методы). Метод обсуждается в связанных ссылках:

Hennig, C. (2007) Кластерная оценка кластерной стабильности . Вычислительная статистика и анализ данных , 52, 258-271.

Хенниг, C. (2008) Точка растворения и надежность изоляции: критерии устойчивости для общих методов кластерного анализа . Журнал многомерного анализа , 99, 1154-1176.

Ниже приведена небольшая демонстрация с алгоритмом k-средних.

sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
            sim.xy(100, c(2.5,0), c(.4,.2)),
            sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
                       clustermethod=kmeansCBI,
                       krange=3, seed=15555)

Результаты весьма положительны в этом искусственном (и хорошо структурированном) наборе данных, поскольку ни один из трех кластеров ( krange) не был растворен по выборкам, и среднее кластерное сходство Жакара составляет> 0,95 для всех кластеров.

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

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

Конечно, вы можете распространить эту идею на любой индекс достоверности: выберите новую серию наблюдений с помощью начальной загрузки (с заменой), вычислите свою статистику (например, ширину силуэта, копенетическую корреляцию, гамму Хьюберта, в пределах суммы квадратов) для диапазона номера кластеров (например, от 2 до 10), повторите 100 или 500 раз и посмотрите на графическое поле вашей статистики как функцию от числа кластеров.

Вот что я получаю с тем же набором смоделированных данных, но используя иерархическую кластеризацию Уорда и учитывая копенетическую корреляцию (которая оценивает, насколько хорошо информация о расстоянии воспроизводится в результирующих разделах) и ширину силуэта (комбинированная мера, оценивающая внутрикластерную однородность и разделение кластеров).

Копенетическая корреляция колеблется от 0,6267 до 0,7511 с медианным значением 0,7031 (500 образцов начальной загрузки). Ширина силуэта кажется максимальной, когда мы рассматриваем 3 кластера (медиана 0,8408, диапазон 0,7371-0,8769).

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


Спасибо за этот ОЧЕНЬ информативный ответ! Похоже, кластерная загрузка именно то, что я ищу. Спасибо также за включение ссылок.
xuexue

1
Некоторые магические числа для интерпретации значений силуэта: stats.stackexchange.com/a/12923/12359
Франк Дернонкур

1
Какую команду вы использовали для построения этих диаграмм в GIF?
Трэвис Хитер,

2
@Travis Изображения были сохранены в виде отдельных файлов PNG, а затем преобразованы в анимированный GIF-файл с помощью ImageMagick . Смотрите также этот пост .
ЧЛ

10

Один из способов быстро визуализировать, достаточно ли кластеризованы данные для кластеризации, состоит в использовании t-распределенного стохастического встраивания соседей ( t-SNE ). Он проецирует данные в какое-то низкоразмерное пространство (например, 2D, 3D) и делает довольно хорошую работу по сохранению структуры кластера, если таковая имеется.

Например, набор данных MNIST :

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

Оливетти сталкивается с набором данных:

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


1
Есть ли способ применить лица (или любые изображения) в R?
Трэвис Хитер,

1
@TravisHeeter Я не знаю
Франк Дернонкур

4
Не кластеризируйте tSNE проецируемые данные. См., Например, этот ответ: stats.stackexchange.com/a/264647/7828
Anony-Mousse

9

Несомненно, способность визуально различать кластеры в значимом количестве измерений является сомнительным критерием полезности алгоритма кластеризации, особенно если это уменьшение размерности выполняется независимо от самой кластеризации (т. Е. В тщетной попытке выяснить, кластеризация будет работать).

На самом деле, методы кластеризации имеют наибольшее значение в нахождении кластеров, когда человеческий глаз / разум не может видеть кластеры.

Ответ прост: выполните кластеризацию, а затем выясните, работает ли она (с любым интересующим вас критерием, см. Также ответ @ Jeff).


1
Да, и кластеры не обязательно являются хорошими круглыми группами точек, что в основном и предполагает kmeans.
Уэйн

@chl Вы создали это анимированное изображение с помощью R?
Стефан Лоран

7

В любом случае, когда результаты значимы ? В частности, к-значит результаты?

Факт в том, что k-means оптимизирует определенную математическую статистику. Здесь нет «значимого», связанного с этим.

В частности, в данных больших измерений первый вопрос должен быть: евклидово расстояние все еще значимо ? Если нет, не используйте k-means. Евклидово расстояние имеет смысл в физическом мире, но оно быстро теряет смысл, когда у вас есть другие данные. В частности, когда вы искусственно преобразуете данные в векторное пространство, есть ли причина, почему они должны быть евклидовыми?

Если вы возьмете классический «старый верный» набор данных и запустите на нем k-means без нормализации, но с чистым евклидовым расстоянием, это уже не имеет смысла. EM, который фактически использует некоторую форму «локального кластера» расстояния Махаланобиса, будет работать намного лучше. В частности, он адаптируется к осям, имеющим очень разные масштабы.

Кстати, ключевым преимуществом k-means является то, что он на самом деле просто всегда разделяет данные, независимо от того, как они выглядят. Вы можете использовать k-средства для разделения равномерного шума на k кластеров . Можно утверждать, что, очевидно, кластеры k-средних не имеют смысла. Или можно принять это как: пользователь хотел разделить данные, чтобы минимизировать возведенные в квадрат евклидовы расстояния, не требуя, чтобы кластеры были «значимыми».


@ Anony-Mousse А вариант использования для «разделения равномерного шума на k кластеров»?
CodeFarmer

Здесь ничего нет. Дело в том, что k-means не заботится, он разделит единые данные на «кластеры», т. Е. Он создаст бессмысленные кластеры.
Anony-Mousse

6

Я только недавно начал использовать алгоритмы кластеризации, так что, надеюсь, кто-то более знающий может дать более полный ответ, но вот некоторые мысли:

«Значимый», как я уверен, вы знаете, очень субъективен. То, насколько кластеризация достаточно хороша, полностью зависит от того, зачем вам кластеризоваться. Если вы пытаетесь предсказать членство в группе, вполне вероятно, что любая кластеризация будет лучше, чем случайность (и не хуже), поэтому результаты должны быть в некоторой степени значимыми.

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

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

Я бы не сказал, что результаты k-средних не имеют смысла, если их нельзя визуализировать, но они, безусловно, привлекательны, когда кластеры визуально очевидны. Это, опять же, просто возвращает нас к вопросу: зачем вам нужно кластеризоваться и насколько вам нужно быть надежным? В конечном счете, это вопрос, на который вам нужно ответить в зависимости от того, как вы будете использовать данные.


3

Чтобы определить, имеет ли смысл кластеризация, вы можете запустить алгоритм подсчета количества кластеров и посмотреть, выводит ли он что-то больше 1.

kk

kk

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