Точность измерения в иерархической кластеризации (одиночная ссылка) в R - PullRequest
0 голосов
/ 01 февраля 2020

Как измерить точность в иерархической кластеризации (одиночная ссылка) в R с 2 кластерами? Вот мой код:

> dcdata = read.csv("kkk.txt")
> target = dcdata[,3]
> dcdata = dcdata [,1:2]
> d = dist(dcdata)
> hc_single = hclust(d,method="single")
> plot(hc_single)
> clusters =cutree(hc_single, k=2)
> print(clusters)

Спасибо!

1 Ответ

1 голос
/ 02 февраля 2020

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

data = iris
target = ifelse(data$Species=="setosa","setosa","others")
table(target)
others setosa 
   100     50

data = data[,1:4]
d = dist(data)
hc_single = hclust(d,method="single")
plot(hc_single)

enter image description here

Похоже, они являются двумя основными кластерами. Теперь мы пытаемся увидеть, как распределяются цели:

library(dendextend)
dend <- as.dendrogram(hc_single)
COLS = c("turquoise","orange")
names(COLS) = unique(target)
dend <- color_labels(dend, col = COLS[target[labels(dend)]])
plot(dend) 

enter image description here

Теперь, как и то, что вы сделали, мы получаем кластеры,

clusters =cutree(hc_single, k=2)
table(clusters,target)

            target
    clusters others setosa
           1      0     50
           2    100      0

Вы получаете почти идеальное разделение. Все точки данных в кластере 1 являются сетозами, а все в кластере 2 не являются сетозами. Таким образом, вы можете думать об этом как о 100% точности, но я буду осторожен с использованием этого термина.

Вы можете приблизительно рассчитать совпадение следующим образом:

Majority_class = tapply(factor(target),clusters,function(i)names(sort(table(i)))[2])

Это говорит вам для каждого кластер, который является классом большинства. И оттуда мы видим, насколько это соответствует фактическим меткам.

mean(Majority_class[clusters] == target)
...