Точность не самый точный термин, но я думаю, вы хотите посмотреть, дает ли иерархическая кластеризация кластеры или группы, которые совпадают с вашими метками. Например, я использую набор данных радужной оболочки и использую 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)
Похоже, они являются двумя основными кластерами. Теперь мы пытаемся увидеть, как распределяются цели:
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)
Теперь, как и то, что вы сделали, мы получаем кластеры,
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)