Я экспериментирую с классификацией данных по группам. Я довольно новичок в этой теме, и пытаюсь понять вывод некоторых из анализа.
Используя примеры из Quick-R , предлагается несколько R
пакетов. Я попытался использовать два из этих пакетов ( fpc
с помощью kmeans
функции и mclust
). Один из аспектов этого анализа, который я не понимаю, - это сравнение результатов.
# comparing 2 cluster solutions
library(fpc)
cluster.stats(d, fit1$cluster, fit2$cluster)
Я прочитал соответствующие части fpc
руководства и до сих пор не ясно, к чему я должен стремиться. Например, это результат сравнения двух разных подходов кластеризации:
$n
[1] 521
$cluster.number
[1] 4
$cluster.size
[1] 250 119 78 74
$diameter
[1] 5.278162 9.773658 16.460074 7.328020
$average.distance
[1] 1.632656 2.106422 3.461598 2.622574
$median.distance
[1] 1.562625 1.788113 2.763217 2.463826
$separation
[1] 0.2797048 0.3754188 0.2797048 0.3557264
$average.toother
[1] 3.442575 3.929158 4.068230 4.425910
$separation.matrix
[,1] [,2] [,3] [,4]
[1,] 0.0000000 0.3754188 0.2797048 0.3557264
[2,] 0.3754188 0.0000000 0.6299734 2.9020383
[3,] 0.2797048 0.6299734 0.0000000 0.6803704
[4,] 0.3557264 2.9020383 0.6803704 0.0000000
$average.between
[1] 3.865142
$average.within
[1] 1.894740
$n.between
[1] 91610
$n.within
[1] 43850
$within.cluster.ss
[1] 1785.935
$clus.avg.silwidths
1 2 3 4
0.42072895 0.31672350 0.01810699 0.23728253
$avg.silwidth
[1] 0.3106403
$g2
NULL
$g3
NULL
$pearsongamma
[1] 0.4869491
$dunn
[1] 0.01699292
$entropy
[1] 1.251134
$wb.ratio
[1] 0.4902123
$ch
[1] 178.9074
$corrected.rand
[1] 0.2046704
$vi
[1] 1.56189
Мой основной вопрос здесь состоит в том, чтобы лучше понять, как интерпретировать результаты этого кластерного сравнения.
Ранее я спрашивал больше о влиянии масштабирования данных и вычисления матрицы расстояний. Однако Мариана Соферфер ответила на это четко, и я просто реорганизую свой вопрос, чтобы подчеркнуть, что меня интересует интерпретация моего вывода, представляющего собой сравнение двух разных алгоритмов кластеризации.
Предыдущая часть вопроса : если я делаю кластеризацию любого типа, всегда ли мне нужно масштабировать данные? Например, я использую функцию dist()
в моем масштабированном наборе данных в качестве входных данных для cluster.stats()
функции, однако я не до конца понимаю, что происходит. Я читал о dist()
здесь, и это заявляет, что:
эта функция вычисляет и возвращает матрицу расстояний, вычисленную с использованием указанной меры расстояния, чтобы вычислить расстояния между строками матрицы данных.
источник
Ответы:
Сначала позвольте мне сказать вам, что я не собираюсь объяснять точно все меры здесь, но я собираюсь дать вам представление о том, как сравнить, насколько хороши методы кластеризации (предположим, мы сравниваем 2 метода кластеризации с одинаковым числом кластеров).
Это две наиболее часто используемые метрики. Проверьте эти ссылки, чтобы понять, что они означают:
Чтобы лучше понять показатели выше, проверьте это .
Затем вам следует прочитать руководство по библиотеке и функциям, которые вы используете, чтобы понять, какие показатели представляют каждый из них, или, если они не включены, попытайтесь найти значение включенного. Тем не менее, я не стал бы беспокоиться и придерживаться тех, которые я здесь изложил.
Давайте продолжим с вопросами, которые вы задали:
Функции расстояния вычисляют все расстояния от одной точки (экземпляра) до другой. Наиболее распространенная мера расстояния - евклидова, поэтому, например, давайте предположим, что вы хотите измерить расстояние от экземпляра 1 до экземпляра 2 (предположим, у вас есть только 2 экземпляра для простоты). Также давайте предположим, что каждый экземпляр имеет 3 значения
(x1, x2, x3)
,I1=0.3, 0.2, 0.5
иI2=0.3, 0.3, 0.4
поэтому евклидово расстояние от I1 и I2 будет:,sqrt((0.3-0.2)^2+(0.2-0.3)^2+(0.5-0.4)^2)=0.17
следовательно, матрица расстояний приведет к:Обратите внимание, что матрица расстояний всегда симметрична.
Евклидова формула расстояния не единственная, которая существует. Есть много других расстояний, которые можно использовать для расчета этой матрицы. Проверьте, например, в Википедии Manhattain Distance и как его рассчитать. В конце страницы Википедии о Евклидовом расстоянии (где вы также можете проверить его формулу) вы можете проверить, какие существуют другие расстояния.
источник
Я думаю, что лучшим показателем качества для кластеризации является предположение о кластере, как оно дано Сигером в Обучении с помеченными и немаркированными данными :
Да, это сводит всю идею центроидов и центров вниз. В конце концов, это довольно произвольные понятия, если вы думаете о том, что ваши данные могут лежать в нелинейном подмногообразии пространства, в котором вы фактически работаете.
Вы можете легко создать синтетический набор данных, в котором модели смесей будут разбиты. Например , этот: .
Короче говоря: я бы оценил качество алгоритма кластеризации минимаксным способом. Лучший алгоритм кластеризации - это тот, который минимизирует максимальное расстояние от точки до ближайшего соседа того же кластера, в то время как он максимизирует минимальное расстояние от точки до ближайшего соседа от другого кластера.
Вы также можете быть заинтересованы в Непараметрический алгоритм теоретической кластеризации информации .
источник
x<-rnorm(N);rnorm(N)->y
), разделенное на 3 части по r (одна из которых удалена).